세션(Session) vs 쿠키(Cookie) vs 토큰(Token)

이상억·2025년 2월 19일

cs

목록 보기
1/3

세션(Session)

특징

  • 서버 저장 방식

    • 사용자의 상태 정보(예: 로그인 정보, 장바구니 등)를 서버의 메모리나 데이터베이스에 저장.
  • 세션 ID

    • 각 사용자마다 고유의 세션 ID를 발급하고, 이 ID를 통해 서버에서 해당 사용자의 데이터를 조회.
  • Stateful:

    • 서버가 상태 정보를 유지하므로, 클라이언트가 별도의 상태 정보를 관리할 필요가 없음.
  • 보안성:

    • 서버에 저장되므로 비교적 안전. 다만, 세션 하이재킹(Session Hijacking) 등의 공격에 대한 대비가 필요.

장단점

장점단점
민감한 사용자 데이터를 서버에 안전하게 저장 가능서버 자원을 많이 사용하여 대규모 분산 시스템에서는확장성이 떨어짐
사용자 상태 관리를 위한 구현이 비교적 직관적세션 스토리지에 대한 관리 및 클러스터링 처리가 필요함

활용 사례

  • 로그인 인증, 쇼핑몰과 같이 사용자의 상태를 철저하게 관리해야 하는 경우

쿠키(Cookie)

특징

  • 클라이언트 저장 방식:

    • 사용자의 브라우저에 데이터를 저장하여, 이후 요청 시 서버에 함께 전송.
  • 데이터 크기 제한:

    • 일반적으로 4KB 내외의 데이터를 저장할 수 있음.
  • 유형

    • 세션 쿠키: 브라우저 종료 시 삭제되어 상대적으로 보안성이 높음.
    • 영속 쿠키: 만료 날짜를 지정하여 장기간 저장 가능하지만, 탈취 위험이 존재.
  • 보안 이슈:

    • XSS(교차 스크립팅 공격)나 CSRF(사이트 간 요청 위조) 등의 공격에 취약할 수 있으므로, 보안 대책이 필수.

장단점

장점단점
사용자 기기에 저장되어 서버 자원을 덜 사용보안에 민감한 데이터 저장에는 부적합 (노출 위험)
간단한 사용자 설정이나 기본 상태 정보를 저장하는 데 적합데이터 크기 제한으로 인해 대용량 정보 저장 불가

활용 사례

  • 사용자 선호도, 테마 설정 등 비교적 민감하지 않은 정보를 저장할 때
    로그인 유지 기능(예: "Remember Me") 구현 시

토큰(Token)

특징

  • 자체 인증 방식:

    • 토큰(예: JWT – JSON Web Token)은 자체적으로 필요한 사용자 정보를 포함하고 있으며, 서버는 상태를 저장하지 않음(stateless).
  • 클라이언트 저장:

    • 사용자는 로컬 스토리지나 메모리에 토큰을 저장하고, API 요청 시 이를 서버에 첨부함.
  • 확장성:

    • 서버에서 별도의 세션 스토리지 없이 토큰만 검증하면 되므로, 분산 시스템이나 RESTful API에 적합.
  • 보안 고려사항:

    • 토큰 탈취 시 보안 위험이 크므로, 짧은 만료 시간 및 리프레시 토큰 등의 기법을 사용하여 보안을 강화해야 함.

장단점

장점단점
서버 상태 유지가 필요 없으므로 확장성이 뛰어남토큰 탈취 시 즉각적인 보안 위협이 발생할 수 있음
클라이언트와 서버 간의 통신이 간편해짐토큰 자체가 정보를 담고 있기 때문에, 민감한 정보는 암호화하여 사용해야 함

활용 사례

  • RESTful API 및 마이크로서비스 아키텍처에서 사용자 인증
  • 분산 시스템에서의 세션 관리 대체
  • 모바일 및 싱글 페이지 애플리케이션(SPA)에서 주로 사용

항목세션(Session)쿠키(Cookie)토큰(Token)
저장 위치서버클라이언트(브라우저)클라이언트 (로컬 스토리지, 메모리 등)
상태 관리서버가 상태 유지 (Stateful)클라이언트가 상태 유지서버가 상태를 저장하지 않음 (Stateless)
보안상대적으로 안전하나 서버 부하 큼노출 위험 존재 (특히 영속 쿠키)탈취 위험 있으나, 짧은 만료 시간 및 암호화로 대응
확장성서버 자원 소모, 확장성 낮음상대적으로 가볍지만, 보안에 주의 필요서버 부하 적고 확장성 우수
사용 예시로그인, 쇼핑몰 사용자 상태 관리사용자 설정, "Remember Me" 기능RESTful API, 분산 시스템, SPA 인증
  • 사용자 상태 관리와 보안이 중요한 경우: 세션 기반 인증이 유리.
  • 경량화된 사용자 설정이나 간단한 상태 정보 관리: 쿠키가 적합.
  • 확장성과 분산 시스템 환경: 토큰 기반 인증(JWT 등)이 효과적.
profile
이상억

0개의 댓글