캐시, 쿠키, 세션

kirin.log·2021년 11월 10일
0

캐시, 쿠키, 세션 이 세개 단어의 공통점은 '저장'이라는 키워드와 연관된다는 것이다.
무언가를 저장하는 기능 혹은 저장물을 뜻하는 것 같지만, 어떤 것을 저장하는지? 어디서 보내진 것을 저장하는지? 등 각 단어의 차이를 구분해보자.

⛵ 쿠키(Cookie)

쿠키는 웹사용자 브라우저에 저장되는 사용자 기록 정보 파일을 의미하며, 웹서버가 사용자의 PC에 자신이 필요한 정보를 심어놓기 위한 파일이다.
= 쿠키는 사용자 정보를 저장하기 위해, 사용자 디바이스에 저장하는 파일

즉, 통신할 때 HTTP 헤더에 포함되는 텍스트 데이터 파일이라고 볼 수 있다. 사용자가 웹서버에 요청을 보냈을 때 웹서버에서는 HTTP 헤더를 통해 레퍼러(referer)나 사용자의 브라우저 종류 등 여러가지 정보를 얻을 수 있는데, 이런 기본적인 정보와는 별도로 웹서버가 필요로 하는 특수한 정보를 저장하고 사용하기 위해 쿠키를 심거나 읽어들인다.

= 개인 소장용 '방문 일지' 로 비유할 수 있다.

🍏 예시 1번)
사용자가 크롬 브라우저를 통해서 NAVER 웹페이지에 접속하여 id와 pw를 입력해서 로그인 버튼을 눌렀다고 가정하면, id와 pw가 NAVER 측으로 전달되어 사용자를 접속시켜 준다.
그럼 이제, 나의 크롬 브라우저(=개인 소장용 방문일지)에 아래와 같은 기록이 남는다.

"NAVER 홈페이지에 00000이라는 id와 1234라는 pw를 입력해서 접속했다."

그 뒤로 크롬 브라우저는 내가 NAVER 웹페이지에 접속할 때마다 그 기록을 가지고 자동으로 로그인 하게 된다. (기록이 남아 있으니까 활용)

🍏 예시 2번)
사용자가 커머스를 접속 했을 때, 사이트에서 사용자가 어떤 상품을 장바구니에 담았는지를 저장하고 유지하기 위해, 쿠키로써 휴대폰(또는 PC)에 데이터를 저장한다.

그럼 다음번에 방문하더라도 장바구니에 담긴 상품이 계속 남아 있게 된다.

쿠키는 이렇게 웹 데이터 분석 외에도 커머스의 장바구니 정보는 물론이고, ID와 비밀번호 정보를 쉽게 입력하기 위해, 특정 사용자에게는 배너 광고를 타겟팅하기 위해서도 저장한다.

즉 쿠키는 사용자의 접속 인증(Authorization) 기록을 위한 기록증 정도로 생각할 수 있다. 이러한 기록은 브라우저를 닫았다가 열어도 남아있는 기록이다. 그러나 기록이 영원히 남아있는 것은 아니고, 여러 웹 페이지에 방문하면서 브라우저 쿠키가 쌓이다 보면 오래 된 기록은 자연스럽게 삭제되어 버리기 때문에 '쿠키 소멸' 현상이 발생한다.

또한 해당 사용자의 컴퓨터를 사용한다면 누구나 쿠키에 입력된 값을 쉽게 확인 가능하기 때문에 보안성이 낮다.

🪐 쿠키 통신 방법

(1) 최초 통신에서는 쿠키값이 없으므로, 일단 클라이언트는 Request 를 한다.
(2) 서버에서 클라이언트가 보낸 Request Header에 쿠키가 없음을 판별.
👉 통신 상태( UserID, Password, 조작상태, 방문횟수 등)를 서버에 저장한 쿠키를 Response한다.
(=> 다양한 정보를 쿠키로 심어서 주고받을 수 있다)
(3) 클라이언트의 브라우저가 받은 쿠키를 생성/보존한다
(4) 두번째 연결부턴, HTTP Header에 쿠키를 실어서 서버에 Request 한다

🪐 쿠키 제약 조건

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

🪐 쿠키 사용하는 예시

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


⛵ 세션(session)

세션은 쿠키랑 하는 일이 같지만, 데이터가 저장되는 위치가 다르다.
쿠키가 사용자의 컴퓨터(브라우저)에 저장된다면, 세션은 서버 쪽에 저장된다.

예를 들어 사용자가 NAVER 웹페이지에 접속했을 때 NAVER 측에서 '저 사람이 접속했다'라고 기록하는 것이 바로 세션의 역할이다. (쿠키와 거의 같은 역할이지만 저장 위치가 다름)

또 다른 차이점은 생명주기이다. 쿠키가 브라우저를 닫아도(종료해도) 소멸되지 않는 반면, 세션은 브라우저가 종료되면 소멸 된다. (브라우저를 종료할 때까지 유지)

보안 면에서도 쿠키와 세션은 차이가 있다. 쿠키는 개인PC에서, 세션은 서버에 직접 저장되기 때문에 세션이 비교적 보안이 강하다(세션 내의 데이터를 탈취하는 것은 어려움).

