티스토리 뷰

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에서 사용자 인증을 간편하게 구현할 수 있도록 해주는 미들웨어

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
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
최근에 올라온 글
최근에 달린 댓글
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Total
Today
Yesterday
반응형