CS

쿠키와 세션

wwns 2023. 9. 28. 18:20
반응형

이전글에서 알아본 HTTP의 특징 중 크게 Stateless, Connectionless를 꺼내볼 수 있다.

 

  1. Connectionless
    • 클라이언트가 요청을 한 후 응답을 받으면 연결은 끊어진다
    • HTTP1.1에서 keep alive 설정을 통해 커넥션을 유지할 수 있게 됨
  2. Stateless
    • 클라이언트의 상태를 저장하지 않는다
    • 요구사항에 따라 클라이언트의 상태를 저장해야 하는 기능들이 발생함

이 특징 중 Connectionless은 HTTP1.1에서 keep alive헤더를 통해 연결을 유지하여 커넥션 재할당 비용을 줄일 수 있었다.

 

Stateless 한 특징으로 인해
클라이언트의 상태를 저장해야 하는 상황이 발생했을 때의 대안으로 쿠키와 세션이 나오게 되었다

상태를 저장해야하는 상황은 이전 글에서도 정리했지만 다시 정리하면 다음과 같다

  • 인증 및 세션 관리
    • 로그인, 세션 정보 추적을 위해 서버나 클라이언트에 상태를 저장해야하는 경우
  • 상태 관리
    • 클라이언트의 작업 상태를 추적하고 관리해야 하는 경우
      • 온라인 쇼핑 카트의 내용을 유지
  • 캐싱
    • 데이터 캐싱 및 최적화를 위해 상태 정보를 사용하는 경우
  • 보안
    • 사용자 인증을 처리하기 위해 상태 정보가 필요한 경우
      • OAuth 토큰을 사용하여 인증 및 권한 부여를 관리

 

세션과 쿠키는 클라이언트의 상태를 저장하여 매번 클라이언트의 정보를 인증하는 과정을 생략할 수 있어 성능을 향상하는 역할을 하며 두 방식의 차이점을 알아보자


쿠키

쿠키는 HTTP 프로토콜을 통해 웹 서버와 웹 브라우저 간에 상태 정보를 유지하고 공유하기 위한 작은 데이터 파일

클라이언트가 웹 서버에 요청을 보낼 때 서버는 쿠키를 클라이언트에게 제공하고, 이후의 요청에서 클라이언트는 해당 쿠키를 다시 서버에 제공하여 상태 정보를 유지

  • 특징
    • 클라이언트 로컬에 저장되는 키와 값이 들어있는 데이터 파일 
      • 로컬에 저장하지 않고 브라우저 메모리에 저장되며, 브라우저가 종료될 때 삭제되는 쿠키를 세션 쿠키라고 함
    • 사용자 인증정보, 세션관리, 사용자 환경 설정 등 다양한 목적으로 사용됨
    • HTTP 응답 헤더의 'set-cookie' 속성을 사용하여 클라이언트에게 전송되며, 클라이언트가 저장
    • 해당 웹 사이트를 방문하면, 쿠키는 자동으로 request 헤더에 포함되어 서버로 전송됨
  • 쿠키의 구성 요소
    • 이름: 쿠키를 식별하는 데 사용되는 이름
    • 값: 쿠키에 저장되는 데이터
    • 만료 날짜: 쿠키의 유효기간을 설정, 만료되면 삭제됨
    • 경로(domain, path): 쿠키가 적용되는 경로를 지정, 이 경로보다 하위 경로에 있는 페이지에서만 해당 쿠키를 사용할 수 있음
    • 크기: 쿠키에 저장된 데이터의 총 크기, 보통 하나의 쿠키는 4KB 이하로 제한됨
    • HTTP Only: JS를 통해 접근할 수 없도록 하는 역할로 XSS(Cross-Site Scripting) 공격을 방지하기 위한 보안 기능 중 하나
    • Secure: HTTPS 프로토콜을 사용하는 암호화된 연결에서만 쿠키가 전송

웹 브라우저에 저장된 쿠키

  • 장점
    • 클라이언트 측에 정보를 저장하므로 웹 서버는 클라이언트의 상태를 유지하고 추적가능
    • 사용자 식별이 가능
    • 클라이언트와 서버 사이 데이터 공유가 가능
    • 클라이언트 측에 데이터를 저장하므로, 서버와의 반복적인 데이터 요청을 줄일 수 있음 (성능 향상, 서버 부하 감소)
    • 쿠키는 생성과 사용이 쉬움
    • 만료시간을 통해 데이터를 삭제하기 쉬움
  • 단점
    • 데이터 크기에 대한 제한이 있다 (일반적으로 4KB 이하) -> 대용량 데이터 혹은 복잡한 데이터 구조는 다루기 어려움
    • 클라이언트 측에 저장되기 때문에 보안 위험이 증가
      • XSS 공격과 같은 공격을 방지하기 위해 HttpOnly, Secure 옵션을 활용할 수 있음
    • CSRF(크로스사이트 요청 위조) 공격으로 사용자의 인증된 세션 쿠키를 탈취할 수 있음
    • 쿠키는 동일한 도메인, 하위 도메인에서만 공유되기에 크로스 도메인에서 상태 공유에 제약이 있음
    • 쿠키를 사용하여 사용자를 추적하거나 광고를 타게팅할 수 있음
    • 브라우저에 저장된 쿠키를 직접 삭제하거나 관리하기 어려워 쿠키가 쌓이면 브라우저 성능에 영향

세션

 

쿠키에 사용자에 대한 데이터를 저장하고, 서버와 주고받으면 클라이언트에서 관리를 해야 하기 때문에 보안 위험이 발생할 수 있다. 세션은 웹 애플리케이션에서 사용자 상태 정보를 서버 측에 유지하고 관리하기 위한 메커니즘

