1. 세션(Session) 방식
세션은 서버 측에 사용자 상태를 저장하는 방식으로, 서버가 관리하는 일종의 사용자 식별 정보이다.
웹 브라우저가 로그인 요청을 보내면, 서버는 세션 ID를 생성하고 이를 클라이언트의 쿠키에 저장한다.
이후 클라이언트가 서버에 요청할 때마다 이 세션 ID를 쿠키에 담아 보내면서 인증 상태를 확인할 수 있다.
- 특징
- 서버 메모리에 세션 데이터가 저장되므로, 서버에서 로그아웃하거나 세션이 만료되면 상태가 사라진다.
- 서버에 상태가 유지되기 때문에 다중 서버(분산 환경)에서 확장이 필요할 경우 세션 스토리지를 위한 별도의 설정이 필요하다. 예를 들어, 세션 정보를 Redis와 같은 인메모리 데이터베이스에 저장해 확장성을 해결할 수 있다.
- 장점
- 상대적으로 보안성이 높다. 세션 정보가 서버에만 존재하므로, 클라이언트가 이를 임의로 변경하거나 접근하기 힘들다.
- 세션 ID가 노출되더라도 서버에서 세션을 만료시키면 즉시 접속을 차단할 수 있다.
- 단점
- 서버 메모리나 데이터베이스의 부하가 증가한다.
- 특히 많은 사용자를 동시에 처리하는 경우 리소스가 크게 소모될 수 있다.
- 서버가 사용자 상태를 관리해야 하므로 서버 간 세션 동기화가 필요한 경우가 많다.
2. 토큰(Token) 방식
토큰은 서버에서 인증 정보를 클라이언트에 저장하는 방식.
클라이언트가 로그인 요청을 보내면 서버는 특정 규격에 맞는 토큰을 발급하고,
이를 클라이언트가 저장하여 이후 요청 시마다 서버에 보내어 인증을 유지하게 한다.
- 특징
- 토큰에는 서버가 사용자의 인증 여부를 확인할 수 있는 정보가 포함된다.
- 쿠키나 로컬 스토리지에 저장할 수 있으며, 클라이언트가 토큰을 직접 관리한다.
- 장점
- 서버에 인증 상태를 저장할 필요가 없어 확장성이 좋다.
- 토큰은 다양한 클라이언트(모바일, 웹, 데스크톱)에서 재사용할 수 있으며, API 인증에도 활용할 수 있다.
- 단점
- 토큰이 탈취되면 탈취된 토큰을 무효화할 수 있는 방법이 제한적이다.
- 토큰의 만료 시간이 필요하며, 일반적으로 만료 시 재로그인이 필요하다.
3. JWT(Json Web Token) 방식
JWT는 토큰의 한 종류로, JSON 형식으로 데이터를 인코딩하여 서버와 클라이언트가 정보를 주고받는 방식이다.
JWT는 서명이 포함되어 있어 토큰의 위변조 여부를 서버에서 검증할 수 있다.
- 특징
- JWT에는 사용자 정보와 만료 시간이 포함되며, 서버는 이를 검증하여 유효성을 판단한다.
- JWT 자체에 정보가 포함되어 있어 서버에 세션 정보를 저장하지 않아도 된다.
- 장점
- 서버 측 상태 저장이 필요 없어 확장성이 좋으며, 다른 서버에서도 쉽게 검증이 가능하다.
- 다양한 클라이언트 환경에서 활용이 가능하고, API 기반 시스템에 적합하다.
- 단점
- 만료되지 않은 토큰이 탈취될 경우 무효화하기 어렵다.
- 서버에 세션 저장을 하지 않으므로, 사용자 정보를 포함하지 않은 경우 클라이언트가 사용자를 확인하기 어렵다.
요약 비교
구분세션(Session) / 토큰(Token) / JWT
구분세션(Session) | 토큰(Token) | JWT | |
저장 위치 | 서버 | 클라이언트 | 클라이언트 |
상태 유지 | 서버에서 사용자 상태를 직접 관리 | 서버는 상태 저장 안 함 | 서버는 상태 저장 안 함 |
장점 | 보안성이 높고 만료 시 서버에서 바로 제어 가능 | 서버 부하 적고 확장성 우수 | 확장성이 우수하고, API 인증에 최적화 |
단점 | 서버 리소스 소모가 크고, 다중 서버에서 어려움 | 탈취 시 만료 전까지 제어 어려움 | 탈취 시 무효화 어려움, 민감 정보 포함 위험성 |
각 방식은 장단점이 있어 사용 환경에 따라 적절한 방식을 선택하는 것이 중요하다. 예를 들어, 민감한 데이터가 많은 경우 세션 기반 방식을 선택하고, 확장성과 API 인증이 중요한 경우 JWT를 활용하는 것이 일반적이다.
'인턴' 카테고리의 다른 글
[17일차] URI 와 웹 브라우저 요청의 흐름 (0) | 2024.11.05 |
---|---|
[17일차] IP / TCP / UDP / PORT / DNS (0) | 2024.11.05 |
[13일차] Next.js api route.tsx에서 JSON값받기 (0) | 2024.10.30 |
JSON 이란? (1) | 2024.10.25 |
FormData 란? (0) | 2024.10.24 |