HTTP의 특징
- Connectionsless(비연결성): 클라이언트가 서버로부터 요청(Request)에 맞는 응답(Response)을 받으면 연결이 끊어짐
- Stateless(비상태성): 클라이언트와 첫번째 통신에서 데이터를 주고 받았다 해도, 두번째 통신에서 이전 데이터를 유지하지 않는 것
Why? 서버의 자원을 절약하기 위해
이로 인해, 사용자를 식별할 수 없어서 매번 새로운 사용자로 인식한다는 단점이 생김
✨ 이를 보완하기 위해 쿠키와 세션 등장! ✨
쿠키와 세션의 차이
| Cookie | Session |
---|
저장위치 | Client | Server |
저장형식 | Text | Object |
만료시점 | 쿠키 저장시 설정 (설정 없으면 브라우저 종료 시) | 정확한 시점 모름 |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량제한 | 한 도메인 당 20개, 한 쿠키당 4KB | 제한없음 |
저장 위치
- Cookie: 클라이언트의 웹 브라우저가 지정하는 메모리 or 하드디스크
- Session: 서버의 메모리에 저장
만료 시점
- Cookie: 저장할 때 expires 속성을 정의해 무효화시키면 삭제될 날짜 정할 수 있음
- Session: 클라이언트가 로그아웃하거나, 설정 시간동안 반응이 없으면 무효화 되기 때문에 정확한 시점 알 수 없음
리소스
- Cookie: 클라이언트에 저장되고 클라이언트의 메모리를 사용하기 때문에 서버 자원 사용하지 않음
- Session: 세션은 서버에 저장되고, 서버 메모리로 로딩 되기 때문에 세션이 생길 때마다 리소스를 차지함
용량 제한
- Cookie: 클라이언트도 모르게 접속되는 사이트에 의하여 설정될 수 있기 때문에 쿠키로 인해 문제가 발생하는 걸 막고자 한 도메인당 20개, 하나의 쿠키 당 4KB로 제한해 둠
- Session: 클라이언트가 접속하면 서버에 의해 생성되므로 개수나 용량 제한 없음
쿠키와 세션을 이용한 인증 방식
- 세션 저장소로 Redis를 많이 사용
- 세션ID를 쿠키라고 봐도 동일. 쿠키가 사용자 개념에서 더 큰 범주. 세션ID를 쿠키로 저장하는 셈이다.
- 세션은 서버에서 가지고 있는 정보이며 쿠키는 사용자에게 발급된 세션을 열기 위한 열쇠(SESSION ID)를 의미
- 사용자가 해킹당하는 것보단 서버가 해킹당하는게 훨씬 어렵기 때문에 인증의 책임을 서버가 지게 함
쿠키와 세션 사용
-
Cookie: 사용자의 편의를 위한 것으로 지워져도 되고, 조작되거나 가로채이더라도 큰 지장이 없는 수준의 정보
ex) 로그인 상태 유지, 일주일간 다시 보지 않기, 쇼핑몰 장바구니 기능
-
Session: 사용자나 다른 누군가에게 노출되면 안되는 중요한 정보
참고 링크
https://devuna.tistory.com/23
https://interconnection.tistory.com/74
https://tansfil.tistory.com/58