[인증] Session-based와 Token-based
2024. 11. 27. 18:02ㆍ컴퓨터언어/소프트웨어공학
728x90
반응형
Session-based와 Token-based 인증의 차이는 주로 인증 데이터를 저장하고 관리하는 방식과 그에 따른 동작 차이에 있다.
Session-based Authentication (세션 기반 인증)
동작 방식
- 사용자가 로그인하면 서버는 사용자 정보를 기반으로 세션을 생성하고, 해당 세션 ID를 쿠키에 저장해 클라이언트에 전달
- 이후 클라이언트는 요청마다 쿠키에 담긴 세션 ID를 서버에 전송
- 서버는 세션 저장소에서 이 세션 ID를 확인해 사용자 정보를 인증
특징
- 세션 데이터는 서버에 저장되며, 클라이언트는 세션 ID만 보유
- 서버가 상태(state)를 유지해야 함 (stateful)
장점
- 서버가 세션 데이터를 직접 관리하므로 보안이 상대적으로 강함
- 세션 만료 등 세부 제어가 용이
단점
- 서버에 세션 저장소를 유지해야 하므로, 많은 사용자가 접속하면 서버 자원 소모가 큼
- 분산 서버 환경에서 세션 공유를 위한 추가 설정(ex. Redis) 필요
- 클라이언트-서버 간 동일 도메인에서만 활용하기 편리
Token-based Authentication (토큰 기반 인증)
동작 방식
- 사용자가 로그인하면 서버는 사용자의 인증 정보를 기반으로 JWT(JSON Web Token) 또는 기타 토큰을 생성해 클라이언트에 전달
- 클라이언트는 이 토큰을 로컬 스토리지나 쿠키에 저장
- 이후 요청 시 토큰을 Authorization 헤더에 담아 서버로 전송
- 서버는 토큰을 검증해 사용자 정보를 인증
특징
- 클라이언트에 인증 정보를 포함한 토큰이 저장되며, 서버는 별도의 상태를 유지하지 않음 (stateless)
- 주로 JWT를 사용하여 자체적으로 서명된 토큰을 생성함
장점
- 서버 상태를 유지하지 않아 확장성이 좋고 분산 서버 환경에 적합
- CORS 설정이 허용된다면 다른 도메인에서도 사용 가능
- 토큰에 사용자 권한 정보 등을 포함하여 클라이언트-서버 간 추가 요청 감소 가능
단점
- 토큰 탈취 시 보안 위험 (토큰은 클라이언트에 저장되므로)
- 토큰이 만료되거나 재발급되는 과정에서 복잡성이 증가할 수 있음
- 토큰 크기가 세션 ID보다 커서 요청 시 데이터 전송량이 증가
저장 위치 | 서버 (세션 저장소) | 클라이언트 (로컬 스토리지, 쿠키 등) |
서버 상태 | Stateful (서버에서 세션 유지) | Stateless (서버에서 상태 유지 없음) |
확장성 | 제한적 (서버 부하 증가) | 우수 (분산 시스템에 적합) |
보안성 | 상대적으로 강함 | 토큰 탈취 시 취약 가능성 |
사용 사례 | 내부 서비스, 동일 도메인 환경 | 모바일 앱, 분산 시스템, API 서버 |
선택의 기준
Session-based
- 소규모 애플리케이션, 동일 도메인 내에서 사용, 서버 부하가 적은 경우 적합
- 보안이 우선시되는 애플리케이션 (특히 민감 데이터 관리)
Token-based
- 분산 환경(ex. 마이크로서비스), 모바일 앱, 다중 클라이언트(웹, 모바일) 지원이 필요한 경우 적합
- 확장성과 클라이언트 독립성이 중요한 경우
물론 필요에 따라 두 방식을 혼합하여 사용할 수도 있다.
728x90
반응형
'컴퓨터언어 > 소프트웨어공학' 카테고리의 다른 글
디자인 패턴의 필요성 (1) | 2024.11.19 |
---|---|
XP(eXtreme Programming) (0) | 2020.08.20 |
SQL 성능 튜닝 (0) | 2020.08.02 |
논리데이터 모델 -> 물리데이터 모델 변환 (0) | 2020.08.02 |
국제 표준 제품품질 특성과 제품소프트웨어 버전관리 (0) | 2020.07.22 |