HTTP는 Stateless ( 무상태성 ) 프로토콜로 데이터를 주고 받아도 데이터를 유지하지 않습니다.
HTTP의 무상태성을 보완하기 위해 쿠키와 세션이 사용된다.
1.쿠키
쿠키는 내 컴퓨터에 저장되는 작은 텍스트 파일이다. 사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간을 지정할 수 있으며 쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조한다.
쿠키 구조
- 이름 : 쿠키 고유 이름
- 값 : 쿠키의 이름과 관련된 값
- 유효시간 : 쿠키 유효시간
- 도메인 : 쿠키 대상 도메인
- 경로 : 쿠키 전송 요청 경로
쿠키 프로세스
- 클라이언트 요청 및 서버에서 쿠키를 생성
- HTTP 헤더에 쿠키를 포함 시켜 전송
- 클라이언트의 브라우저가 받은 쿠키를 생성 및 보존
- 재접속시, HTTP 헤더에 쿠키를 실어서 서버에 전달
2. 세션
세션은 서버에 저장되는 데이터 저장소로 쉽게 생각하자면 브라우저가 종료되기 전까지 클라이언트의 정보가 저장되는 공간 정도로 이해하면 될 것 같다
세션 특징
- 세션은 웹 서버에 저장
- 쿠키보다 비교적 안전
- 저장 데이터 제한 없음 (어차피 서버 리소스 사용하는거라 X되고 싶으면 다담아서 사용)
- 고유의 세션ID를 통해 클라이언트 구분
세션 프로세스
- 클라이언트 최초 접속시, 세션 ID 발급
- 클라이언트로 발급해준 세션 ID를 쿠키를 이용하여 전송
- 재접속시, 쿠키에 저장된 세션 ID를 서버에 전달
- 서버는 요청 Header에 쿠키 정보(세션 ID)로 클라이언트를 판별
* 캐시
캐시는 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소이다. 자주사용되는 만큼 빠른 접근을 위해 메모리상에 저장하여 사용한다. 보통은 변화가 없는 static 파일, 이미지 또는 사진 파일(jpg, png 등등), CSS, JS 등 정적이고, 용량이 큰 파일들이다. 용량이 큰 파일인 만큼 다시 사용할때 재 다운로드받지 않고 저장소(캐시)에 저장하고 다시 재사용한다. 이로써, 페이지 로딩 속도가 빨라진다. 한마디로 동적 데이터를 저장하는 공간이라기 보단 앱 성능 개선을 위한 플래시 메모리라고 생각하면 쉽다.
세션과 쿠키의 차이
- 저장위치
가장 큰 차이는 저장소의 위치다. 쿠키는 클라이언트 브라우저에 저장되는 반면 세션은 웹 서버 내부 컨테이너에 저장된다. - 속도
쿠키는 파일을 읽는 구조기 때문에 세션보다 상대적으로 빠르다. - 보안
클라이언트 브라우저에 저장되는 쿠키와 다르게 세션은 내부 컨테이너 객체기 때문에 보안적으로 더 안전하다. 어차피 SID만 탈취하면 꺼내서 볼 수 있음; - 생명주기
쿠키는 유효기간에 따라 브라우저가 종료되도 파일로 남지만 세션의 경우 브라우저 종료시 삭제된다.
어차피 쿠키 내부에 SID가 포함되어 있기 때문에 세션도 결국 쿠키를 사용한다.
'Backend' 카테고리의 다른 글
인덱스(INDEX)란? (3) | 2024.08.11 |
---|---|
R2DBC란? (0) | 2024.08.05 |
Cache 사용시 Thundering herd 문제 해결하기 (0) | 2024.07.29 |
[Spring]Null 체크 방법 (@NotNull, @NotEmpty, @NotBlank, @Null) (0) | 2024.07.28 |
equals 사용 시 NullPointerException 방지 방법 (0) | 2024.07.28 |