[CS] Network - 쿠키 vs 세션

ZenTechie·2023년 5월 9일
0

CS

목록 보기
8/16

쿠키 vs 세션

HTTP 프로토콜의 특징

  • 비연결 지향(Connectionless)
    • 클라이언트가 request를 서버에 보내고, 서버는 클라이언트의 request에 맞는 response를 보내면 바로 연결이 종료된다.
  • 상태정보 유지 안 함(Stateless)
    • 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보(세션 상태, 세션 정보)를 유지하지 않는다.
    • 요청에 대한 응답만 처리한다.
    • 클라이언트가 송신하려 했던 모든 데이터가 서버쪽에 수신 되었는지 확인하지 않는다.

쿠키와 세션의 필요성

  • HTTP 프로토콜은 모든 request간 의존관계가 없다.
  • 즉, 현재 사용자가 이전 사용자와 같은지 아닌지를 판단할 수 없다.
  • 계속해서 연결을 유지하지 않기 때문에 리소스 낭비가 줄어드는 것이 큰 장점이지만, 통신할 때마다 새로 연결하기 때문에 클라이언트는 매 요청마다 인증을 해야 한다는 단점이 있다.
  • 이전 요청과 현재 요청이 같은 사용자의 요청인지 알기 위해서는 상태를 유지해야 한다.
  • HTTP 프로토콜에서 상태를 유지하기 위한 기술로 쿠키와 세션이 있다.

쿠키(Cookie)

개념

  • 클라이언트 로컬(Local)에 저장되는 키와 값이 들어있는 파일이다.

특징

  • 사용자 인증 만료 시간을 설정할 수 있으며, 유효 시간이 정해지면 브라우저를 종료해도 인증이 유지된다.
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
  • 따로 요청하지 않아도 브라우저가 자동으로 Request에 Request Header를 넣어서 서버에 전송한다.
  • 이름, 값, 유효 시간, 경로 등을 포함하고 있다.
  • 클라이언트의 상태 정보를 브라우저(로컬)저장하여 참조한다.

구성요소

  • 쿠키의 이름(name)
  • 쿠키의 값(value)
  • 쿠키의 만료시간(Expires)
  • 쿠키를 전송할 도메인 이름(Domain)
  • 쿠키를 전송할 경로(Path)
  • 보안 연결 여부(Secure)
  • HttpOnly 여부(HttpOnly)

동작방식

[그림]

  1. 클라이언트가 서버에 페이지를 요청한다.
  2. 서버가 쿠키를 생성한다.
  3. 서버가 응답할 때 HTTP 헤더의 Set-Cookie에 쿠키를 포함해서 전송한다.
Set-Cookie: id=lunarmoon
  1. 전달받은 쿠키는 로컬에 저장하고, 다음 요청 때 쿠키를 HTTP 헤더에 넣어서 전송한다.
cookie: id=lunarmoon
  1. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있다면, 쿠키를 업데이트하고 변경된 쿠키를 HTTP Header에 포함시켜 응답한다.

사용 예시

  • 아이디, 비밀번호 저장 → 자동 로그인
  • 쇼핑몰 장바구니

세션(Session)

개념

  • 쿠키를 기반으로 하지만, 쿠키와 달리 세션은 서버측에서 관리한다.

특징

  • 클라이언트를 구분하기 위해 세션ID를 부여하며, 일정 시간 동안 같은 브라우저로부터 들어오는 요청을 하나의 상태로 보고 그 상태를 유지한다.(= 웹 브라우저를 통해 서버에 접속한 이후부터 브라우저를 종료할 때까지 유지되는 상태 )

  • 사용자에 대한 정보를 서버에 저장하기 때문에 쿠키보다 보안에 좋지만, 서버 메모리로 로딩되기 때문에 사용자가 많을수록 서버 메모리를 많이 차지한다.

  • 클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는 데 이것이 세션ID이다.

동작 방식

[그림]

  1. 클라이언트가 서버에 페이지를 요청한다.
  2. 서버가 해당 웹 브라우저(클라이언트)에 유일한 ID(Session ID)를 부여한다.
  3. 서버가 응답할 때 HTTP 헤더(Set-Cookie)에 Session ID를 포함해서 전송
    쿠키에 Session ID를 JSESSIONID 라는 이름으로 저장
Set-Cookie: JSESSIONID=abcdef
  1. 웹브라우저는 이후 웹브라우저를 닫기까지 다음 요청 때 부여된 Session ID가 담겨있는 쿠키를 HTTP 헤더에 넣어서 전송한다.
Cookie: JSESSIONID=abcdef
  1. 서버는 세션 ID를 확인하고, 해당 세션에 관련된 정보를 확인한 후 응답한다.

사용 예시

  • 로그인

세션도 쿠키를 사용하여 값을 주고받으며 클라이언트의 상태 정보를 유지한다.
즉, 상태 정보를 유지하는 수단쿠키이다.

쿠키와 세션의 차이점

  • 저장 위치
    • 쿠키 : 클라이언트(로컬)
    • 세션 : 서버
  • 보안
    • 쿠키 : 클라이언트에 저장되므로 보안에 취약
    • 세션 : 쿠키를 이용해 Session ID만 저장하고 이 값으로 구분해서 서버에서 처리하므로 비교적 보안성이 좋다.
  • 생명주기(라이프 사이클)
    • 쿠키 : 만료시간에 따라 브라우저를 종료해도 계속해서 남아 있을 수 있다.
    • 세션 : 만료시간을 정할 수 있지만 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
  • 속도
    • 쿠키 : 클라이언트에 저장되어서 서버에 요청 시 빠르다.
    • 세션 : 실제 저장된 정보가 서버에 있으므로, 서버의 처리가 필요해 쿠키보다 느리다.

[출처]

https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md#%EC%BF%A0%ED%82%A4%EC%99%80-%EC%84%B8%EC%85%98

https://github.com/SubAkBa/Tech_Interview/blob/master/Web/%EC%BF%A0%ED%82%A4(Cookie)&%EC%84%B8%EC%85%98(Session).md

profile
데브코스 진행 중.. ~ 2024.03

0개의 댓글