서버는 요청에 응답하는 것이 핵심 임무이므로 요청을 수락하든 거절하든 상관 없이 반드시 응답해야 합니다.
-> 예외 처리(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,
...
}));


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

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

N:M 관계는 belongsToMany 메서드를 사용한다.
routes/middlewares.js처럼 라우터 내에 미들웨어를 사용할 수 있다.
미들웨어:익스프레스의 핵심으로, 요청과 응답의 중간에 위치하여 미들웨어라고 부른다. 요청과 응답을 조작하여 기능을 추가하기도 하고, 나쁜 요청을 걸러내기도 한다.
Passport의 인증과정을 기억하자. 특히 serializeUser와 deserializeUser가 언제 호출되는지 파악하고 있어야 한다.
로그인 전
로그인 후

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