CS

[WEB] 세션(Session)

뉴비션 2024. 3. 27. 18:24

세션이란?

세션은 휘발성 데이터로 사용자가 접속, 로그인 등을 하면 서버는 그 사용자의 상태(인증 정보)를 서버에 저장하고 해당 정보에 접근할 수 있는 인증키를 보내주고, 해당 사용자가 접속을 종료하거나 로그아웃을 하면 해당 상태를 제거하는 방식으로 작동한다.
이를 통해 사용자는 애플리케이션(대표적으로 웹페이지)를 사용하면서 로그인 상태를 유지할 수 있다.

세션이 필요한 이유

웹은 기본적으로 상태가 없는(stateless) 프로토콜이므로, 웹 서버는 HTTP 요청 간 사용자의 상태를 기본적으로 기억하지 못한다. 세션은 이러한 한계를 극복하기 위해 사용자의 상태(예: 로그인 여부, 사용자 설정 등)를 서버에 저장해야 하는데 이 때 사용할 수 있는 방법 중 하나가 세션이다.

동작 방식

  1. 로그인: 사용자가 로그인 폼을 통해 자신의 자격 증명(예: 사용자 이름, 비밀번호)을 제출하면, 서버는 이를 검증하고 세션에 사용자의 인증 정보를 저장합니다. 이 정보는 서버의 메모리나 데이터베이스 등에 저장될 수 있습니다.
  2. 세션 ID: 사용자의 인증 정보가 세션에 저장되면, 서버는 고유한 세션 ID를 생성하여 사용자의 브라우저에 쿠키 형태로 보냅니다. 사용자는 이후의 모든 요청에서 이 세션 ID를 서버에 전송합니다.
  3. 상태 유지: 서버는 받은 세션 ID를 사용하여 사용자의 인증 상태와 관련 데이터를 조회합니다. 이를 통해 사용자가 로그인한 상태인지 확인하고, 해당 사용자에게 적절한 응답을 제공할 수 있습니다.
  4. 로그아웃: 사용자가 로그아웃하면, 서버는 해당 사용자의 세션을 제거하고 세션 ID를 무효화합니다.

세션 사용 사례

  • 웹 사이트 로그인: 사용자가 웹 사이트에 로그인하고, 사이트 탐색 중에 로그인 상태를 유지해야 할 때 사용
  • 개인화된 사용자 경험: 사용자의 선호, 설정 등을 기억하여 개인화된 컨텐츠를 제공할 때 사용
  • 장바구니: 온라인 쇼핑 사이트에서 사용자의 장바구니 정보를 기억하는 데 사용

단점

  • 보안상의 문제:
    • 브라우저는 세션 ID를 쿠키에 저장하므로, 쿠키가 해킹되지 않도록 주의해야함.
    • 세션 데이터는 사용자의 브라우저에 저장되므로 중요한 정보(비밀번호, 결제 정보 등)는 저장해서는 안됨.
    • 암호화를 위해 사용하는 SECRET_KEY 유출의 위험이 존재.
  • 서버의 리소스를 많이 잡아먹는 문제:
    • 각 사용자에 대한 세션 정보를 관리하기 위해 서버의 리소스가 많이 사용됨.
    • 세션이 브라우저 쿠키에 저장되기 때문에 세션 데이터가 크기가 너무 커지지 않도록 주의해야함.