1. 쿠키와 세션을 쓰는 이유
- HTTP 2가지 특징인 비연결지향와 상태없음으로 인해 서버는 클라이언트의 상태를 알 수 없다. 클라이언트의 상태를 알아야 될 경우 ( ex. 인증 ) 쿠키와 세션을 사용한다.
2. HTTP 의 특징
- 비연결지향 ( Connectionless ) : request 에 대한 response 를 해주면 서버와 클라이언트가 연결이 끊어진다. 커넥션을 낭비하지 않기 때문에 리소스의 낭비를 줄일 수 있다.
- 상태없음 ( Stateless ) : 커넥션을 끊는 순간 상태 정보를 유지하지 않는다.
3. 쿠키
3.1. 쿠키의 특징
- 쿠키는 클라이언트 로컬에 저장되는 key-value 형태의 데이터이다. ( 이름, 값, 유효시간, 도메인, 경로 )
- 클라이언트 로컬에 저장되기 때문에 상대적으로 변조되기 쉽다.
- 클라이언트의 상태 정보를 로컬에 저장했다가 request 할 때 참조된다.
- 브라우저가 종료되도 유지된다.
- 크롬 개발자 도구(F12) 기준 Application -> Storage -> Cookies
3.2. 쿠키의 동작 방식
3.3. 쿠키의 종류
- 세션 쿠키 ( Session Cookie ) : 웹 브라우저가 종료될 때 제거되는 쿠키
- 지속 쿠키 ( Persistent Cookie ) : 유효시간을 정하지 않은 경우 브라우저가 종료되어도 남아 있는 쿠키
- + Secure Cookie, Third-Party Cookie 등
3.4. 쿠키 저장 한계
- 클라이언트에 최대 300개 까지 쿠키를 저장 가능
- 서버 도메인 하나당 최대 20개의 쿠키를 저장 가능
- 하나의 쿠키 값은 최대 4KB까지 저장 가능
4. 세션
서버에 클라이언트의 상태 정보를 저장한다.
4.1. 세션의 특징
- 세션 id만 쿠키로 저장하고 상태 데이터들을 서버에 저장한다.
- 세션 id를 제외하고 서버에 저장되기 때문에 쿠키보다 보안성이 높다.
- 서버에 저장하기 때문에 서버의 부하가 늘어나고 상대적으로 속도가 느리다.
- 브라우저가 종료되면 소멸한다.
4.2. 세션의 동작 방식
- 클라이언트가 서버에 접속 시 세션 ID 를 발급한다.
- 클라이언트는 세션 ID 에 대해 쿠키를 사용해서 정보를 저장한다.
- 클라이언트가 서버에 다시 접속시 쿠키를 이용해서 세션 ID 값을 서버에 전달한다.
5. 쿠키와 세션을 이용한 로그인 판단
6. 기타
6.1. 보안상 모두 세션을 쓰면 되는데 쿠키를 사용하는 이유
- 세션은 서버에 저장되고, 서버자원을 사용하기 때문에 사용자가 많을 경우 소모되는 자원도 많아지게 되므로 쿠키와 세션을 적절하게 사용하여, 서버 자원의 낭비를 방지할 수 있다.
6.2. 캐시
- 브라우저 캐시는 이미지, CSS, JS 파일 등이 사용자의 브라우저에 저장되는 것이다. 캐시에 저장이 되고 나서 파일을 변경해서 배포하게 되면 변경 이전에 브라우저에 저장되어 있던 파일을 재사용한다. 사용자가 캐시를 삭제하거나 header 에 자원 캐시 만료시간을 명시해서 캐시를 회피할 수 있다.
참고 자료
- 쿠키(Cookie)와 세션(Session)
- 쿠키와 세션의 차이, 용도, 사용법(cookie,session)
- 쿠키(Cookie), 세션(Session) 특징 및 차이
- JSESSIONID
- HTTP 는 Stateless 한데 로그인은 어떻게 구현할 수 있을까? (세션/쿠키를 이용한 인증)
- 쿠키(Cookie)와 세션(Session) & 로그인 동작 방법
'IT 개념 정리' 카테고리의 다른 글
[자료구조] 자료구조란? (0) | 2021.09.22 |
---|---|
[객체지향] 의존성 주입 (0) | 2021.05.03 |
배치 프로그램 (0) | 2021.03.21 |
[아키텍처] CQRS 와 이벤트 소싱 (0) | 2021.03.16 |
그거 뭔지 모르겠어 : SPA (0) | 2021.03.07 |