쿠키와 마찬가지로 사용자 식별 및 상태 관리를 목적으로 사용된다

 

  • 특징
    • 세션은 서버 측에서 사용자 정보를 저장하고 관리되며 클라이언트 측에는 세션 ID만 저장됨
    • 사용자 데이터는 서버의 메모리, 데이터베이스와 같은 저장소에 저장됨
    • 클라이언트가 서버에 접속하면 서버는 클라이언트에게 세션 ID를 부여하며 보통 쿠키를 통해 클라이언트에 전송
    • 세션은 일정 시간 동안 유지되며, 클라이언트와 서버 간의 상호 작용이 없는 경우 세션이 만료됨
    • 세션은 클라이언트 측에서 직접 수정, 조회가 불가능하여 쿠키보다 보안에 더 좋다
    • 서버 측에서 사용자 정보를 저장하므로 서버 부하가 크다

쿠키에 세션 아이디가 저장됨

  • 장점
    • 쿠키와 달리 서버 측에서 사용자 정보를 관리하여 중요한 데이터를 보다 안전하게 저장
    • 서버 측에서 사용자 상태 및 데이터를 관리하기 용이
      • 로그인 상태, 세션 종료 시간, 사용자 설정
  • 단점
    • 서버 측에서 사용자 정보를 저장하고 관리하기 때문에 동시 접속자 수가 많은 경우 부하에 따라 메모리 사용량이 높아질 수 있음
    • 세션은 서버 메모리에 저장되므로 서버 확장이 어렵다
      • 여러 서버로 애플리케이션을 확장하는 경우 세션 데이터 공유 및 동기화 문제가 있음
    •  세션 데이터가 적절하게 삭제되지 않을 경우 리소스 누수 문제가 있을 수 있으므로 세션 만료 및 삭제를 관리해야 함
    • 여전히 세션을 탈취당했을 때 보안 위험이 존재한다

정리

  • 데이터 저장 위치
    • 쿠키는 클라이언트 측에 데이터를 저장
    • 세션은 서버측에 데이터를 저장
  • 보안
    • 쿠키는 클라이언트 측에 저장되며 사용자가 쉽게 삭제, 변경할 수 있으며 탈취 등 보안에 취약
    • 세션은 서버 측에 데이터가 저장되므로 쿠키보다는 보안이 우수
  • 목적
    • 쿠키는 주로 사용자 식별, 상태 관리, 개인 설정, 추적 등에 사용
    • 세션도 주로 사용자 로그인 상태 관리, 사용자 데이터 저장 및 보안 인증에 사용
  • 자원 부하
    • 쿠키는 클라이언트에 저장하므로 서버  자원 부하를 줄일 수 있음
    • 세션은 서버 측에서 데이터를 관리하므로 서버 메모리 부하 및 자원 사용량이 증가할 수 있음
  • 확장성
    • 쿠키는 서버 간 데이터 공유가 어렵고 다중 서버 아키텍처에서 관리하기 어려울 수 있다
    • 세션은 세션 관리 서비스를 통해 다중 서버 아키텍처에서 세션 데이터를 공유하고 관리할 수 있음
      • 시스템 복잡도가 올라감
  • 사용자 개입
    • 쿠키는 클라이언트에서 직접 수정이 가능
    • 세션은 클라이언트에서 직접 수정이 불가능
  • 전송 방법
    • 쿠키는 HTTP 요청의 일부로 클라이언트에서 서버로 자동으로 전송됨
    • 세션 ID가 쿠키를 통해 클라이언트에게 전송되고, 쿠키 전달과 마찬가지로 서버에 세션 ID를 전달해 서버에서 인증 및 관리

쿠키와 세션을 안 쓰고 무조건 JWT 토큰을 쓴다고 하지만 요구사항과 목적에 따라 세션과 쿠키를 충분히 활용할 수 있으며 우리는 사용자 인증만 하려고 사용자를 식별하진 않는다.

 

사용자가 요청해서 불러왔던 데이터를 캐싱할 때도 쿠키를 쓸 수 있는 것이고, 변화를 추적하기 위해 세션을 사용할 수 도 있는 것이다

 

안전한 보안을 위해서 리소스를 많이 할당해야 한다면 나는 필요하다고 생각한다

하지만 제공하는 서비스가 무엇이냐에 따라 속도가 더 중요할 수 있고, 보안이 더 중요할 수 있기에 필요에 따라 선택할 수 있도록 하자

 

속도가 빠른 것이 더 중요한 경우에는 실제 사용자데이터를 주고받으며 인증하는 쿠키 방식(인증을 위한 DB 확인이 필요함)보다 토큰을 통한 인증 방식이 더 빠르고 서버의 부담, 상태 유지가 줄어들며 이에 대한 정리는 이전 글을 참고하면 좋을 것 같다

 

 


Reference

https://interconnection.tistory.com/74

 

쿠키와 세션 개념

노션 페이지(아래 내용과 동일) 개요 쿠키와 세션은 개발자 말고도 인터넷 사용자라면 누구나 많이 들어본 단어입니다. 하지만 개념에 대해서는 많은 사람들이 헷갈려 하기에 쉽고 간단하게 정

interconnection.tistory.com

https://hec-ker.tistory.com/368

 

[CS/보안 기초] (1) 쿠키(cookie)와 세션(session)의 차이

오늘부터 가볍게 면접 준비도 할 겸 헷갈리는 개념도 바로 잡을 겸 이 글을 보는 다른 학생들에게 도움도 될 겸! CS/보안 기초 개념을 정리할까 한다. 쿠키와 세션을 이해하려면, 먼저 쿠키와 세

hec-ker.tistory.com

 

반응형