Posts [Backend] 쿠키와 세션
Post
Cancel

[Backend] 쿠키와 세션

HTTP의 특징

  • 일단, HTTP란 인터넷상에서 데이터를 주고 받기 위해 서버/클라이언트 모델을 따르는 통신규약이다.
  • 서버의 자원을 절약학기 위해 모든 사용자의 요청마다 연결과 해제의 과정을 거치기 때문에 연결상태가 유지 되지 않고(비연결성-Connectionless), 연결 해제 후에 상태 정보가 저장되지 않는다(비상태성-Stateless)
  • 하지만 웹사이트에 로그인을 한 번 하고나면 그 사이트에서는 다시 로그인할 필요 없이 여러 페이지의 기능들을 이용할 수 있고 심지어 브라우저를 종료했다가 다시 접속했을 때도 그 로그인 상태를 유지할 수도 있다.
  • 이렇게 HTTP의 비연결성과 비상태성을 보완하여 서버가 클라이언트를 식별하게 해주는 것이 쿠키와 세션이다.

쿠키

  • 서버가 클라이언트의 웹 브라우저에 저장하는 데이터이다.
  • 쿠키의 데이터는 key-value로 구성되며 String타입이다.
  • 브라우저마다 저장되는 쿠키는 다르다. 즉, 서버에서 브라우저가 다르면 다른 사용자로 인식한다.(크롬으로 남긴 쿠키는 인터넷 익스플로어에서 사용할 수 없다.)
  • 사용자가 서버쪽으로 요청을 할 때 쿠키의 정보를 함께 보내서 서버가 사용자를 식별할 수 있도록 한다.

쿠키가 생성되는 과정

  • 1)클라이언트와 서버가 한번도 통신한 이력이 없다면 존재하지 않는다. 쿠키가 없는 상태에서 서버에 요청을 보내면 서버에서는 쿠키를 생성하여 response한다.
  • 2)그 다음 클라이언트에서는 쿠키 정보를 저장하고, 추후 보내는 request에는 쿠키를 담아 보내서 서버에서 쿠키를 통해 클라이언트 상태를 파악하는 것이다.
    1

  • 쿠키는 크롬 개발자 도구(F12) 기준 Application -> Storage -> Cookies 에서 확인할 수 있다.
    2

쿠키의 사용목적

  • 1)세션 관리(Session management)
    • 로그인, 사용자 닉네임, 접속 시간, 장바구니 등의 서버가 알아야할 정보들을 저장
  • 2)개인화(Personalization)
    • 사용자마다 다르게 그 사람에 적절한 페이지를 보여줄 수 있다.
  • 3)트래킹(Tracking)
    • 사용자의 행동과 패턴을 분석하고 기록

쿠키의 사용되는 예시

  • ID 저장, 로그인 상태 유지
  • 일주일간 다시 보지 않기.
  • 최근 검색한 상품들을 광고에서 추천
  • 쇼핑몰 장바구니 기능

쿠키의 단점

  • 방문했던 웹 사이트에 대한 정보 및 개인정보가 기록되기에 사생활 침해의 소지가 있다.
  • 보안에 취약함(직접 사용자가 임의로 고치거나 지우거나 제3자가 가로채기 쉽다)

세션

  • 위와 같은 쿠키의 단점을 보완해주는 것이다.
  • 세션은 기본적으로 쿠키를 사용한다. 하지만 세션 id만 쿠키로 저장하고, 상태 데이터들은 세션id를 id로하여 서버에 저장한다.
  • 세션 아이디는 웹 브라우저 당 1개씩 생성되어 웹 컨테이너에 저장되며 브라우저 종료시 소멸됩니다.
  • 로그아웃하면 새로운 사용자로 인식해서 새로운 세션이 생성된다.(참고로 쿠키는 내 웹브라우저에 저장된 것이기 때문에 로그아웃 유무와 관계없이 삭제하지 않으면 유지된다.)

세션이 생성되는 과정

  • 1)세션 역시 클라이언트와 서버가 한번도 통신한 이력이 없다면 존재하지 않고, 세션이 없는 상태에서 서버에 요청을 보내면 세션을 생성하고 세션id를 쿠키에 담아 response한다.
  • 2)그 다음 클라이언트에서는 쿠키로 세션id를 저장하고, 추후 보내는 요청에 세션id 쿠키를 담아 보내면 서버에서 세션id로 클라이언트를 식별하여 그에 따른 response를 한다.
    3

  • 세션을 사용하는 웹사이트에 접속하면 다음과 같이 세션 id(사진에서는 JSESSIONID)가 존재함을 알 수 있다.
    4

쿠키와 세션의 비교

 쿠키세션
저장 위치클라이언트의 웹 브라우저가 지정하는 메모리에 저장(단, 쿠키를 허용하지 않은 경우엔 저장되지 않음)서버의 메모리에 저장
저장 형식Text형식Object형식
보안안좋음(제3자가 가로챌수 있음)좋음(서버에 저장되므로)
서버 부하없음많음
생명주기브라우저 종료해도 유지브라우저 종료시 소멸
속도빠름(서버에서 요청HTTP에 있는 쿠키를 바로 읽어 처리할 수 있음)느림(세션id를 통해 세션을 읽어온 다음 데이터를 읽어야하기에)
  • 세션은 세션id를 제외한 나머지 상태 데이터들이 서버에 저장되기 떄문에, 클라이언트에 저장되는 쿠키보다 보안성이 높다.
  • 하지만 상태 데이터를 서버에서 가지고 있는 만큼 부하가 늘어난다는 단점이 있다.
  • 즉, 서버에 세션이 많이 존재하면 서버가 다운될 수도 있다.
  • 또한 서버에서 데이터를 바로 읽어 처리할 수 있는 쿠키에 반해, 세션은 세션id를 통해 세션을 읽어온 다음 또 데이터를 읽어야 하기 때문에 속도가 상대적으로 느리다.
  • 세션은 기본적으로 브라우저 종료 시 자동으로 소멸되고, 쿠키는 만료 시간을 설정하여 브라우저가 종료되어도 유지되도록 할 수 있다.(단, 세션도 만료기간 설정이 가능하긴하다.)

출처

This post is licensed under CC BY 4.0 by the author.