1. 쿠키(Cookie)
쿠키는 클라이언트(브라우저)에 저장되는 작은 데이터 조각으로, 서버가 클라이언트의 상태 정보를 기억하기 위해 사용합니다. 주로 서버가 클라이언트에게 응답할 때, 클라이언트에게 쿠키를 설정해 두면 이후 클라이언트가 서버에 요청을 보낼 때 쿠키를 자동으로 포함하게 됩니다.
- 용도: 로그인 상태 유지, 세션 ID 저장, 사용자 선호 설정 등을 저장.
- 특징: 클라이언트 측에 저장되며, 요청 시마다 서버로 자동 전송됨.
- 단점: 클라이언트 측에 저장되므로 보안에 취약할 수 있음.
2. 세션(Session)
세션은 서버 측에서 유지되는 사용자 상태 정보입니다. 사용자가 서버에 로그인하면 서버가 세션을 생성하고, 클라이언트는 세션 ID를 쿠키에 저장하여 요청 시마다 이 세션 ID를 서버로 전송합니다. 서버는 이 세션 ID를 기반으로 사용자 상태를 식별하고, 필요한 정보를 유지합니다.
- 용도: 로그인 상태, 사용자 정보 등을 서버에서 관리.
- 특징: 서버에 저장되며, 클라이언트는 세션 ID만 가지고 서버에 요청.
- 단점: 많은 사용자가 접속할 때 서버 측에 세션 정보를 유지해야 하므로 서버 부하가 발생할 수 있음.
3. JSON 웹 토큰(JWT - JSON Web Token)
최근 많이 사용되는 인증 방식은 **JWT(JSON Web Token)**입니다. JWT는 클라이언트와 서버 사이에서 상태 정보를 유지하는 **자체 포함된 토큰(self-contained token)**입니다. JWT는 서버가 클라이언트에게 발급한 토큰을 클라이언트가 저장하고, 이후 요청 시마다 이 토큰을 서버에 전송하여 인증을 진행합니다. 서버는 세션을 유지할 필요가 없으며, 토큰 안에 사용자의 인증 정보가 포함되어 있어 서버는 토큰만으로도 인증 처리가 가능합니다.
- 구성: JWT는 세 가지 부분으로 구성됩니다: 헤더(Header), 페이로드(Payload), 서명(Signature).
- 헤더: 토큰의 타입(JWT)과 알고리즘 정보.
- 페이로드: 사용자 정보나 만료 시간 등의 클레임(claim)이 포함됩니다.
- 서명: 헤더와 페이로드를 기반으로 비밀 키로 생성한 서명. 이를 통해 데이터 변조 여부를 검증합니다.
- 용도: 주로 API 인증에 많이 사용되며, 서버가 상태 정보를 유지할 필요가 없는 무상태(stateless) 인증 방식에 적합.
- 특징:
- 자체 포함(Self-contained): JWT 자체에 사용자의 인증 정보가 포함되어 있어 서버가 세션을 유지할 필요가 없음.
- 확장성: JWT는 중앙 집중식 세션 저장소 없이도 서버 간 확장(예: 여러 서버에서 인증 처리 가능)이 용이함.
- 보안: 서버는 토큰을 통해 사용자의 인증을 검증하지만, 토큰이 유출되면 만료 전까지는 인증이 유지되므로 주의가 필요함.
- 단점: JWT가 자체 포함된 정보이므로, 토큰이 커질 수 있으며 클라이언트와 서버 간에 요청 시 토큰이 함께 전송되므로 네트워크 비용이 발생할 수 있음. 또한, 보안 측면에서 만료되지 않은 JWT가 유출되면 위험할 수 있음.
쿠키, 세션, JWT의 차이점 요약
- 쿠키: 클라이언트에 저장되는 작은 데이터. 주로 세션 ID 저장에 사용.
- 세션: 서버에 저장되는 사용자 상태 정보. 클라이언트는 세션 ID를 통해 서버에 인증 요청.
- JWT: 자체적으로 사용자 정보를 포함한 토큰으로, 서버에 상태를 저장하지 않고 인증 처리 가능.
요즘 세션 대신 JWT를 많이 쓰는 이유
- 확장성: JWT는 상태 정보를 서버에 유지하지 않으므로, 서버 간 확장이 쉬워 클라우드 환경이나 마이크로서비스 아키텍처에서 많이 사용됩니다.
- 무상태: 서버에 상태를 저장하지 않기 때문에 각 요청은 독립적으로 처리되고, 서버 부하가 줄어듭니다.
- 편리한 인증 처리: JWT는 클라이언트 측에서 쉽게 사용 가능하며, 다양한 플랫폼에서 사용할 수 있습니다.
그래서 최근에는 세션 대신 JWT를 많이 사용하는 추세입니다.
'Network Study' 카테고리의 다른 글
로드밸런싱과 클러스터링 (0) | 2024.10.08 |
---|---|
정적, 동적 서버 (2) | 2024.10.07 |
HTTP, HTTP/2, HTTP/3의 차이점 (1) | 2024.09.30 |
텍스트 인코딩 방식과 HTTP의 발전 (0) | 2024.09.29 |
HTTP 요청/응답 구조 (프로토콜, 메서드) (1) | 2024.09.27 |