728x90
세션 기반 인증
세션 기반 인증은 서버 측에서 사용자의 세션 정보를 저장하고, 클라이언트에게는 해당 세션을 식별할 수 있는 고유한 세션 ID를 제공하는 방식이다.
세션 기반 인증의 작동 방식
- 사용자가 로그인하면 프론트엔드가 인증 정보를 백엔드 서버로 전송한다.
- 백엔드는 비밀 키를 사용해 세션을 생성하고 세션 데이터를 데이터베이스나 세션 저장소에 저장한다.
- 서버는 고유한 세션 ID가 포함된 쿠키를 사용자의 브라우저로 전송한다.
- 이후의 요청에서 브라우저는 헤더에 세션 ID를 포함시켜 전송한다.
- 서버는 세션 ID를 검증하고 접근을 허용한다.
세션 기반 인증의 장점
- 세션 관리가 용이하다: 세션 저장소에서 간단히 세션을 제거하여 로그아웃 처리가 가능하다.
- 중앙 집중식 세션 관리로 사용자 활동 추적과 제어가 편리하다.
세션 기반 인증의 단점
- 확장성 문제: 사용자가 증가하면 세션 저장소가 병목 현상을 일으킬 수 있다.
- 서버 의존성: 세션 상태 관리를 위해 항상 서버가 필요하다
JWT 기반 인증
JWT(JSON Web Token) 인증은 세션 기반 인증과는 다른 접근 방식을 취한다. 사용자의 정보를 토큰 자체에 암호화하여 담아 전달하는 방식이다.
JWT의 작동 방식
- 사용자가 로그인하면 백엔드 서버가 인증을 수행한다.
- 서버는 개인 키로 서명된 JWT를 생성한다. 별도의 세션 저장소는 필요하지 않다.
- JWT는 클라이언트의 브라우저로 전송된다. (주로 쿠키를 통해)
- 이후 모든 요청에서 브라우저에 헤더에 JWT를 포함하여 전송한다.
- 서버는 JWT의 유효성을 검증하고 토큰에서 사용자 정보를 추출한다.
JWT의 장점
- 무상태(Stateless) 방식: 별도의 세션 저장소가 필요 없기 때문에 수평적 확장이 용이하다.
- 높은 이식성: 백엔드 세션 저장소 공유 없이도 여러 서비스와 도메인에서 사용할 수 있다.
JWT의 단점
- 토큰 무효화의 어려움: 발급된 토큰을 만료 전에 강제로 무효화하기가 복잡하다.
- 데이터 갱신의 제한: 토큰에 담긴 정보는 만료되기 전까지 업데이트할 수 없다.
- 페이로드 크기: JWT는 포함된 정보량에 따라 크기가 커질 수 있어 네트워크 부하가 증가할 수 있다.
세션 vs JWT: 어떤 것을 선택해야 할까?
특성 | 세션 | JWT |
보안 | 서버 관리로 안전하지만 확장성 낮음 | 클라이언트에 저장, 유출 시 위험 있음 |
부하 위치 | 서버에 세션 정보가 저장되어 있기 때문에, 사용자가 많아질 경우 서버의 부하 증가 가능 | 토큰 값이 세션 ID보다 크기 때문에, 네트워크 부하 증가 가능 |
확장성 | 서버 간 동기화 필요 | 상태가 없어서 확장에 유리 |
로그아웃/만료 처리 | 서버에서 강제로 제어 가능 | 복잡한 관리 로직 필요 |
사용 사례 | 전통적인 웹 애플리케이션 | API 중심, SPA, 모바일 앱 |
세션을 사용해야 하는 경우
- 실시간 사용자 상태 관리와 즉각적인 세션 무효화가 중요한 경우
- 내부 사용자 관리가 중요하고 보안이 우선인 경우
JWT를 사용해야 하는 경우
- 서비스의 확장성과 시스템 간 연동이 중요한 경우
- 인증 처리의 서버 의존도를 최소화하고 싶은 경우
[References]
728x90