[NB] 위클리 페이퍼: Node.js 백엔드 개발 중급[16]

권나현·2025년 7월 19일
post-thumbnail

Q. 토큰 기반 인증에 대해 설명해 주세요.

토큰 기반 인증(Token-based Authentication)이란?

  • 토큰 기반 인증은 최근 웹 애플리케이션, 특히 SPA(Single Page Application)나 모바일 앱에서 많이 사용되는 인증 방식이다. 대표적으로 JWT(Json Web Token)이 사용되며, 서버가 상태를 유지하지 않아도 되기 때문에 Stateless 인증이라고도 불린다.

1. 개념

  • 토큰 기반 인증은 사용자가 로그인하면 서버가 토큰(Token)을 발급하고, 이 토큰을 클라이언트가 저장한 뒤, 요청 시마다 함께 전송해 인증을 처리하는 방식이다. 서버는 토큰만으로 사용자를 식별하며, 별도의 세션 저장소가 필요 없다.

2. 동작 방식

2-1. 로그인 요청

  • 사용자가 ID/PW를 서버에 전송한다.

2-2. 인증 후 토큰 발급

  • 서버는 사용자 인증에 성공하면, 사용자 정보를 담은 JWT 토큰을 생성하여 클라이언트에 전달한다.

2-3. 토큰 저장

  • 클라이언트는 받은 토큰을 로컬스토리지(localStorage) 또는 세션스토리지(sessionStorage)에 저장한다.

2-4. 요청 시 토큰 포함

  • 클라이언트는 이후 API 요청 시 Authorization 헤더에 Bearer {토큰} 형태로 토큰을 포함한다.

2-5. 서버에서 토큰 검증

  • 서버는 토큰을 해독(디코딩)하여 유효한지 검증하고, 유저 정보를 추출하여 요청 처리한다.

3. JWT(Json Web Token) 구성

  • JWT는 .으로 구분된 세 개의 부분으로 구성된다.
xxxxx.yyyyy.zzzzz
|     |     |
Header Payload Signature
  • Header: 알고리즘, 타입 정보 (ex: HS256)

  • Payload: 사용자 정보, 만료 시간 등 (ex: userId, exp)

  • Signature: 서버의 비밀키로 암호화된 서명 (변조 방지)

4. 예시 흐름

1. POST /login → 서버 인증 성공 → JWT 토큰 발급
2. 클라이언트: localStorage에 토큰 저장
3. GET /my-page → Authorization: Bearer {토큰} 포함
4. 서버: 토큰 검증 → 사용자 인증 완료 → 데이터 응답

5. 장점

  • Stateless 구조: 서버에 세션 저장이 필요 없어 확장성이 높다.

  • 확장에 용이: 서버 간 상태 공유가 필요 없으므로 마이크로서비스, 서버리스 구조에 적합하다.

  • 유연한 저장 방식: 클라이언트가 토큰을 자유롭게 저장이 가능하다.

  • 다중 플랫폼 지원: 웹/모바일 등 다양한 플랫폼에서 활용이 쉽다.

6. 단점

  • 보안 이슈: 토큰이 유출되면 제어 불가능하다. (로그아웃, 만료 이전까지 무방비)

  • 토큰 폐기 어려움: 서버에서 상태를 유지하지 않기 때문에 토큰을 강제로 무효화하기 어렵다.

  • 토큰 크기 문제: 세션 ID보다 JWT는 크기가 크고, 매 요청마다 포함되기 때문에 전송 비용이 증가할 수 있다.

7. 토큰 기반 인증 vs 세션 기반 인증

구분토큰 기반 인증세션 기반 인증
저장 위치클라이언트서버
상태 유지무상태 (Stateless)상태 유지 (Stateful)
확장성뛰어남낮음
로그아웃 처리까다로움쉬움 (세션 삭제)
토큰 탈취 시 대응어렵다서버에서 제어 가능
인증 방식헤더에 토큰 포함쿠키로 세션 ID 전달

8. 언제 토큰 기반 인증을 사용할까?

  • 프론트엔드가 React, Vue, Svelte 등 SPA로 구성된 경우

  • 서버리스 또는 마이크로서비스 아키텍처를 사용하는 경우

  • 여러 플랫폼(웹, 모바일 등)에서 동일한 인증 토큰을 활용하고 싶은 경우

  • 서버의 상태를 최소화하고 싶을 때

profile
node.js 백앤드 개발자가 되기 위한 Study Vlog

0개의 댓글