🌐 HTTP의 특징
✔ HTTP 프로토콜 환경은 connectionless하고 stateless하다는 특성을 가진다.
✔ HTTP 프로토콜의 특성이자 약점을 보완하기 위해 쿠키 또는 세션을 사용한다.
🍪 Cookie
쿠키는 클라이언트 로컬에 저장되는 key-value 쌍의 작은 데이터파일이다.
✅ 쿠키의 특징
- 유효시간을 명시할 수 있고, 명시하지 않으면 브라우저 종료시 삭제된다.
- Response Header에 Set-Cookie 속성을 사용하여 클라이언트에 쿠키를 만들 수 있다.
- Text파일로 저장된다.
✅ 쿠키의 구성 요소
- 이름 : 각각의 쿠키를 구별하는 데 사용되는 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간 : 쿠키의 유지시간
- 도메인 : 쿠키를 전송할 도메인
- 경로 : 쿠키를 전송할 요청 경로
- 보안연결여부
- HttpOnly여부
✅ 동작 방식
- 클라이언트가 서버에 요청을 한다.
- 서버는 상태를 유지하고 싶은 값을 쿠키로 생성한다.
- 서버가 응답할 때 HTTP헤더에 쿠키를 포함해서 전송한다.
Set−Cookie: id=bongsik
- 쿠키는 만료기간까지 클라이언트에서 보관한다.
- 클라이언트는 같은 요청을 할 때, HTTP헤더에 쿠키를 함께 보낸다.
Cookie: id=bongsik
- 서버에서 쿠키를 읽어 이전 상태 정보를 읽어 응답한다.
쿠키 사용 예시
- 아이디, 비밀번호 저장
- 장바구니
- 팝업창 오늘 이 창 보지 않음
🔗 Session
세션은 브라우저 종료 전까지 클라이언트의 요청을 유지해주는 기술이다.
✅ 세션의 특징
- 세션은 쿠키에 기반한다.
- 보안 측면에서 쿠키보다 좋다.
- 사용자가 많아질수록 서버 메모리를 많이 차지하게된다.
✅ 동작방식
- 웹브라우저가 서버에 요청을 한다.
- 서버는 해당 웹브라우저(클라이언트)에 대한 세션 ID를 생성한다.
- 응답할 때 HTTP헤더에 세션 ID를 포함해서 웹브라우저에 전송한다.
Set−Cookie: SESSIONID=q1w2e3r3
- 웹브라우저는 세션 ID 값이 담긴 쿠키를 만들어 저장한다.
- 웹브라우저는 요청 시, 세션 ID가 담겨있는 쿠키를 HTTP 헤더에 넣어서 전송한다.
Cookie: SESSIONID=q1w2e3r3
- 서버는 세션 ID를 확인하고 해당 세션에 관련된 정보를 확인한 후 응답한다.
쿠키 사용 예시
👀 Cookie & Session 비교
✔ 세션도 결국 쿠키를 사용하기 때문에, 쿠키와 세션은 비슷한 역할을 하고 동작원리가 비슷하다.
✔ 둘 다, 임시로 정보를 저장해둠으로서 생산성을 높이는 목적을 가진다.
✔ 저장 위치,저장 방식, 보안, 라이프 사이클, 속도, 용량 제한 측면에서 차이점이 있다.
📌 저장 위치
📌 저장 방식
- 쿠키 : 하드디스크 내 텍스트 파일
- 세션 : 웹 컨테이너 내 객체
📌 보안
- 쿠키 : 클라이언트에 저장되기 때문에 탈취와 변조 가능성이 있어 보안에 취약하다.
- 세션 : 쿠키를 이용해 세션 ID만 저장하고 그것을 구분해서 서버에서 처리하기 때문에 비교적 보안성이 좋다.
📌 라이프 사이클
- 쿠키 : 만료시간에 따라 브라우저를 종료해도 계속해서 남아있다.
- 세션 : 만료시간이 존재하지만, 브라우저가 종료되면 만료시간에 상관없이 삭제된다.
📌 속도
- 쿠키 : 클라이언트에 저장되어있어 빠르다.
- 세션 : 서버에 저장되어 있어 서버의 처리가 요구되기 때문에 비교적 느리다.
📌 용량 제한
- 쿠키 : 총 300개. 한 도메인당 20개. 한 쿠키 당 최대 4KB. 초과 시 가장 오래된 쿠키부터 제거.
- 세션 : 제한 없음(서버 허용 범위 내)
❓ Cookie/Session과 Cache
- 캐시는 변경이 잘 되지 않고 자주 사용되는 정적 컨텐츠(이미지, css, js)를 빠르게 접근 가능한 위치에 저장해두고 사용하는 것이다.
- 렌더링 속도를 높이는 것이 목적이다.
- 한번 캐시에 저장되면 브라우저를 참고하기 때문에 서버에서 변경이 되어도 바로 확인이 불가능하다.
- 캐시를 삭제하거나 서버에서 캐시 만료기간을 설정해주어야 한다.
💛 참고 :
https://dev-coco.tistory.com/61
https://chrisjune-13837.medium.com/web-%EC%BF%A0%ED%82%A4-%EC%84%B8%EC%85%98%EC%9D%B4%EB%9E%80-aa6bcb327582
https://doooyeon.github.io/2018/09/10/cookie-and-session.html
https://ryusae.tistory.com/7