Node.js 교과서 9장 핵심 정리

·2022년 1월 25일
  • 서버는 요청에 응답하는 것이 핵심 임무이므로 요청을 수락하든 거절하든 상관 없이 반드시 응답해야 합니다.
    -> 예외 처리(try, catch)에 유의하며 코드를 설계하도록 한다.

  • 개발 시 서버를 매번 수동으로 재시작하지 않으려면 nodemon을 사용하는 것이 좋다.
    -> nodemon을 사용하지 않을 경우 코드를 수정하면 새로 npm start로 서버를 재시작해야한다. 하지만 nodemon을 사용한다면 코드를 저장만해도 변경사항이 서버에 적용된다.

  • dotenv패키지와 env파일로 유출되면 안되는 비밀키를 관리하자
    ->cookieParser와 express-session의 nodebirdseret같은 비밀키는 직접 하드코딩하지 않는다. (소스 코드가 유출되었을 때 키도 같이 유출되므로)
    이를 별도로 관리하기 위해 dotenv패키지를 이용한다.
    비밀키는 .env라는 파일에 모아두고, dotenv가 .env파일을 읽어 process.env 객체에 넣는다.

$ npm i dotenv //.env파일 생성
//.env
COOKIE_SECRET=nodebirdsercret

.env파일에 키=값 형식으로 비밀키를 추가하고 app.js에서 require('dotenv').config();를 호출하면 된다.

//app.js
const express = require ('express');
...
require('dotenv').config();
...
app.use(cookieParser(process.env.COOKIE_SECRET));
//.env의 비밀키들을 process.env에 넣으므로 이후 이처럼 키를 사용할 수 있다.
app.use(session({
	...
	secret: process.env.COOKIE_SECRET,
	...
}));
  • 라우터는 routes폴더에, 데이터베이스는 models 폴더에, pug 파일은 views폴더에 구분하여 저장하면 프로젝트 규모가 커져도 관리하기 쉽다.

  • 데이터베이스를 구성하기 전에, 데이터 간 1:1, 1:N, N:M 관계를 잘 파악하자
    시퀄라이즈(mySQL 사용을 편하게 도와주는 라이브러리)에서는 해당 관계들을 다음 메서드로 표현한다.

1:N 관계는 hasMany(1->N) , belongsTo (N->1)

1:1 관계는 hasOne, belongTo (반대여도 상관없다)


N:M 관계는 belongsToMany 메서드를 사용한다.

  • routes/middlewares.js처럼 라우터 내에 미들웨어를 사용할 수 있다.
    미들웨어:익스프레스의 핵심으로, 요청과 응답의 중간에 위치하여 미들웨어라고 부른다. 요청과 응답을 조작하여 기능을 추가하기도 하고, 나쁜 요청을 걸러내기도 한다.

  • Passport의 인증과정을 기억하자. 특히 serializeUser와 deserializeUser가 언제 호출되는지 파악하고 있어야 한다.



Passport의 인증과정

로그인 전

  • 로그인 요청
  • passport.authenticate 메서드 호출
  • 로그인 전략 수행
    *로그인 성공 시 사용자 정보 객체와 함께 req.login 호출
  • req.login 메서드가 passport.serializeUser 호출
  • req.session에 사용자 아이디만 저장
  • 로그인 완료

로그인 후

  • 모든 요청에 passport.session() 미들웨어가 passport.deserializeUser 메서드 호출
  • req.session에 저장된 아이디로 DB에서 사용자 조회
  • 조회된 사용자 정보를 req.user에 저장
  • 라우터에서 req.user 객체 사용 가능




  • 프런트엔드 form 태그의 인코딩 방식이 multipart일 때는 multer 같은 multipart 처리용 패키지를 사용하는 것이 좋다.
    주로 이미지는 input태그와 form 태그를 통해서 업로드하는데, 이 때 form의 인코딩 타입은 multipart/form-data인 경우가 많다.
    이 형식으로 올라온 데이터는 직접 처리가 힘드므로 multipart 처리용 모듈을 사용한다.

Multer은 multipart 데이터를 업로드하는 라우터에 붙는 미들웨어다.

profile
풀스택 호소인

0개의 댓글