쿠키(Cookie)
- 인터넷에 접속할 때 웹 사이트가 있는 서버에 의해 사용자의 컴퓨터에 저장되는 정보
- 주로 로그인 정보, 장바구니 정보를 저장한다.
- 쿠키와 다르게 캐시는 사운드, 이미지 파일을 일시적으로 저장해서 로딩을 빠르게 하는 것
- 기존에 쿠키는 암호화가 되지 않았지만, 최근에는 암호화가 이루어져서 과거처럼 매우 낮은 보안성을 가지지 않는다.
- 쿠키는 최적화 프로그램으로 자주 삭제하거나 브라우저의 자동 삭제 기능을 사용한다.
- 쿠키를 차단할 수 있지만, 차단하면 사이트가 동작하지 않을 수 있는 단점이 있다.
세션(Session)
- 쿠키를 기반으로 일정 시간동안 같은 브라우저로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술
- 쿠키는 클라이언트
- 세션은 웹 서버에 저장
- 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 시간대
- 세션은 연결상태 유지보다, 안정성이 더 중요하다.
쿠키 vs 세션
- 쿠키
- 클라이언트에 저장, 파일로 관리되기 때문에 브라우저의 종료와 상관없이 만료시간까지 존재
- 관련 정보들이 쿠키 내부에 존재해서 빠른 속도
- 클라이언트가 서버로 요청을 보낼 때 요청 메시지를 스나이핑 당할 위험이 있다.
- 세션
- 서버에 저장되어 브라우저 종료 혹은 세션 만료시간 이후 삭제된다.
- 관련 정보들이 서버에 저장되서 느린 속도를 가진다.
- 세션은 쿠키를 통해 세션 Id만 저장하고 나머지 정보는 서버에 처리해서 상대적으로 보안성을 갖고 있다.
쿠키(Cookie) | 세션(Session) | |
저장위치 | 클라이언트(Client) | 서버(Server) |
저장형식 | Text | Object |
만료시점 | 쿠키 저장시 설정 | 설정 시간 |
리소스 | 클라이언트의 리소스 | 서버의 리소스 |
용량제한 | 한 도메인 당 20개, 한 쿠키당 4KB | 제한 없음 |
저장 위치
- 쿠키 : 클라이언트의 웹 브라우저가 지정하는 메모리나 하드디스크
- 서버 : 서버의 메모리
만료 시점
- 쿠키 : 저장할 때 expires 속성을 정의한다.
- 세션 : 클라이언트 로그아웃 or 설정 시간 -> 정확한 시점을 알 수 없다.
리소스
- 쿠키 : 클라이언트에 저장, 서버 자원 사용 X
- 세션 : 서버에 저장, 서버 메모리에 로딩되고 세션이 생길 때마다 리소스 차지
용량 제한
- 쿠키 : 쿠키로 인해 문제가 발생하는 것을 방지하고자 한 도메인당 20개, 한 쿠키당 4KB
- 세션 : 클라이언트가 접속하면 서버에 의해 생성된다. -> 제한 없음
만약 로드밸런서와 세션을 사용한다면?
- 세션은 서버에 저장된다.
- 여러 서버가 분산되어 있고, 로드밸런서를 사용할 때 세션은 공유되지 않는다.
- 클라이언트가 로그인을 위해 서버A에 요청을 보내면 서버 A의 세션 저장소에 저장된다.
- 클라이언트가 서비스를 이용하기 위해 서버B에 요청을 보내면 서버 B에는 해당 클라이언트의 세션 정보가 없기 때문에 로그인 페이지로 리다이렉트 하는 문제 발생
- 해결 방법
- Sticky Session
- 첫 요청에 대한 응답을 준 서버에게 sticky하게 붙어서 이후의 모든 요청들을 해당 서버로만 보내는 방법
- 단점 : 로드 밸런성 효율 저하
- Session Clustering(세션 클러스터링)
- 여러 대의 서버를 하나의 서버처럼 운영한다. 각 서버의 세션 저장소를 하나로 묶어서 관리한다.
- 모든 서버가 동일한 세션을 공유하게 되기 때문에 하나의 서버가 죽어도 세션 정보를 잃어버릴 위험이 없어진다.
- 단점 : 모든 세션 저장소 업데이트, 메모리 필요 -> 성능 저하
- Session Server
- 세션만 관리하는 별도의 서버를 두는 방식
- 모든 서버의 업데이트 필요 X, Redis같은 In-memory(인메모리) 데이터 저장소를 사용해서 빠른 세션 조회 가능
- 단점 : 하나의 세션 서버로 관리하기 때문에 서버가 죽으면 모든 세션 데이터를 잃어버린다.
- 하지만 레디스를 사용하면 다른 서버의 메모리에 실시간으로 복사본을 저장하거나 디스크에 직접 저장하여 백업 가능
- Master-Slave 형식으로 서비스 유지 가능
- 단점 : 데이터 별도 저장의 메모리 필요
- Sticky Session
'ETC > 이론 정리' 카테고리의 다른 글
[WEB] HTTP - Method, Request, Response, Status Code과 Socket 통신 차이점 (0) | 2022.10.07 |
---|---|
[WEB] CSRF(Cross Site Request Forgery), XSS(Cross Site Scription) (0) | 2022.10.06 |
[WEB] 인증 방식 - OAuth(Open Authorization), JWT(Json Web Token) (0) | 2022.10.06 |
[Kafka] 아파치 카프카란? Apache Kafka (0) | 2022.10.01 |
[WEB] RESTful API - REST 6가지 원칙, URI와 URL (0) | 2022.09.27 |