[TIL]WEB/HTTP : 쿠키 & 세션 &캐시

은경·2022년 1월 7일
0

[WEB/HTTP]

목록 보기
1/7



🔍쿠키 / 세션 / 캐시를 사용하는 이유


📌 HTTP 프로토콜의 약점 또는 특징을 보완하기 위해 사용


🔍 HTTP의 특징


  1. Connectionless 프로토콜 (비연결지향)
  • HTTP는 클라이언트가 서버에 요청(Request)을 보내고, 서버는 클라이언트에게 응답(Response)을 보낸 후 연결(Connection)을 끊는 특성을 가짐.

    • HTTP1.1 버전에서는 커넥션을 계속 유지하고 요청에 재활용 하는 기능 추가
    • HTTP Header에 Keep-alive 옵션을 주어 커넥션 재활용 (1.1버전 default 옵션)
  1. Stateless 프로토콜 (상태없음)
  • 커넥션을 끊는 순간 클라이언트-서버간의 통신이 끝나고 상태 정보는 유지하지 않는 특성.
    • 첫번째 통신에서 주고받은 데이터가 두번째 통신에선 유지되지 않는다.

💡 보완


비연결지향이라는 커넥션을 유지하지않는 특성 때문에 서버 리소스 낭비가 줄어드는 것은 장점이지만, 실제로는 데이터 유지가 필요한 경우가 많다.
HTTP는 이 두가지 특성을 보완하기 위해서 쿠키와 세션을 사용하게 되었다.

커넥션이 유지되지 않으면, 페이지를 이동할 때마다 로그인을 다시하고,
장바구니에 아무리 상품을 담아도 구매페이지에는 저장이 되지않을 수 있다.



1-1 . 쿠키의 특징

  • 사용자의 브라우저(Local)에 저장된다 (서버에서 클라이언트에 제공)
  • 통신시 HTTP 헤더에 포함되는 작은 텍스트 데이터 파일이다.
  • HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장했다가 요청(Request)시 정보를 참조하거나 재사용할 수 있다.
  • 이름 , 값 만료기간, 경로정보, 키(key), 값(value) 으로 구성.
  • 클라이언트에 총 300개의 쿠키 저장 가능.
  • 하나의 도메인 당 20개의 쿠키를 가질 수 있음.

1-2. 쿠키의 종류

구분세션쿠키(Session Cookie)지속쿠키(Persistent Cookie)
만료 기간정하지 않았을 때지정했을 때
브라우저 종료시쿠키는 사라짐쿠키는 남아있음
저장 위치메모리파일
보안성보안에 유리함보안에 취약함

1-3. 쿠키의 통신 Process

(최초 접속시)

  • 사용자가 웹 사이트에 접속 -> 클라이언트가 페이지를 요청(Request)
  • 서버가 받은 Request Header에 쿠키가 없음을 판별하고 쿠키 생성
  • 요청받은 페이지를 응답(Response)하면서 클라이언트에게 (아까 생성한) 정보가 저장된 쿠키를 함께 돌려줌.
  • 클라이언트는 받은 쿠키를 브라우저(Local)에 저장.
  • 클라이언트가 동일 서버에 페이지를 재 요청시 받았던 쿠키 정보도 같이 HTTP 헤더에 담아서 요청한다.

    사용자의 별도 요청이 없어도 자동으로 헤더에 쿠키를 넣어서 요청한다.
    또한, 모든 요청에 그 많은 쿠키값을 넣도록 비효율적으로 동작 하지않음.
    도메인 설정을 통해 지정한 도메인으로 요청할 때만 쿠키 값이 제공되도록 할 수 있다.


이미지 출처 : 개발왕, 도던 - Git Book

1-4. 쿠키 사용 예시

📌 
  위시리스트 저장
  팝업 보지 않기(오늘 하루 이 창을 다시보지 않기) 
  쇼핑몰의 장바구니 / 위시리스트 (비 로그인 상태에서  장바구니에 담은 품목이 로그인 이후에도 유지되는 등)

2. 세션 (Session) 🔗


서버(Server)에 클라이언트의 상태 정보를 저장하는 기술로 논리적인 연결
세션이라고 한다. (특정 접속자 식별 도구)

2-1. 세션의 특징

  • 브라우저를 종료할 때까지 유지 된다.
  • 사용자 로컬이 아닌 해당 웹사이트의 서버에 직접 저장되므로 보안성이 높다.
  • 저장 데이터에 제한이 없다.
  • 각 클라이언트에 고유 세션ID를 부여한다. 그 세션ID에 대응하는 클라이언트의 브라우저에 쿠키를 만들어 구분하고 해당 요구에 맞는 서비스를 제공한다.

2-2. 세션의 통신 Process

  • 클라이언트가 웹사이트에 접근, 페이지에 요청
  • 서버는 접근한 클라이언트의 요청 헤더에 쿠키를 확인하고 클라이언트가 해당 세션ID를 보냈는지 확인
  • 세션ID가 존재하지 않는다면 서버는 세션ID를 생성해 클라이언트에게 돌려줌.
  • 클라이언트는 발급받은 세션ID를 쿠키로 저장.
  • 클라이언트가 다시 페이지에 접속할 때, 쿠키에 저장된 세션ID를 서버에 전달-> 서버가 쿠키 정보에 담긴 ID로 클라이언트를 판별.

    이미지 출처 : 개발왕, 도던 - Git Book

2-3. 세션 사용 예시

📌 
  로그인 정보 유지 (은행의 경우 n초 뒤에 사이트에서 자동으로 로그아웃 됩니다.)
  로그인 후 웹사이트에서 오래 동작하지 않을 시 세션 만료로 자동 로그아웃 
  

🔍 쿠키와 세션 비교

쿠키세션
정보저장위치로컬, 서버의 자원 사용 X서버
보안약함 (변질, 요청/응답 시 스니핑 우려)뛰어남 (ID만 저장하고 서버에서 처리함)
라이프사이클만료기간 지정, 브라우저 종료시에도 유지브라우저 종료시 삭제
속도쿠키에 정보가 있어서 속도가 빠름서버에 정보가 있어서 처리가 필요해 속도가 노림

보안상 취약한 쿠키를 사용하는 이유는 ❓

👉 서버 성능에 부담을 주지 않기 위해서.


3. 캐시(Cache) 💾


캐시는 리소스 파일들(CSS, JS, 이미지, 비디오)의 임시 저장소이다.
웹 페이지를 빠르게 렌더링 할 수 있도록 웹 페이지 요소들을 임시 저장.
같은 웹 페이지에 접속할 때 사용자의 PC에서 로드하므로 서버를 거치지 않고 빠르게 불러올 수 있다.

  • 장점 : 트래픽 절감, 로딩속도가 빠르다.
  • 단점 : 저장공간이 작다, 비용이 비싸다.
  • CPU가 참조하려는 메모리가 캐시에 존재하고 있는 경우를 캐시 히트(Cache Hit)라고 하며
  • 메모리에 캐시가 존재하지 않는 경우를 캐시 미스(Cache Miss)라고 한다

📌캐시의 동작 원리 이해에 도움이 되는 링크



참고 자료(References)


https://dev-coco.tistory.com/61
https://ryusae.tistory.com/7
https://jeong-pro.tistory.com/80
https://homzzang.com/b/free-1208
https://dodeon.gitbook.io/study/kimyounghan-http-basic/07-http-header/cookie
👇 이해를 쉽게 돕는 참고하면 좋을 영상
https://www.youtube.com/watch?v=OpoVuwxGRDI

profile
Python 서버 개발자

0개의 댓글