네트워크 | 쿠키(cookie)와 세션(session)

printver_2world·2022년 5월 17일
0

Network

목록 보기
3/4
post-thumbnail

1. 쿠키와 세션을 왜 사용할까?

HTTP 프로토콜의 특징

  • connectionless
    클라이언트가 서버에 요청을 한 후 응답을 받으면 연결을 끊어버리는 특징
  • stateless
    통신이 끝나면 상태를 유지하지 않는 특징

HTTP 프로토콜의 특징이나 약점을 보완하기 위해서 쿠키와 세션을 사용한다.

2. 🍪쿠키(Cookie)

  • 쿠키는 클라이언트(브라우저) 로컬에 저장되어 있는 키와 값이 들어있는 작은 데이터 파일이다.
  • HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.
  • Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있다.
  • 유효시간을 정할 수 있어, 브라우저가 종료되어도 인증이 유지된다.
  • 클라이언트에 300개까지 쿠키저장이 가능하다.
  • 하나의 도메인당 20개의 쿠키를 가질 수 있다.
  • 하나의 쿠키값은 4KB까지 저장 가능하다.

쿠키 구성요소

  • 이름 : 각각의 쿠키를 구별하는 데 사용
  • 값 : 쿠키의 이름과 관련된 값
  • 유효시간 : 쿠키 유지 시간
  • 도메인 : 쿠키를 전송할 도메인. 유튜브에서 준 쿠키는 유튜브에만 보낼 수 있다.
  • 경로 : 쿠키를 전송할 요청 경로

쿠키 동작 순서

  1. 클라이언트가 페이지를 요청한다.
  2. 서버에서 쿠키를 생성한다.
  3. HTTP 헤더에 Set-Cookie 속성에, 쿠키를 포함 시켜 응답한다.
  4. 클라이언트는 쿠키를 로컬에 보관하였다가, 같은 요청을 할 때, 서버에 쿠키와 함께 요청을 한다.
  5. 서버에서 쿠키를 읽어, 이전 상태 정보를 변경할 필요가 있을 때 쿠키를 업데이트 하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답한다.

3. 세션(Session)

  • 세션도 쿠키를 사용한다. 쿠키는 세션 ID를 전달하기 위한 매개체이다.
  • 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리, 세션은 서버 측에서 관리한다. 브라우저에는 오직 세션 ID만 저장된다.
  • 서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하여, 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.

세션 동작 순서

  1. 클라이언트가 서버에 접속 시, 서버는 세션 ID를 부여하여 DB에 저장한다.
  2. 서버는, 쿠키에 세션 ID를 포함시켜 응답한다.
  3. 클라이언트는 서버에 요청할 때, 세션 ID가 포함된 쿠키를 서버에 전달하여 요청한다.
  4. 서버는 세션 ID를 전달받는다. 이때 서버는 세션 ID가 있는 쿠키와 함께 요청이 들어온 것만 알지 정보를 알지는 못한다.
  5. 해당 세션에 저장되어 있는 클라이언트 정보를 가져와 응답한다.

🍪쿠키 vs 세션

항목쿠키세션설명
사용자 정보 저장 위치브라우저서버
보안세션은 서버에 저장되기 때문이다. 로컬은 변질되거나 request에서 스니핑의 우려가 있지만, 세션은 세션 ID만 로컬에 저장하고, 처리는 서버에서 하기 때문에 비교적 보안성이 좋다.
속도세션은 서버의 처리가 필요가 때문에 느리다.
라이프 사이클만료시간이 길다면, 브라우저 종료해도 남아있다.만료시간이 길더라도, 브라우저가 종료되면 세션도 종료된다.
용량 제한도메인 당 20개, 1쿠키당 4KB제한 없음TMI. JWT는 용량제한 없음

세션보다는 쿠키?

세션은 서버의 자원을 사용하기 때문에 정보가 많아지면 서버 메모리를 많이 차지하고, 속도가 느려질 수 있다.

네이티브 앱에서는 세션을 사용할 수 있지만, 쿠키는 브라우저에만 있으니 사용할 수 없다. -> Token 등장!

profile
걸음마코더

0개의 댓글