위클리 페이퍼 10주차 정리

코드잇
이 글은 읽는데 약 2분이 걸립니다.

Q1. 세션 기반 인증에 대해 설명해 주세요.

개념

세션 기반 인증이란, 서버가 사용자의 로그인 상태세션(session)이라는 형태로 서버 메모리나 DB(i.e. Redis)에 저장하고, 클라이언트는 세션을 식별하는 세션 ID를 쿠키로 받아 요청마다 서버에 보낸다.

서버는 이 세션 ID를 확인해 사용자를 식별하는 인증 방식이다.

흐름
  1. 사용자가 ID/PW로 로그인
  2. 서버는 세션 저장소에 사용자 정보를 기록하고, 세션 ID를 생성
  3. 세션 ID를 클라이언트에게 쿠키로 전달
  4. 클라이언트는 이후 요청마다 이 쿠키를 서버로 전송
  5. 서버는 세션 저장소에서 세션 ID를 확인하고 사용자 인증 처리
장점
  • 구현이 간단하고 오래된 웹 프레임워크에서 기본 지원
  • 서버가 상태를 관리하므로 유저 정보 저장이 용이
단점
  • 서버가 모든 세션을 기억해야 하므로 확장성 문제 발생 (특히 서버가 여러 대일 경우 세션 공유 필요)
  • 모바일 앱이나 외부 API 연동에는 부적합
  • 쿠키 기반이라 CSRF 취약 가능성 있음

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

개념

서버가 인증 성공 시 토큰을 발급하고, 클라이언트는 이후 요청마다 이 토큰을 Authorization Bearer 헤더에 담아 전송한다.

서버는 토큰 자체를 검증하여 사용자를 식별하고, 서버에 별도의 상태 저장이 필요 없다.

흐름
  1. 사용자가 로그인 요청
  2. 서버가 사용자 검증 후 JWT 같은 토큰 생성
  3. 클라이언트는 토큰을 저장 (쿠키, localStorage 등)
  4. 이후 요청 시 Authorization 헤더에 토큰 첨부
  5. 서버는 토큰의 유효성을 검증 (서명/만료 시간 확인) 후 요청 처리
장점
  • Stateless: 서버가 세션 상태를 저장하지 않아도 됨 (확장성과 분산 환경에서 유리)
  • 모바일 앱, SPA, API 인증에 적합
  • 인증 + 권한 부여까지 쉽게 처리 가능
단점
  • 토큰이 탈취되면 만료될 때까지 무조건 유효 (서버가 강제로 무효화하기 어려움)
  • 토큰이 길어질 수 있어 네트워크 트래픽 증가
  • 구현 난이도가 세션보다 살짝 높음