왜 쿠키와 세션을 사용할까?
HTTP 프로토콜의 특징이면서 약점을 보완하기 위해 사용
- Stateless (무상태)
- 통신이 끝난 후 상태를 유지하지 않는 특징
- 연결을 끊는 순간 상태정보는 유지하지 않는다.
- Connectinoless (비연결지향)
- 요청 & 응답 후 연결을 끊어버리는 특징
쿠키란 ?
특징
- 브라우저(로컬)에 저장되는 키와 값이 들어있는 데이터 파일이다.
- 클라이언트의 상태정보를 로컬에 저장했다가 참조한다.
- 클라이언트에 300개까지 저장 가능하며, 하나의 도메인당 20개의 값만 가질 수 있다.
(하나의 쿠키값은 4KB까지 저장한다.) - Response Header 에 Set-Cookie 속성을 사용하면 쿠키를 만들 수 있다.
- 사용자가 따로 요청하지 않아도 브라우저가 Request시 Request Header를 넣어서 자동으로 서버에 전송한다.
구성요소
- Name
- Value
- Expires
- 쿠키에 만료일이 보함되어 있으면 브라우저가 종료되어도 인증은 유지된다.
- Domain
- 쿠키가 사용되는 도메인을 지정
- Path
- 쿠키를 반환할 경로를 결정
동작방식
세션이란?
특징
- 쿠키를 기반으로 하지만 서버측에서 관리한다.
- 서버는 클라이언트를 구분하기 위해 세션ID 를 부여하여 관리한다.
- 정보를 서버에 보관하기 때문에 보안에 좋지만, 메모리를 많이 차지하게 되어 서버 과부하로 성능 저하로 이어질 수 있다.
- 유효시간을 정할 수 있지만 브라우저가 종료되면 유효시간에 상관없이 삭제된다.
동작방식
- 클라이언트가 서버에 자원을 요청한다.
- 서버는 HTTP Request를 통해 쿠키에서 Session ID 를 확인 한 후 없으면 Set-Cookie를 통해 새로 발행한 Session ID를 HTTP Response 에 담아 보낸다.
- 클라이언트는 HTTP Request 헤더에 Session ID 를 포함하여 원하는 자원을 요청한다.
- 서버는 Session ID 를 통해 해당 세션을 찾아 클라이언트의 상태정보를 유지하며 응답을 한다.
참고로 캐시는 이미지나 파일등을 브라우저나 서버 앞 단에 저장해놓고 사용하는 것이므로 쿠키&세션과는 엄연히 다르다.
참고자료
https://interconnection.tistory.com/74
https://velog.io/@damiano1027/CS-%EC%BF%A0%ED%82%A4Cookie%EC%99%80-%EC%84%B8%EC%85%98Session
'Web' 카테고리의 다른 글
Thread Pool (Java, Tomcat, SpringBoot) (0) | 2024.07.25 |
---|---|
XML & JSON & YAML (0) | 2021.10.30 |
[DB] Connection Pool 정리 (1) | 2021.09.11 |
HTTP 프로토콜 정리 (0) | 2021.08.28 |