Cookie(쿠키) / Session(세션)

이예서·2023년 7월 28일
1

CS 스터디

목록 보기
3/6
post-thumbnail
post-custom-banner

Cookie(쿠키)

  • 웹 사이트에 접속할 때 서버에 의해 사용자의 컴퓨터(브라우저)에 저장되는 정보
  • <이름>=<값> 형태의 단순한 문자열
  • 유실, 변조, 도난 등 보안에 취약하여 개인정보 등은 저장해서는 안됨

쿠키를 다루는 방법

  • HTTP 메시지의 헤더(header) 영역을 통해서 송/수신
  • Set-Cookie:user=홍길동 서버에서 클라이언트로 쿠키 전달(응답)
  • Cookie:user=홍길동; 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달

Set-Cookie (HTTP Response)

Cookie (HTTP Request)


쿠키를 사용하는 이유

  • HTTP는 무상태(Stateless) 비연결지향(Connectionless) 프로토콜
  • 클라이언트와 서버가 요청과 응답을 주고 받으면 연결이 끊어지고, 다시 요청할 때 서버는 이전 요청을 기억하지 못함
  • 사용자 로그인 세션 관리, 장바구니, 광고 정보 트래킹(서드파티 쿠키) 등으로 활용

쿠키의 속성

생명주기 - expires, max-ages

  • expires (만료일이 되면 쿠키 삭제)
    • Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
  • max-ages (지정 시간이 지나면 쿠키 삭제)
    • Set-Cookie: max-age=3600 (3600초)
  • expires나 max-ages를 통해 만료 시점을 관리하는 쿠키를 영속쿠키 / 그렇지 않은 쿠키를 세션쿠키라고 하며, 세션 쿠키는 브라우저 종료시 삭제되고 영속 쿠키는 브라우저 종료에도 유지

도메인 - domain

  • 명시: 명시한 문서 기준 도메인 + 서브 도메인 포함
    • domain=example.org → dev.example.org도 쿠키 접근 가능
  • 생략: 현재 문서 기준 도메인만 적용
    • 현재 문서인 example.org에서만 쿠키 접근 가능

경로 - path

  • 이 경로를 포함한 하위 경로 페이지만 쿠키 접근
    • path=/home → /home/* 가능
    • path=/ → (루트 경로 지정: 모든 요청에 쿠키 전달)

보안 - Secure, HttpOnly, SameSite

  • Secure
    • https인 경우에만 전송 (http X)
  • HttpOnly
    • XSS 공격 방지
    • 자바스크립트에서 접근 불가
  • SameSite
    • CSRF(XSRF) 공격 방지
    • 요청 도메인과 쿠키에 설정된 도메인이 같은 경우(= 퍼스트 파티 쿠키)만 전송
    • NoneLaxStrict 세 가지 옵션(정책)

Session(세션)

  • 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법
  • 일정 시간동안 같은 브라우저로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술
  • 서비스가 돌아가는 서버 측에 데이터를 저장하고, 세션의 키값만을 클라이언트 측에 남겨둠
  • 브라우저는 필요할 때마다 이 키값을 이용하여 서버에 저장된 데이터를 사용

세션을 다루는 방법

session-create
session-read


세션을 사용하는 이유

  • 쿠키를 통해 세션 ID만 노출시키고 개인정보나 민감한 데이터를 노출시키지 않음
  • 보안에 취약한 쿠키를 보완해주는 역할
  • 매 요청마다 전송하는 쿠키의 크기가 커지면 상당한 트래픽을 유발할 수 있음

다중 서버 환경에서의 세션 관리

  • 세션에 대한 처리가 없는 로드 밸런싱(Load Balancing) 환경
    • 데이터 불일치(정합성)
    • ex) A 유저가 1번 서버에서 로그인 한 뒤 2번 서버에 요청을 보내면 2번 서버에는 세션 정보가 없어 실패한다.
  • 스티키 세션(Sticky Session)
    • 장애 발생시 세션 유실(가용성)
    • 하나의 서버로 요청이 몰릴 수 있음
    • 분산 환경을 완벽히 사용할 수 없음
  • 세션 클러스터링(Session Clustering)
    • all-to-all Session Replication
      • 모든 세션이 동일한 데이터를 가질 수 있도록 복사
      • 세션 수가 늘어날 수록 불필요한 메모리 사용이 늘고 성능 저하 발생
    • primary-secondary Session Replication
      • primary node/ backup(secondary) node / 나머지 proxy node 들로 구성
      • primary node의 세션 데이터는 오직 backup node에만 저장
      • proxy는 주소값만 들고있어 해당 주소로 세션 데이터 요청
      • primary node가 다운되어도 backup node로부터 데이터를 복사해서 가져온 뒤 해당 노드가 primary로 승격
      • 대용량 트래픽은 빈번한 데이터 복사를 발생시켜 성능 저하 발생할 수 있음
  • 세션 스토리지(Session Storage)
    • Disk based vs In-Memory
      • 데이터의 영속성(permanence), 내구성(dutability) vs 빠른 응답시간
      • 세션은 빠른 응답이 더 중요할 수 있음
    • Redis
      • Key-Value
      • Replication(Master-Slave, failover)을 통한 장애 극복

출처

더 알아보기

profile
https://ohge.tistory.com/
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 7월 28일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기