WEB

[HTTP] 쿠키/세션/캐시의 차이점은?

포포015 2021. 6. 22. 23:57

0. HTTP의 특징

 

 (1) Stateless 프로토콜

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

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

 

 (2) Connectionless 프로토콜

 클라이언트가 서버에 요청(Request)를 했을때, 그요청에 맞는 응답(Response)을 보낸후 연결을 끊는 처리방식.

 

But ,실제로는 사이트에서 데이터 유지가 필요한경우가 많다.

정보가 유지되지않으면 , 페이지를 이동할대마다 로그인을 다시하거나,

쇼핑몰의 경우 장바구니를 담아도 데이터가 다날라가기때문이다.

 

따라서, 이런 상황을 대처하기위해 쿠키와 세션을 사용한다.

쿠키와 세션의 차이점은 크게 상태정보의 저장 위치이다.

쿠키 - 클라이언트(로컬 = 사용자브라우저)에 저장

세션 - 서버에 저장

 

1. 쿠키(Cookie)

사용자의 브라우저에 저장되고, 통신할때 HTTP 헤더에 포함되는 텍스트 데이터 파일

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

해당 사용자의 컴퓨터를 사용한다면 누구나 쿠키에 입력된 값을 쉽게 확인 가능 -> 보안성이 낮음

 

쿠키 통신방법

 1) 최초 통신에서는 쿠키값이 없으므로, 일단 클라이언트는 Request를 한다.

 2) 서버에서는 클라이언트가 보낸 Request Header에 쿠키가 없음을 판별.

    통신상태(UserId,Password,조작상태,방문횟수 등)을 저장한 쿠키를 Response한다.

 3) 클라이언트의 브라우저가 받은 쿠키를 생성/보존한다 (개발자모드F12 Application 탭에서 확인가능)

 4) 두번째 연결부턴, HTTP Header에 쿠키를 실어서 서버에 Request한다.

 

쿠키 제약조건

1) 클라이언트는 총 300개의 쿠키를 저장할수 있음.

2) 하나의 도메인당 20개의 쿠키를 가질수 있음. (20개가 넘으면 가장 적게 사용되는것부터 삭제됨)

3) 하나의 쿠키는 4KB (4096byte) 저장가능

 

쿠키를 사용하는 대표적인 예시

 자동 로그인 유지 , 위시 리스트 저장, 팝업 보지않기, 사용자 이전 스크롤링이나 뷰 설정 값등등..

 

2. 세션(Session)

서버에 저장되는 쿠키. 클라이언트와 서버의 통신상태. 주로 중요한 데이터를 저장시 사용한다.

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

사용자 로컬이 아닌 서버에 직접 저장되므로, 세션 내의 데이터를 탈취하는 것은 어려움 -> 보안성이 비교적 높음

 

세션 통신방법

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

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

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

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

 

* Session ID 보안의 취약점

* 세션 해킹 : 홈페이지 관리자의 세션 아이디를 탈취 -> 쿠키값을 관리자의 세션아이디로 변경한다 -> 관리자권한 이용

  - 예방법 : 세션에 로그인 했을때의 IP를 저장 -> 페이지 이동시마다 ,

                현재 IP와 세션의 IP/브라우저(UserAgent) 정보가 같은지 검사

 

* 쿠키/세션 비교

 

   쿠키 세션 
 저장위치 클라이언트  서버 
 보안 변질 우려로 인해 보안 취약  비교적 보안성이 좋음 
 라이프 사이클 만료 기간 지정, 브라우저 종료 시에도 유지  브라우저 종료시 삭제 (기간 지정이 가능하긴 함)
 속도 빠름  느림 (서버에 정보가 있으므로)

 

3. 캐시 (Cache)

리소스 파일들의 임시 저장소. 같은 웹페이지에 접속할때 사용자의 PC에서 로드하므로 서버를 거치지 않아도 된다.

이전에 사용되었던 데이터는 다시 사용될 가능성이 높다.

그래서 다시 사용될 확률이 있는 데이터들을 빠르게 접근 가능한 저장소에 저장한다.

-> 페이지 로딩 속도를 개선함.

이미지, 비디오 오디오, CSS/JS 등...

 

1) 캐시 히트 (Cache Hit)

 CPU가 참조하려는 메모리가 캐시에 존재하고 있는경우

 

2) 캐시 미스 (Cache Miss)

 <-> 캐시 히트와 반대로, 메모리에 캐시가 존재하지 않는경우

 

사용하는 방식

홈페이지 재접속시 css/js 파일을 사용자의 PC에 로드 , 서버를 거치지않아도 된다.