[TIL] 쿠키(cookie)와 세션(session)의 차이

·2023년 6월 5일
1

TIL

목록 보기
2/7
post-thumbnail

✔️HTTP 특징

connectionless (비연결지향)

: 클라이언트가 요청을 한 후 응답을 보내면 그 연결을 끊어버림
즉, 클라이언트가 request를 서버에 보내면, 서버는 클라이언트에게 요청에 맞는 response를 보내고 접속을 끊는다.
헤더에 keep-alive라는 값을 줌으로써 커넥션을 재활용하는데, HTTP1.1에서는 이것이 디폴트이다.

stateless (상태정보 유지X)

:틍신이 끝나면 상태를 유지하지 않음
연결을 끊는 순간 클라이언트와 서버의 통신이 끝나며 상태 정보는 유지하지 않는 특성이 있다.


✔️쿠키와 세션

쿠키와 세션은 이러한 두 가지 특징을 해결하기 위해 사용된다
만약 사용자 인증 기능을 구현해둔 경우, HTTP 특징으로 인해 다른 페이지로 이동하거나 새로고침을 한다면 그때마다 인증과 관련된 통신을 진행해야한다.
쉽게 말해보면, 우리가 쇼핑몰 사이트에 회원가입->로그인을 진행하고, 상품을 장바구니에 담았을때 이러한 세션/쿠키가 존재하지 않는다면 다시 로그인을 진행하여야 할 것이다.
이러한 문제를 해결하기 위해 우리는 쿠키세션을 이용한다.


쿠키란?

쿠키: 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일
사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다. 즉, 클라이언트의 상태 정보를 로컬에 저장했다가 이를 참조한다.
Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있고, 쿠키는 사용자가 따로 요청하지 않아도 브라우저가 요청시 request header를 넣어 자동으로 서버에 전송한다.

정리

  • 클라이언트에 300개까지 쿠키저장이 가능
  • 하나의 도메인당 20개의 값만 가질 수 있음
  • 하나의 쿠키값 = 4KB까지 저장
  • Set-Cookie 속성 사용 -> 쿠키 생성
  • request header를 통해 자동으로 서버에 전송

쿠키의 구성요소

  • 이름: 쿠키의 이름
  • 값: 쿠키의 이름과 관련된 값
  • 유효시간: 쿠키의 유지시간
  • 도메인: 쿠키를 전송할 도메인
  • 경로: 쿠키를 전송할 요청 경로

쿠키의 동작방식

  1. 클라이언트가 페이지 요청
  2. 서버에서 쿠키 생성
  3. HTTP 헤더에 쿠키를 포함시켜 응답
  4. 브라우저가 종료되어도 쿠키 만료 시간에 따라 클라이언트에서 보관
  5. 같은 요청을 할 경우, 클라이언트에서 HTTP헤더에 쿠키를 함께 전송
  6. 서버에서 쿠키를 읽어 이전 상태 정보를 변경할 필요가 있을때, 쿠키를 업데이트하여 변경된 쿠키를 HTTP 헤더에 포함시켜 응답

쿠키의 사용 예

  • "아이디와 비밀번호를 저장하시겠습니까?"
  • 쇼핑몰의 장바구니 기능

⚙️세션 (session)

세션이란?

세션: 쿠키를 기반으로 하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버측에서 관리
서버에서는 클라이언트를 구분하기 위해 세션ID값을 부여하며, 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태 유지한다. 물론, 제한 시간을 두어 해당 시간동안만 유지하도록 설정도 가능하다.
정보를 서버에 두기 때문에 쿠키보다 보안이 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다. 즉, 동접자 수가 많은 사이트의 경우, 성능 저하의 요인이 될 수 있다.

정리

  • 서버측에서 관리
  • 쿠키보다 보안 우수
  • 사용자가 많아질수록 서버 메모리 차지↑ -> 성능저하 요인
  • 각 클라이언트에게 고유ID 부여

세션의 동작 방식

  1. 클라이언트가 서버에 접속 시 세션ID 발급받음
  2. 클라이언트는 세션ID에 대해 쿠키를 사용해서 저장하고 가지고 있음
  3. 클라이언트는 서버에 요청할 때, 이 쿠키의 세션ID를 같이 서버에 전달
  4. 서버는 세션ID를 전달받아 해당 세션ID로 세션에 있는 클라이언트 정보를 가져와 사용
  5. 클라이언트 정보를 가지고 서버 요청을 처리하여 응답

세션의 이용 예

  • 로그인과 같이, 보안상 중요한 작업

✔️쿠키와 세션의 차이

  • 동작원리는 비슷
  • 큰 차이: 사용자의 정보가 저장되는 위치
    - 쿠키: 서버의 자원을 전혀 사용X
    • 세션: 서버의 자원 사용
  • 보안: 쿠키 < 세션
    - 쿠키는 클라이언트 로컬에 저장되므로 변질되거나 스니핑 당할 우려 있음
    - 세션은 쿠키를 이용해 세션ID만 저장하여 그걸로 구분하여 요청 처리
  • 속도: 쿠키 > 세션
    - 세션은 서버의 처리가 필요
  • 만료시간: 둘 다 지정 가능
    - 세션은 브라우저가 종료되면 만료시간 상관없이 삭제됨
구분쿠키세션
사용자의 정보가 저장되는 위치클라이언트 로컬서버 자원 이용
보안 (쿠키<세션)변질되거나 스니핑 우려존재세션ID만 저장하여 구분
속도 (쿠키>세션)-서버의 처리 필요
만료시간(둘 다 지정 가능)-브라우저 종료되면 시간 상관없이 삭제

참고자료
쿠키와 세션 차이

0개의 댓글