NETWORK

[NETWORK] 쿠키 / 세션

집한구석 2021. 5. 19. 23:49
728x90

쿠키 / 세션을 사용하는 이유

  • HTTP 프로토콜의 무상태성, 비연결성과 같은 특징 으로 모든 요청간 의존관계가 없음, 즉 현재 접속한 사용자가 이전에 접속했던 사용자인지 알 수 있는 방법이 없음
  • 계속해서 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것은 장점이지만, 통신할때마다 클라이언트는 매번 인증을 해야하는 단점으로 인하여 이전 요청과 현재요청이 같은 사용자 요청인지 알기 위해 상태를 유지하기 위해서 쿠키와 세션을 사용함

쿠키

쿠키 정의

  • 클라이언트(브라우저) 로컬에 키와 값이 들어있는 데이터 파일 (저장형식 텍스트)
  • 사용자 인증이 유효한 시간을 명시 가능, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지
  • 사용자가 따로 요청하지 않아도 브라우저가 Request시에  Request Header를 넣어서 자동으로 서버에 전송

쿠키 동작 방식

  1. 클라이언트가 페이지 요청
  2. 서버에서 상태를 유지하고 싶은 값을 쿠키로 생성
  3. HTTP 헤더(Set-Cookie)에 쿠키를 포함시켜 응답
  4. 브라우저가 종료되어도 쿠키 만료 기간이 있으면, 클라이언트에서 보관하고 있음
  5. 같은 요청을 할 경우 HTTP 헤더에 쿠키를 보냄
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을시 쿠키를 업데이트하여 변경된 쿠키를 HTTP헤더에 포함시켜 응답

세션

세션 정의

  • 서버에서 클라이언트를 구분하기 위해 세션 ID를 부여하여 웹 브라우저가 서버에 접속하여 브라우저를 종료할 때까지 인증상태를 유지
  • 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정 가능
  • 사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안이 좋음, 하지만 서버 메모리가 그만큼 사용됨
  • 클라이언트가 Request를 보내면, 서버에서 클라이언트에게 세션ID를 부여함

세션 동작 방식

  1. 클라이언트가 서버에 접속
  2. 서버가 해당 브라우저에 Session ID를 부여함
  3. 클라이언트는 쿠키를 사용하여 Session ID를 JESSIONID라는 이름으로 저장
  4. 클라이언트가 브라우저 종료하기 전까지 서버에 다음 요청시, 쿠키의 세션ID를 HTTP 헤더에 넣어서 전송
  5. 서버는 세션ID를 전달 받아서, 세션ID로 세션에 있는 클라이언트 정보를 가져옴
  6. 클라이언트 정보를 가지고 서버요청을 처리하여 클라이언트에 응답

비교 요약

구분 쿠키 세션
저장 위치 클라이언트 서버
저장 형식 텍스트 Object
종료 시점 쿠키 저장시 설정, 또는 브라우저 종료 시 개발자가 설정 가능
용량 제한 도메인 당 20개, 쿠키 하나당 4Kb, 총 300개 서버 자원에 따라 다름

둘의 가장 큰차이는 저장되는 위치이며, 각자의 장단점이 있음 

'NETWORK' 카테고리의 다른 글

[NETWORK] 요청 응답 헤더  (0) 2021.10.29
[NETWORK] HTTP / HTTPS  (0) 2021.10.28
[NETWORK] L4 스위치  (0) 2021.09.27
[NETWORK] OSI 7계층, TCP/IP 4계층  (0) 2021.07.11
[NETWORK] TCP / UDP  (0) 2021.06.06