쿠키(Cookie)

  • 인터넷에 접속할 때 웹 사이트가 있는 서버에 의해 사용자의 컴퓨터에 저장되는 정보
  • 주로 로그인 정보, 장바구니 정보를 저장한다.
  • 쿠키와 다르게 캐시는 사운드, 이미지 파일을 일시적으로 저장해서 로딩을 빠르게 하는 것
  • 기존에 쿠키는 암호화가 되지 않았지만, 최근에는 암호화가 이루어져서 과거처럼 매우 낮은 보안성을 가지지 않는다.
  • 쿠키는 최적화 프로그램으로 자주 삭제하거나 브라우저의 자동 삭제 기능을 사용한다.
  • 쿠키를 차단할 수 있지만, 차단하면 사이트가 동작하지 않을 수 있는 단점이 있다.

 

세션(Session)

  • 쿠키를 기반으로 일정 시간동안 같은 브라우저로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
  • 쿠키는 클라이언트
  • 세션은 웹 서버에 저장
  • 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 시간대
  • 세션은 연결상태 유지보다, 안정성이 더 중요하다.

 

쿠키 vs 세션

  • 쿠키
    • 클라이언트에 저장, 파일로 관리되기 때문에 브라우저의 종료와 상관없이 만료시간까지 존재
    • 관련 정보들이 쿠키 내부에 존재해서 빠른 속도 
    • 클라이언트가 서버로 요청을 보낼 때 요청 메시지를 스나이핑 당할 위험이 있다.
  • 세션
    • 서버에 저장되어 브라우저 종료 혹은 세션 만료시간 이후 삭제된다.
    • 관련 정보들이 서버에 저장되서 느린 속도를 가진다.
    • 세션은 쿠키를 통해 세션 Id만 저장하고 나머지 정보는 서버에 처리해서 상대적으로 보안성을 갖고 있다.

 

  쿠키(Cookie) 세션(Session)
저장위치 클라이언트(Client) 서버(Server)
저장형식 Text Object
만료시점 쿠키 저장시 설정 설정 시간
리소스 클라이언트의 리소스 서버의 리소스
용량제한 한 도메인 당 20개, 한 쿠키당 4KB 제한 없음

 

저장 위치 

  • 쿠키 : 클라이언트의 웹 브라우저가 지정하는 메모리나 하드디스크
  • 서버 : 서버의 메모리

 

만료 시점

  • 쿠키 : 저장할 때 expires 속성을 정의한다.
  • 세션 : 클라이언트 로그아웃 or 설정 시간 -> 정확한 시점을 알 수 없다.

 

리소스

  • 쿠키 : 클라이언트에 저장, 서버 자원 사용 X
  • 세션 : 서버에 저장, 서버 메모리에 로딩되고 세션이 생길 때마다 리소스 차지

 

용량 제한

  • 쿠키 : 쿠키로 인해 문제가 발생하는 것을 방지하고자 한 도메인당 20개, 한 쿠키당 4KB
  • 세션 : 클라이언트가 접속하면 서버에 의해 생성된다. -> 제한 없음

 

만약 로드밸런서와 세션을 사용한다면?

  • 세션은 서버에 저장된다. 
  • 여러 서버가 분산되어 있고, 로드밸런서를 사용할 때 세션은 공유되지 않는다.
  • 클라이언트가 로그인을 위해 서버A에 요청을 보내면 서버 A의 세션 저장소에 저장된다.
  • 클라이언트가 서비스를 이용하기 위해 서버B에 요청을 보내면 서버 B에는 해당 클라이언트의 세션 정보가 없기 때문에 로그인 페이지로 리다이렉트 하는 문제 발생
  • 해결 방법
    • Sticky Session
      • 첫 요청에 대한 응답을 준 서버에게 sticky하게 붙어서 이후의 모든 요청들을 해당 서버로만 보내는 방법
      • 단점 : 로드 밸런성 효율 저하
    • Session Clustering(세션 클러스터링)
      • 여러 대의 서버를 하나의 서버처럼 운영한다. 각 서버의 세션 저장소를 하나로 묶어서 관리한다.
      • 모든 서버가 동일한 세션을 공유하게 되기 때문에 하나의 서버가 죽어도 세션 정보를 잃어버릴 위험이 없어진다.
      • 단점 : 모든 세션 저장소 업데이트, 메모리 필요 -> 성능 저하
    • Session Server
      • 세션만 관리하는 별도의 서버를 두는 방식
      • 모든 서버의 업데이트 필요 X, Redis같은 In-memory(인메모리) 데이터 저장소를 사용해서 빠른 세션 조회 가능
      • 단점 : 하나의 세션 서버로 관리하기 때문에 서버가 죽으면 모든 세션 데이터를 잃어버린다.
        • 하지만 레디스를 사용하면 다른 서버의 메모리에 실시간으로 복사본을 저장하거나 디스크에 직접 저장하여 백업 가능
        • Master-Slave 형식으로 서비스 유지 가능
        • 단점 : 데이터 별도 저장의 메모리 필요

+ Recent posts