본문 바로가기

WEB

쿠키와 웹 캐시

쿠키 (Cookie)

  • 서버가 웹 브라우저에 이용자의 상태를 유지하기 위해 정보를 저장
  • 사용자 인증 목적

image

  • HTTP는 무상태(Stateless) 프로토콜 - 클라이언트와 서버가 요청과 응답을 주고 받으면 연결 해제
  • 그 다음 요청에 서버는 이전 요청을 기억하지 못함

image

  • 쿠키 저장소에 쿠키가 저장되면 모든 요청에 쿠키 정보 자동 포함
  • 그러나 모든 요청에 쿠키를 포함하게 되면 보안 상의 문제를 일으킬 수 있으므로 이를 제약하는 방법이 존재

사용

set-cookie: sessionId=abcde1234; expires=Thu, 26-Dec-2024 00:00:00 GMT; path=/; domain=.google.com; Secure
  • 사용자 로그인 세션 관리, 광고 정보 트래킹에 많이 사용
  • 쿠키 정보는 항상 서버에 전송됨
    • 네트워크 트래픽을 추가 유발하여 최소한의 정보만 사용하는 것이 중요(세션 id, 인증 토큰)
    • 서버에 전송하지 않고 웹브라우저 내부에 데이터를 저장하고 싶으면 웹 스토리지(localStorage, sessionStorage) 참고
  • 보안에 민감한 데이터는 저장하면 안 됨

생명주기 (Expires, max-age)

  • Set-Cookie: expires=Thu, 26-Dec-2024 00:00:00 GMT
    • 만료일이 되면 쿠키 삭제
  • Set-Cookie: max-age=3600 (3600초)
    • 0이나 음수를 지정하면 쿠키 삭제
  • 세션 쿠키 만료 날짜를 생략하면 브라우저 종료시까지만 유지
  • 영속 쿠키 만료 날짜를 입력하면 해당 날짜까지 유지

도메인 지정

domain=example.org

  • 명시 명시한 문서 기준 도메인 + 서브 도메인 포함
    • domain=example.org 지정해서 쿠키 생성시 example.org 는 물론 dev.example.org도 쿠키 접근
  • 생략 현재 문서 기준 도메인만 적용
    • example.org 에서 쿠키를 생성하지만 domain 지정은 생략할 경우 example.org 에서만 쿠키 접근이 가능하고 dev.example.org와 같은 서브도메인은 쿠키 미접근

쿠키의 경로(Path) 지정

path=/home

  • 해당 경로를 포함한 하위 경로 페이지에서만 쿠키 접근
  • 일반적으로 path=/ 루트로 지정

쿠키의 보안 지정

  1. Secure
    • 쿠키는 http, https를 구분하지 않고 전송되나 Secure을 적용하면 https인 경우에만 전송
  2. HttpOnly
    • XSS 공격 방지
    • 자바스크립트에서 접근 불가(document.cookie)
    • HTTP 전송에만 사용
  3. SameSite
    • XSRF 공격 방지
    • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우에만 쿠키 전송

캐시

  • 웹 페이지 요소들을 저장하는 임시 저장소
  • 특히 후에 필요할 것 같은 요소들, 이미지 파일 등
  • 웹 페이지를 빠르게 렌더링하는 목적

캐시 적용 전

image

  • 동일한 데이터에 대해서도 계속 네트워크를 통해 다운로드 받아야 함
  • 네트워크는 매우 느리고 비용이 비쌈
  • 브라우저 로딩 속도가 느려 느린 사용자 경험을 유발

캐시 적용 후

image

  • 캐시 유효 시간동안 네트워크를 사용할 필요가 없어져 비싼 네트워크 사용량을 줄임
  • 브라우저가 로딩 속도가 빨라져 빠른 사용자 경험 제공

캐시 유효 시간 초과 시

image

  • 캐시 유효시간이 초과되면 서버를 통해 다시 데이터를 조회하고 캐시를 갱신
  • 이 때 다시 네트워크 다운로드가 발생