🪐 세션 통신 방법

(1) 클라이언트가 서버에 접속 시, 세션 ID를 발급한다.
(2) 서버에서는 클라이언트로 발급해준 세션 ID를 쿠키를 이용해서 브라우저에 저장
(3) 클라이언트는 다시 페이지에 접속할 때, 쿠키에 저장된 세션 ID를 서버에 전달
(4) 서버는 Request Header에 쿠키 정보(세션 ID)로 클라이언트를 판별

❗ 세션 ID를 클라이언트에 주고받는데, 주로 쿠키를 이용하는 경우가 많다.

※ SESSION ID 보안의 취약점
세션 해킹 의 문제가 발생할 수 있다는 취약점이 있다. 홈페이지 관리자의 세션 아이디를 탈취 후 쿠키값을 관리자의 세션아이디로 변경하여 관리자 권한으로 이용(악용)할 수 있기 때문이다.

이에 대한 예방법으로, 세션에 로그인 했을 때의 IP를 저장한다. 페이지 이동 시마다, 현재 IP와 세션의 IP/브라우저 정보(UserAgent)가 같은지 검사하는 방법을 사용할 수 있다.

🪐 세션 사용하는 예시

로그인 한 정보들


⛵ (웹)캐시

캐시는, 웹 페이지 브라우저에 보여지는 (서버로부터 전달 받은) 각종 이미지, 동영상, UI 등의 데이터가 사용자의 컴퓨터에 저장되며, 이것을 캐시라 한다.
이러한 데이터들은, 서버(NAVER라면 NAVER서버)에서 내 개인PC로 전송되는 데이터의 일종이라고 할 수 있다.
이러한 데이터들을 매번 서버에서 전송해주는 것은 일정 수준의 부하를 요구하기 때문에, 사용자가 웹 페이지에 접속했을 때 사용자의 컴퓨터에 캐시라는 저장 공간을 따로 마련하여 해당 웹페이지의 데이터(서버로부터 받은 데이터)들을 해당 저장 공간에 저장해두는 것이다.

이후 사용자가 웹 페이지를 열 때마다 서버가 아니라 캐시에 저장되어 있는 데이터를 사용하는 것이다. 물리적으로 캐시에서 데이터를 가져오는 게 서버에서 가져오는 것보다 훨씬 빠르기 때문에 성능 향상에 이점이 있다.

❗ 서버에서받은 데이터를 로컬에 저장하는 파일이라는 점에서 쿠키캐시는 비슷할 수 있다 (데이터 저장 위치 동일). 하지만 목적성에 차이가 있다.

캐시는 서버로부터 받아오는 데이터 중, 재사용 될 것 같거나 용량이 큰 데이터(리소스)를 로컬에 임시로 저장해두어서 렌더링 속도를 높이는 것이 목적이다.
반면 쿠키는 '로그인 정보' 같이 사용자가 굳이 다시 서버에 재요청하기에는 비효율적인 정보를 로컬에 저장해둠으로서 생산성을 높이는 것이 목적이다. (다시 서버에 request 할 필요가 없도록)

세션쿠키와 같은 목적성을 가졌지만, 데이터 저장 위치만 다른 개념이다.
서버에서 사용자의 인증상태 (로그인 여부 등) 을 임시로 저장한 파일로서, 쿠키 처럼 임시로 유저의 정보를 저장해둠으로서 생산성을 높이는 것이 목적이다.

세션은 서버에 저장해두기 때문에 쿠키보다 보안이 우수하지만, 쿠키보다 다소 느리고 사용자정보가 많으면 메모리 과부하가 생길 수 있다. 서버에서 관리하기 때문에 로그관리 용이하다.

👆 웹 개발 시 어떤 정보를 쿠키로 저장할 지, 세션으로 저장할 지 적절히 판단하는 것이 중요하다.


🎃 쿠키(브라우저 저장) & 세션(서버 저장)을 사용하게 된 배경

쿠키와 세션을 사용하게 된 배경은 HTTP 특징과 연관이 있다.

🏈 HTTP 특징
(1) Stateless 프로토콜
클라이언트의 상태 정보를 가지지 않는 서버 처리 방식이다. 클라이언트와 첫번째 통신에서 데이터를 주고 받았다 해도, 두번째 통신에서 이전 데이터를 유지하지 않는다.

(2) Connectionless 프로토콜
클라이언트가 서버에 요청(Request)을 했을 때,그 요청에 맞는 응답(Response)을 보낸 후 연결을 끊는 처리방식이다. (일회성)

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

위와 같은 특징에도 불구하고 실제로는 데이터 유지가 필요한 경우가 많다.

정보가 유지되지 않으면, 매번 페이지를 이동할 때마다 로그인을 다시 하거나, 상품을 선택했는데 구매 페이지에서 선택한 상품의 정보가 없거나 하는 등의 일이 발생할 수 있다.

따라서, Stateful 경우를 대처하기 위해서 쿠키와 세션을 사용한다(데이터 저장 - 유지 기능).

profile
boma91@gmail.com

0개의 댓글