728x90
HTTP Session이란?
HTTP 세션은 웹 애플리케이션에서 사용자 정보를 일정 시간 동안 유지하기 위한 기술입니다.
세션은 사용자가 웹 애플리케이션에 접속한 뒤 로그인 상태를 유지하거나 사용자 활동을 추적하는 데 사용됩니다.
HTTP Session의 특징
- Stateless 문제 해결
- HTTP 프로토콜은 Stateless(상태 비저장) 특성을 가지며, 서버는 각 요청이 서로 독립적입니다.
- 이를 해결하기 위해, 사용자가 인증된 이후 서버는 세션 ID를 발급하여 사용자의 상태를 유지합니다.
- 세션 ID를 통해 서버는 사용자를 식별하고, 매 요청마다 재인증 없이 동일한 사용자로 간주할 수 있습니다.
- 쿠키와의 연계
- 세션 ID는 쿠키를 통해 클라이언트에게 전달됩니다.
- 이후 클라이언트는 매 요청 시 해당 쿠키를 서버에 전송하여 세션을 식별합니다.
- 로그인 상태 관리
- 세션은 로그인 정보와 같은 중요한 데이터를 관리하며, 사용자가 다시 접속해도 일정 시간 동안 로그인 상태를 유지할 수 있습니다.
- 서버 측 관리
- 세션은 서버 측에서 관리되므로 클라이언트가 임의로 세션 정보를 조작할 수 없습니다.
- 세션 ID는 랜덤하게 생성되며, HTTPS를 통해 암호화되어 전송되므로 보안이 강화됩니다.
- 만료와 갱신
- 세션은 일정 시간이 지나면 자동으로 만료될 수 있으며, 서버는 세션 만료 시간을 갱신하거나 세션 데이터를 수정할 수 있습니다.
HTTP Session 인증 과정
- 사용자 로그인 시도
- 사용자는 웹 애플리케이션에 아이디와 비밀번호 같은 인증 정보를 입력합니다.
- 서버의 인증 정보 검증 및 세션 생성
- 서버는 사용자의 인증 정보를 확인한 후, 세션 ID를 생성합니다.
- 세션 저장 및 관리
- 서버는 생성된 세션 ID와 함께 사용자의 로그인 정보를 서버 측 메모리나 데이터베이스에 저장합니다.
- 클라이언트로 세션 ID 전달
- 서버는 세션 ID를 쿠키에 담아 클라이언트로 전달합니다.
- 이후 클라이언트는 매 요청 시 이 쿠키를 서버로 전송하여 사용자의 세션 상태를 유지합니다.
HTTP Session의 장점
- 보안성 강화
- 세션은 서버 측에서 관리되므로 클라이언트가 정보를 조작할 위험이 낮습니다.
- HTTPS를 사용하면 세션 ID가 암호화되어 도난 위험이 줄어듭니다.
- 편리한 상태 유지
- 사용자가 페이지를 이동해도 로그인 상태가 유지되며, 일관된 사용자 경험을 제공합니다.
- 관리의 유연성
- 서버는 세션 데이터를 갱신하거나 임의로 세션을 만료시킬 수 있습니다.
HTTP Session의 단점
- 서버 부담 증가
- 모든 세션 데이터를 서버가 관리하므로, 사용자 수가 많아지면 서버 메모리에 부담이 될 수 있습니다.
- 이를 해결하기 위해 세션 클러스터링이나 Redis와 같은 외부 저장소를 사용할 수 있습니다.
- 세션 만료 문제
- 세션이 만료되면 사용자가 다시 로그인해야 하며, 이로 인해 불편을 겪을 수 있습니다.
- 세션 하이재킹 위험
- 만약 세션 ID가 탈취된다면 공격자가 사용자로 가장할 수 있습니다.
- 이를 예방하기 위해 세션 타임아웃과 IP 및 사용자 에이전트 확인 같은 추가적인 보안 기법을 사용합니다.
- 멀티 서버 환경
- 멀티 서버 환경에서는 로드 밸런싱이 이루어지기 때문에 각 서버가 서로 다른 세션 ID를 사용할 수 있습니다.
- 사용자의 세션 상태를 일관되게 유지하기 어려운 문제가 발생합니다.
멀티 서버 환경에서의 HTTP 세션 관리 해결 방안
- 세션 클러스터링:
- 여러 서버에서 세션 데이터를 공유하는 방법입니다. 세션 데이터가 클러스터 내의 모든 서버에 복제되어, 어느 서버에 요청을 보내더라도 동일한 세션 정보에 접근할 수 있습니다.
- 외부 세션 저장소 사용:
- Redis, Memcached와 같은 외부 저장소를 사용하여 세션 데이터를 관리합니다. 이렇게 하면 모든 서버가 동일한 세션 저장소를 참조하므로, 일관된 세션 상태를 유지할 수 있습니다.
- Sticky Sessions (세션 고정):
- 로드 밸런서가 특정 사용자의 세션을 항상 동일한 서버로 라우팅하는 방식입니다. 이 방법은 구현이 간단하지만, 서버에 대한 부하가 불균형해질 수 있습니다.
- JWT (JSON Web Token):
- 서버에 세션 정보를 저장하는 대신, 사용자가 인증될 때 JWT를 발급하고 클라이언트가 이를 저장하여 요청 시 함께 전송하도록 하는 방법입니다. 이 경우 서버는 세션 상태를 관리할 필요가 없어지지만, JWT의 유효성을 검증하는 과정이 필요합니다.
728x90
'네트워크' 카테고리의 다른 글
[네트워크] 동기, 비동기, Blooking, Non-Blooking (0) | 2024.10.20 |
---|---|
[네트워크] HTTP 쿠키 cookie (0) | 2024.10.20 |
[네트워크] 웹 인증이란? (1) | 2024.10.19 |
[네트워크] OSI 7계층 (1) | 2024.10.11 |
[네트워크] URL의 구조 (0) | 2024.07.23 |