본문 바로가기

네트워크

[네트워크] HTTP Session

728x90

HTTP Session이란?

HTTP 세션은 웹 애플리케이션에서 사용자 정보를 일정 시간 동안 유지하기 위한 기술입니다.
세션은 사용자가 웹 애플리케이션에 접속한 뒤 로그인 상태를 유지하거나 사용자 활동을 추적하는 데 사용됩니다.

 

 

HTTP Session의 특징

  1. Stateless 문제 해결
    • HTTP 프로토콜은 Stateless(상태 비저장) 특성을 가지며, 서버는 각 요청이 서로 독립적입니다.
    • 이를 해결하기 위해, 사용자가 인증된 이후 서버는 세션 ID를 발급하여 사용자의 상태를 유지합니다.
    • 세션 ID를 통해 서버는 사용자를 식별하고, 매 요청마다 재인증 없이 동일한 사용자로 간주할 수 있습니다.
  2. 쿠키와의 연계
    • 세션 ID는 쿠키를 통해 클라이언트에게 전달됩니다.
    • 이후 클라이언트는 매 요청 시 해당 쿠키를 서버에 전송하여 세션을 식별합니다.
  3. 로그인 상태 관리
    • 세션은 로그인 정보와 같은 중요한 데이터를 관리하며, 사용자가 다시 접속해도 일정 시간 동안 로그인 상태를 유지할 수 있습니다.
  4. 서버 측 관리
    • 세션은 서버 측에서 관리되므로 클라이언트가 임의로 세션 정보를 조작할 수 없습니다.
    • 세션 ID는 랜덤하게 생성되며, HTTPS를 통해 암호화되어 전송되므로 보안이 강화됩니다.
  5. 만료와 갱신
    • 세션은 일정 시간이 지나면 자동으로 만료될 수 있으며, 서버는 세션 만료 시간을 갱신하거나 세션 데이터를 수정할 수 있습니다.

 

HTTP Session 인증 과정

  1. 사용자 로그인 시도
    • 사용자는 웹 애플리케이션에 아이디와 비밀번호 같은 인증 정보를 입력합니다.
  2. 서버의 인증 정보 검증 및 세션 생성
    • 서버는 사용자의 인증 정보를 확인한 후, 세션 ID를 생성합니다.
  3. 세션 저장 및 관리
    • 서버는 생성된 세션 ID와 함께 사용자의 로그인 정보를 서버 측 메모리나 데이터베이스에 저장합니다.
  4. 클라이언트로 세션 ID 전달
    • 서버는 세션 ID를 쿠키에 담아 클라이언트로 전달합니다.
    • 이후 클라이언트는 매 요청 시 이 쿠키를 서버로 전송하여 사용자의 세션 상태를 유지합니다.

 

HTTP Session의 장점

  1. 보안성 강화
    • 세션은 서버 측에서 관리되므로 클라이언트가 정보를 조작할 위험이 낮습니다.
    • HTTPS를 사용하면 세션 ID가 암호화되어 도난 위험이 줄어듭니다.
  2. 편리한 상태 유지
    • 사용자가 페이지를 이동해도 로그인 상태가 유지되며, 일관된 사용자 경험을 제공합니다.
  3. 관리의 유연성
    • 서버는 세션 데이터를 갱신하거나 임의로 세션을 만료시킬 수 있습니다.

 

HTTP Session의 단점

  1. 서버 부담 증가
    • 모든 세션 데이터를 서버가 관리하므로, 사용자 수가 많아지면 서버 메모리에 부담이 될 수 있습니다.
    • 이를 해결하기 위해 세션 클러스터링이나 Redis와 같은 외부 저장소를 사용할 수 있습니다.
  2. 세션 만료 문제
    • 세션이 만료되면 사용자가 다시 로그인해야 하며, 이로 인해 불편을 겪을 수 있습니다.
  3. 세션 하이재킹 위험
    • 만약 세션 ID가 탈취된다면 공격자가 사용자로 가장할 수 있습니다.
    • 이를 예방하기 위해 세션 타임아웃과 IP 및 사용자 에이전트 확인 같은 추가적인 보안 기법을 사용합니다.
  4. 멀티 서버 환경
    • 멀티 서버 환경에서는 로드 밸런싱이 이루어지기 때문에 각 서버가 서로 다른 세션 ID를 사용할 수 있습니다.
    • 사용자의 세션 상태를 일관되게 유지하기 어려운 문제가 발생합니다.

 

멀티 서버 환경에서의 HTTP 세션 관리 해결 방안

  1. 세션 클러스터링:
    • 여러 서버에서 세션 데이터를 공유하는 방법입니다. 세션 데이터가 클러스터 내의 모든 서버에 복제되어, 어느 서버에 요청을 보내더라도 동일한 세션 정보에 접근할 수 있습니다.
  2. 외부 세션 저장소 사용:
    • Redis, Memcached와 같은 외부 저장소를 사용하여 세션 데이터를 관리합니다. 이렇게 하면 모든 서버가 동일한 세션 저장소를 참조하므로, 일관된 세션 상태를 유지할 수 있습니다.
  3. Sticky Sessions (세션 고정):
    • 로드 밸런서가 특정 사용자의 세션을 항상 동일한 서버로 라우팅하는 방식입니다. 이 방법은 구현이 간단하지만, 서버에 대한 부하가 불균형해질 수 있습니다.
  4. 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