HTTP - 쿠키 / 세션 / 캐시

이유석·2022년 5월 4일
0

CS - Network

목록 보기
7/8
post-thumbnail

HTTP의 특징

1) Stateless 프로토콜

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

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

2) Connectionless 프로토콜

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

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

하지만, 실제로는 데이터 유지가 필요한 경우가 많다.

  • ex-1) 정보가 유지되지 않으면, 매번 페이지를 이동할 때마다 로그인을 다시 해야한다.
  • ex-2) 상품을 선택했는데 구매 페이지에서 선택한 상품의 정보가 없을 수 있다.

따라서, Stateful 경우를 대처하기 위해서 쿠키와 세션을 사용한다.

  • 쿠키와 세션의 차이점은 크게 상태 정보의 저장 위치이다.
    • 쿠키 : 클라이언트 (=로컬, 사용자 브라우저)에 저장한다.
    • 세션 : 서버에 저장한다.

정의

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

특징

  • 키와 값으로 구성되어 있다.
    • 이름, 값, 만료기간(지정 가능), 경로 등에 대한 정보가 포함되어 있다.
  • 보안성이 낮다.
    • 해당 사용자의 컴퓨터를 사용한다면, 누구나 쿠키에 입력된 값을 쉽게 확인 가능하다.

쿠키 통신 방법

  1. 최초 통신에서는 쿠키 값이 없으므로, 일단 클라이언트는 Request를 서버에게 전송한다.
  2. 서버에서 클라이언트의 Request에 쿠키 값이 없는 것을 판별한다.
    쿠키 값이 없다면, 통신상태(UserID, Password, 조작 상태, 방문횟수 등)를 저장한 쿠키를 Response에 담아 클라이언트에게 전송한다.
  3. 클라이언트의 브라우저는 서버로부터 받은 쿠키를 생성 / 보존한다.
  4. 두번째 연결부터. HTTP Header에 쿠키를 담긴 Request를 서버에게 전송한다.

쿠키 제약 조건

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

쿠키 사용 예시

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

Session (세션)

정의

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

특징

  • 브라우저를 종료할 때 까지 유지된다.
  • 보안성이 비교적 높다.
    • 서버에 직접 저장되므로, 세션 내의 데이터를 탈취하는 것이 어렵다.

세션 통신 방법

  1. 클라이언트가 서버에 접속 시, 세션 ID를 발급한다.
  2. 서버에서는 클라이언트에게 발급해준 세션 ID를 클라이언트의 쿠키에 저장한다.
  3. 클라이언트가 다시 페이지에 접속할 때, 세션 ID가 담긴 쿠키를 HTTP Header에 담아 서버에 Request를 전송한다.
  4. 서버는 Request Header에 담긴 쿠키 정보(세션 ID)로 클라이언트를 판별한다.
  • 세션 ID를 클라이언트와 주고 받을때, 주로 쿠키를 이용하는 경우가 많다.

세션 ID 보안의 취약점

  • 관리자의 세션 ID를 탈취할 수 있으면
    • 해당 사이트와 통신할 때, 쿠키의 세션 ID에 관리자의 세션 ID를 담을 수 있다.
    • 즉, 관리자 권한으로 이용할 수 있다.
  • 예방법
    • 세션에 로그인 했을 때의 IP를 저장한다.
    • 페이지 이동 시마다, 현재 IP와 세션의 IP/브라우저 정보(User Agent)가 같은지 검사한다.

사용 예시

  • 로그인 정보 유지

쿠키 vs 세션

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

Cache (캐시)

정의

  • 리소스 파일들의 임시 저장소이다.

  • client가 요청한 html, image, js, css 등의 첫 요청 시에 파일을 내려받아 특정 위치에 저장하고, 이후 동일한 URL의 Resource 요청시 해당 자료를 다시 내려받지 않고 내부에 저장한 파일을 사용하여 더 빠르게 제공한다.

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

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

Cache Hit (캐시 히트)

  • CPU가 참조하고자 하는 메모리가 Cache에 존재하고 있는 경우

Cache Miss (캐시 미스)

  • CPU가 참조하고자 하는 메모리가 Cache에 존재하지 않은 경우
profile
https://github.com/yuseogi0218

0개의 댓글