목록
'node js' 122건
-
노드 서비스 테스트하기 - 테스트 준비하기실제 서비스를 개발 완료 후, 개발자나 QA들은 자신이 만든 서비스가 제대로 동작하는지 테스트합니다. 이때 기능이 많다면 일일이 수작업으로 테스트하기에는 작업량이 너무 많을 수 있습니다. 이런 경우 테스트를 자동화하여 프로그램이 프로그램을 테스트하도록 만들기도 합니다.또한, 테스트 환경과 실제 서비스 환경을 다르므로 테스트하는 제약이 따를 수도 있고, 테스트 결과와 실제 동작 결과가 다를 수도 있습니다. 이럴 때는 테스트 환경에서 실제 환경을 최대한 흉내 내서 작업합니다.단, 테스트를 아무리 철저하게 해도 에러를 완전히 막을 수는 없습니다. 보통 에러는 개발자가 예상하지 못한 케이스에서 발생하므로, 예상하지 못한다면 그에 대한 테스트도 작성할 수 없습니다. 하지만 모든 에러를 없앨 수 없다라도 테스트는 ..
-
CORS 이해하기NodeCat이 nodebird-api를 호출하는 것은 서버에서 서버로 API를 호출하는 것입니다. 만약 Nodecat의 프런트에서 nodebird-api의 서버 API를 호출하면 어떻게 될까요?routes/index.js에 프론트 화면을 렌더링하는 라우터를 추가합니다.const express = require("express");const axios = require("axios");const router = express.Router();const URL = "http://localhost:8002/v1";axios.defaults.headers.origin = "http://localhost:4000"; // origin 헤더 추가 // ❶const request = async (req, api) ..
-
사용량 제한 구현하기일시적으로 인증된 사용자(토큰을 발급받은 사용자)만 API를 사용할 수 있게 필터를 두긴 했지만, 아직 충분하지는 않습니다. 인증된 사용자라고 해도 과도하게 API를 사용하면 API 서버에 무리가 갑니다. 따라서 일정 기간 내에 API를 사용할 수 있는 횟수를 제한하여 서버의 트래픽을 줄이는 것이 좋습니다. 유로 서비스라면 과금 체계별로 횟수에 차이를 둘 수도 있습니다. 예를 들면 무료료 이용하는 사람은 1시간에 열 번을 허용하고, 유료로 이용하는 사람은 1시간에 100번을 허용하는 식입니다.이러한 기능 또한 npm에 패키지로 만들어져 있습니다. 이 기능을 제공하는 express-rate-limit 패키지를 소개합니다. nodebird-api 서버에 다음 패키지를 설치합니다.$ npm i express-..
-
다른 서비스에서 호출하기API 제품 서버를 만들었으니 API를 사용하는 서비스로 만들어봅시다. 이 서비스는 다른 서버에게 요청을 보내므로 클라이언트 역할을 합니다. API 제공자가 아닌 API 사용자의 입장에서 진행하는 것이며, 바로 NodeBird 앱의 데이터를 가져오고 싶어 하는 사용자입니다. 보통 그 데이터를 가공해 2차적인 서비스를 하려는 회사가 API를 이용하곤 합니다. 예를 들어 쇼핑몰들이 있으면, 쇼핑몰들의 최저가를 알려주는 서비스가 2차 서비스가 됩니다. 우리의 2차 서비스 이름은 NodeCat입니다.nodebird-api 폴더와 같은 위치에 nodecat-api 폴더와 같은 위치에 nodcat이라는 새로운 폴더를 만듭니다. 별도의 서버이므로 nodebird-api와 코드가 섞이지 않게 주의합니다.{ "name..
-
JWT 토큰으로 인증하기웹 서버에 JWT 토큰 인증 과정을 구현해 보겠습니다. 먼저 JWT 모듈을 설치합니다.$ npm i jsonwebtoken 이제 JWT를 사용해서 API를 만들어보겠습니다. 다른 사용자가 API를 쓰려면 JWT 토큰을 발급받고 인증받아야 합니다. 이는 대부분의 라우터에 공통적으로 해당하는 부분이므로 미들웨어로 만들어두는 게 좋습니다. nodebird-api/.envCOOKIE_SECRET=nodebirdsecretKAKAO_ID=03216323ce22d651877427baebd91267JWT_SECRET=jwtSecret nodebird-api/routes/middlewares.jsconst jwt = require("jsonwebtoken");exports.isLoggedIn = (req, res, n..
-
JWT 토큰으로 인증하기 (1)JWT는 JSON Web Token의 약어로, JSON 형식의 데이터를 저장하는 토큰입니다. JWT는 다음과 같이 세 부분으로 구성되어 있습니다.헤더(HEADER): 토큰 종류와 해시 알고리즘 정보가 들어 있습니다.페이로드(PAYLOAD): 토큰의 내용물이 인코딩된 부분입니다.시그니처(SIGNATURE): 일련의 문자열이며, 시그니처를 통해 토큰이 변조되었는지 여부를 확인할 수 있습니다.시그니처는 JWT 비밀 키로 만들어집니다. 이 비밀 키가 노출되면 JWT 토큰을 위조할 수 있으므로 비밀 키를 철저히 숨겨야 합니다. 시그니처 자체는 숨기지 않아도 됩니다. JWT 토큰 예시eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6I..
-
Nodebird 서비스와 데이터베이스를 공유하는 프로젝트 구조 갖추기(2)이제 새로 생성한 도메인 모델을 시퀄라이즈와 연결합니다. 사용자 모델과 일대다 관계를 가지는데, 사용자 한 명이 여러 도메인을 소유할 수고 있기 때문입니다.models/index.jsconst Sequelize = require("sequelize");const env = process.env.NODE_ENV || "development";const config = require("../config/config")[env];const User = require("./user");const Post = require("./post");const Hashtag = require("./hashtag");const Domain = require("./domain");const db = {};const seque..
-
Nodebird 서비스와 데이터베이스를 공유하는 프로젝트 구조 갖추기(1)다른 서비스에 Nodebird 서비스의 게시글, 해시태그, 사용자 정보를 JSON 형식으로 제공할 것입니다. 단, 인증을 받은 사용자에게만 일정한 할당량 안에서 API를 호출할 수 있도록 허용할 것입니다.우선 nodebird-api 폴더를 만들고 package.json 파일을 생성합니다. npm init으로 생성한 후 dependenciese들을 설치해도 되고, 이제 package.json을 복사해도 됩니다. 새로 추가된 패키지는 uuid이며, 고유한 랜덤 문자열을 만들어내는 데 사용됩니다.{ "name": "nodebird-api", "version": "0.0.1", "description": "NodeBird API 서버", "main": "app.js", "scripts": { "s..
-
API 서버 이해하기API는 Application Programming Interface의 두문자어로, 다른 애플리케이션에서 현재 프로그램의 기능을 사용할 수 있게 허용하는 접점을 의미합니다. 웹 API는 다른 웹 서비스의 기능을 사용하거나 자원을 가져올 수 있는 창구입니다. 흔히 API를 '열었다'는 '만들었다'고 표현하는데, 이는 다른 프로그램에서 현재 기능을 사용할 수 있게 허용했음을 뜻합니다. 다른 사람에게 정보를 제공하고 싶은 부분만 API를 열어넣고, 제공하고 싶지 않는 부분은 API를 만들지 않는 것입니다. 또한, API를 열어놓았다 하더라도 모든 사람이 정보를 가져갈 수 있는 아니라 인증된 사람만 일정 횟수 내에서 가져가게 제한을 둘 수 있습니다. 위와 같은 서버에 API를 울려서 URL을 통해 접근할 수..
-
프로젝트 마무리하기이제 팔로잉 기능 과 해시태그 검색 기능만 추가하면 됩니다. 다른 사용자를 팔로우하는 기능을 만들기 위해 routes/user.js를 작성합니다.const express = require("express");const { isLoggedIn } = require("./middlewares");const User = require("../models/user");const router = express.Router();router.post("/:id/follow", isLoggedIn, async (req, res, next) => { try { const user = await User.findOne({ where: { id: req.user.id } }); if (user) { a..
-
multer 패키지로 이미지 업로드 구현하기SNS 서비스인 만큼 이미지 업로드도 중요합니다.패키지를 먼저 설치합니다.$ npm i multer 이미지를 어떻게 저장할 것인지는 서비스의 특성에 따라 달라집니다. Nodebird 서비스는 input 태그를 통해 이미지를 선택할 떄 바로 업로드를 진행하고, 업로드된 사진 주소를 다시 클라이언트에 알릴 것입니다. 게시글을 저장할 때는 데이터베이스에 직접 이미지 데이터를 넣는 대신 이미지 경로만 저장합니다. 이미지는 서브 디스크에 저장됩니다.그럼 post 라우터를 작성해보겠습니다.const express = require("express");const multer = require("multer");const path = require("path");const fs = require("fs");const ..
-
카카오 로그인 구현하기 (2)아직 끝난 것이 아닙니다. kakaoStrategy.js에서 사용하는 clientID를 발급받아야 합니다. 카카오 로그인을 위해서는 카카오 개발자 계정과 카카오 로그인용 애플리케이션 등록이 필요합니다.https://developers.kakao.com에 접속하여 카카오 회원거입 또는 로그인을 합니다. 로그인 후 앱 메뉴에 앱 생성 버튼을 누릅니다. 다음 그림과 같이 카카오용 Norebird 앱을 만듭니다. 앱 아이콘은 등록하지 않아도 되고, 앱 이름과 회사명은 여러분이 원하는 대로 입력하면 됩니다. REST API 키를 복사하여 .env 파일에 넣습니다. 여러분의 키는 이 책의 키와 다르므로 이 책의 키 대신 여러분의 키를 넣어야 합니다.앱 설정 > 플랫폼에서 Web 플랫폼 등록 메뉴를 선택합니다. 사이..