쿠키, 세션, 캐시란?

정관우·2021년 8월 3일
1
post-thumbnail

HTTP 의 특징

1 . Stateless ( 무상태성 )

클라이언트의 상태 정보를 가지지 않는 서버 처리 방식.

클라이언트와 첫번째 통신에서 데이터를 주고 받았다 해도, 다음에 이전 데이터를 유지하지 않는다.

2 . Connectionless ( 비연결성 )

클라이언트가 서버에 요청을 했을 때,그 요청에 맞는 응답을 보낸 후 연결을 끊는 방식

+) HTTP 1.1 버전에서 연결을 유지하고, 재활용 하는 기능이 Default 로 추가되었다. (keep-alive 값으로 변경 가능 )

상태 유지 (Stateful)의 필요성

HTTP 요청은 Stateless하기 때문에 정보가 유지 되지 않는다. 우리가 페이지를 이동하더라도 로그인 상태를 유지하기 위해, 장바구니에 구매하고 싶은 목록들을 저장하기 위해선 데이터를 유지해야할 필요가 있다. HTTP의 무상태성을 보완하기 위해 사용되는 도구가 쿠키와 세션이다.

웹사이트 접속 시 사용자의 브라우저에 저장되는 작은 텍스트 파일. 서버와 통신 시 HTTP 헤더에 포함된다.

이름, 값 만료기간(지정 가능), 경로 정보가 있고 키와 값으로 구성되어 있다.

기본적으로 쿠키는 오랜 시간 동안 유지될 수 있고, 자바스크립트를 이용해서 쿠키에 접근할 수 있기 때문에 쿠키에 민감한 정보를 담는 것은 위험하다. 따라서, 주로 노출되어도 상관 없는 정보들 ( 로그인 유지 상태, 팝업창 보지 않기 등..)을 저장하는데 이용된다.

쿠키 통신 방법

(1) 최초 통신에서는 쿠키값이 없으므로, 일단 클라이언트는 서버에 요청.

(2) 서버에서 클라이언트가 보낸 요청 헤더에 쿠키가 없음을 판별.

통신 상태(userId, Email, 로그인 상태 등..)를 저장한 쿠키를 응답으로 보낸다. (Set-Cookie)

(3) 클라이언트의 브라우저가 받은 쿠키를 생성/보존.

(4) 두번째 연결부턴, HTTP 헤더에 쿠키를 실어서 서버에 요청.

쿠키 제약 조건

  • 클라이언트는 총 300개의 쿠키를 저장할 수 있음
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있음 (20개가 넘으면 가장 적게 사용되는 것부터 삭제됨)
  • 하나의 쿠키는 4KB (4096byte) 저장 가능

2. 세션 (Session)

클라이언트가 아닌, 서버에 저장하는 쿠키. 주로, 유출 되어선 안될 중요한 데이터가 저장된다.

브라우저를 종료할 때까지 유지된다.

세션 통신 방법

(1) 클라이언트가 서버에 접속 시, 세션 ID를 발급.

(2) 서버에서는 클라이언트로 발급해준 세션 ID를 쿠키를 이용하여 저장

(3) 클라이언트는 다시 페이지에 접속할 때, 쿠키에 저장된 세션 ID를 서버에 전달

(4) 서버는 요청 Header에 쿠키 정보(세션 ID)로 클라이언트를 판별

1 ) 로그인 시도 ⇒ 인증 성공? 세션 상태 ( 인증에 성공한 상태 = 쿠키가 session_id를 가진 상태 , 매번 로그인 할 필요 X )
2 ) 세션을 저장 ( 서버 : ' 클라언트가 인증이 되었구나!')
3 ) 서버에게 세션을 전달
4 ) 서버가 클라이언트에게 쿠키에 세션을 담아 알려줌 ( '다음부터 쿠키에 이 세션이 있으면 인증된 걸로 알게!')
*응답 헤더에 set-cookie : session_id = 1 → 이런 식으로 쿠키를 브라우저에 심음
5 ) 다음 요청 시 세션은 신분증같이 사용
*쿠키 안의 session_id를 확인하여 응답 (id=12e3r의 장바구니 정보를 줘라!)
6 ) 서버는 세션을 확인하고 요청에 대한 작업 수행 ...
항목Cookie (쿠키)Session (세션)
저장 위치웹 브라우저 (클라이언트)웹 서버
저장 기간유효기간 설정 가능
미지정 시 웹브라우저 종료와 함께 삭제
유효기간 설정 가능
기본적으로, 브라우저 종료 시 삭제
저장 방식하드 디스크 내 텍스트 파일웹 컨테이너 내 객체
용량 제한총 300개의 쿠키하나의 도메인 당 20개의 쿠키
(쿠키 초과 시 가장 오래된 쿠키부터 제거됨)
하나의 쿠키 당 최대 4KB
서버 허용 범위 내 가능
(용량 제한 없음)
속도세션보다 빠름쿠키보다 느림
보안성보안성이 낮음
(하드에서 꺼내 읽을 수 있음)
보안성이 높음
(서버가 해킹당하거나
통신 중간에 세션 ID를 탈취당하지 않으면)

3. 캐시 (Cache)

리소스 파일들의 임시 저장소. 웹 브라우저가 동일한 주소로 연속으로 요청할 경우 첫 번째 요청의 결과를 로컬 PC의 캐시에 저장해둔 다음, 두 번째 요청 시 서버에 접근하는 것 대신에 로컬 PC의 캐시를 가져오는 방식.

요청의 결과 값은 보통 이미지 또는 사진 파일(jpg, png 등), css, js, 배너 등 변경 사항이 크지 않고, 용량이 큰 파일들을이다. 이런 데이터는 다시 사용될 가능성이 높고 매번 다시 다운받으려면 시간이 오래 걸리기 때문에 저장소(캐시)에 저장하고 다시 재사용한다. 이로써, 페이지 로딩 속도가 빨라진다.

하지만, 자주 변경되는 데이터를 캐시 방식으로 개발한다면 클라이언트가 이전 캐시를 삭제하지 않는 한 변경된 데이터를 출력하는 것이 아니라 이전 데이터만 출력되기 때문에 목적에 맞는 저장 방식을 사용하는 것이 중요하다.

참고 자료
[HTTP] 쿠키/세션/캐시의 차이점은? - RRRRR 는세
[WEB CS] Cookie, Session, Cache (쿠키, 세션, 캐시) 에 대해, 그리고 차이점에 대해 알아보자! - 인생의 순간을 기록하는 개발자 인생의 순간들을 기록하는 개발자

profile
작지만 꾸준하게 성장하는 개발자🌳

0개의 댓글