티스토리 뷰
728x90
반응형
MVC 패턴(Model-View-Controller) : 각각의 역할과 관심사를 분리함으로써 모델, 뷰, 컨트롤러가 독립적으로 작동하도록 하는 것이 목적
- 모델은 DB와 상호작용 및 비즈니스 로직 관리, 뷰는 레이아웃과 화면처리, 컨트롤러는 모델과 뷰로 명령을 전달하는 역할을 함
- 서비스(Service): 비즈니스 로직을 서비스로 분리해 모델이 DB라는 하나의 역할만 할 수 있도록 도와줌 | 서비스를 사용함으로서 여러 부분에서 사용되는 기능을 서비스를 통해 중복 제거 가능, 모델-컨트롤러간 결합을 낮추고, 각 부분이 완전히 독립적으로 확장이 가능해짐
키 파생함수(Key Derivation Function)
- 키 스트레칭(Key Streching) : salt와 PW를 같이 해싱해 다이제스트(digest, 해시 알고리즘에서 생성된 해시값) 생성
- Adaptive Key Derivation Functions : 키 생성 함수는 다이제스트를 생성할 때 솔팅과 키 스트레칭을 반복해 솔트와 피스워드 외에도 입력값을 추가해 공격자가 쉽게 닻이제스트를 유추할 수 없도록 함
- PBKDF2 : 키 파생 함수로 가장 많이 사용
- bcrypt : PW 저장 목적으로 생성, 현재까지 사용되는 가장 강력한 알고리즘 중 하나
- scrypt : PBKDF2와 유사, 많은 계산 리소스가 필요해 병렬화 처리가 매우 어렵고 공격자에 대한 저항성을 높이는데 중점을 둔 알고리즘
- Argon2 : 최근에 나온 키 파생 함수 | 시간, 메모리 파라미터를 사용해 고도로 조절 가능한 알고리즘... 최신 보안 요구사항을 충족시키기 위해 설
세션 모듈
npm install express-session
- secret 옵션) 쿠키에 서명하는 데 사용되는 문자열
- resave 옵션) 기본 값 true | 요청 중에 세션이 수정되지 않았더라도 세션이 세션 저장소에 다시 저장되도록 함
- saveUninitialized 옵션) false 라면 초기화되지 않은 세션이 있는 응답에 쿠키가 설정되지 않음 | 요청에 대해 기존 세션이 로드된 경우에만 동작을 수정
import session from 'express-session';
app.use(
session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true,
}),
);
JWT
npm install jsonwebtoken
import jwt from 'jsonwebtoken';
function createToken(user) {
const payload = { userId: user.id };
const options = { expiresIn: '1h' };
return jwt.sign(payload, process.env.JWT_SECRET, options);
}
npm install express-jwt
Passport : Node.js에서 사용자 인증을 간편하게 구현할 수 있도록 해주는 미들웨어
- 공식문서 : https://www.passportjs.org/packages/passport-local/
- passport.use() 사용
npm install passport passport-local
- 세션 기반
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
- 토큰 기반
npm install passport-jwt
- OAuth Client ID 발급 받기
728x90
반응형
'JavaScript > JS백엔드' 카테고리의 다른 글
[REST] 웹 API 디자인 (0) | 2025.01.16 |
---|---|
[JS백엔드] 위임 (0) | 2025.01.14 |
[JS백엔드] 인증과 인과 (0) | 2025.01.14 |
[Express] 파일 업로드 (0) | 2025.01.14 |
[Express] 라우터 (1) | 2025.01.14 |