💠기타/컴퓨터 과학 (CS)

[HTTP] 쿠키와 세션은 무엇일까 ??

2025. 3. 5. 00:06
728x90

 

쿠키

클라이언트에 저장되는 작은 데이터 조각

 

1. 서버가 Set-Cookie 헤더를 통해 클라이언트에게 전달

2. 클라이언트는 쿠키 저장소에 해당 쿠키를 저장한 후, 요청마다 자동으로 포함하여 서버로 전달

 

사용처

- 사용자 로그인 세션 관리

- 사용자 설정 저장

- 광고 정보 트래킹

 

특징

- 네트워크 트래픽 추가 유발

- 최소한의 정보만 사용 (세션 id, 인증 토큰)

- 보안에 민감한 데이터는 저장하면 안 됨

 

> 참고 <

- 민감한 데이터는 세션 저장소 또는 토큰(JWT 등)을 사용한다.


종류

- `세션 쿠키` :생명주기 설정 없고 브라우저 종료 시 쿠키 삭제

- `영속 쿠키` : 생명주기 설정까지 유지되고 쿠키 삭제

 

생명주기 설정

- `max-age` : 0 이나 음수를 지정하면 쿠키 삭제

- `expires` : 만료일이 되면 쿠키 삭제

max-age 가 expires 보다 우선 적용

 

도메인 설정

- domain 명시 : 명시한 문서 기준 도메인 + 서브 도메인에서 쿠키 접근 가능

- domain 생략 : 현재 문서 기준 도메인에서만 쿠키 접근 가능

 

경로 설정

- 해당 경로를 포함한 하위 경로 페이지만 쿠키 접근 가능

- 일반적으로 path=/ 루트로 지정

 

보안 설정

- `Secure` 적용

  : HTTP 에서는 전송되지 않고, HTTPS 인 경우에만 쿠키 전송

  : 로그인 세션 쿠키에 필수 적용

- `HttpOnly` 적용

  : XSS 공격 방지

  : 자바스크립트에서 접근 불가 

- `SameSite` 적용

  : XSRF 공격 방지

  : 요청 도메인과 쿠키에 설정된 도메인이 같은 경우만 쿠키 전송

 

캐시

클라이언트 또는 프록시 서버에 데이터를 저장하여 성능을 최적화하는 매커니즘

 

1. 서버가 cache-control 헤더를 통해 클라이언트에게 전달

2. 클라이언트는 브라우저 캐시에 응답 결과를 저장한 후, 요청마다 캐시에서 조회하여 사용

 

특징

- 네트워크 사용량 감소

- 브라우저 로딩 속도 최적화

- 서버 부하 감소

 

검증 헤더

- 캐시 데이터와 서버 데이터가 동일한지 확인하는 역할

헤더 설명 장점 / 단점
`Last-Modified` 데이터의 최종 수정일 제공 해시 생성 비용 X
/
1초 미만 단위 조정 불가능
수정 날짜만 다를 수도 있음
`ETag` 데이터의 고유한 해시 값(버전 ID) 제공 서버에서 별도의 캐시 로직 관리
클라이언트는 ETag 값만 서버에 제공
/
해시 생성 비용 O

 

조건부 요청 헤더

- 클라이언트가 캐시 된 데이터를 사용할 수 있는지 서버에 요청

- 캐시된 데이터가 최신 버전이면 304 (Not Modified) 응답 (Body 없이 헤더만 전송)

헤더 설명 동작 방식
`If-Modified-Since` `Last-Modified` 기반으로 캐시 검증 최종 수정일이 같다면 `304 (Not Modified)` 반환
`If-None-Match` `ETag` 기반으로 캐시 검증 ETag 값이 같다면 `304 (Not Modified)` 반환

 

1. 클라이언트 요청 시

  > 서버에서 `Last-Modified` or `ETag` 제공

2. 다음 요청에서

  > 클라이언트가 `If-Modified-Since` or `If-None-Match` 를 포함하여 요청

3. 서버 검증 후 응답

  > 데이터 변경 X : `304 (Not Modified)` 캐시 재사용

  > 데이터 변경 O : `200 (OK)` 새 데이터 전송

 

실무에서는 `ETag` 를 더 일반적으로 사용한다.

하지만 해시 생성 비용이 부담되는 경우 `Last-Modified` 를 사용한다.


프록시 캐시

- 웹 브라우저와 ORIGIN 서버와의 거리 단축을 위해 만들어진 서버

- 반복되는 요청을 원본 서버까지 전달하지 않음

 

캐시 저장 위치에 따라 두 가지로 나뉜다.

`Private Cache` : 사용자 개인 PC 브라우저에 저장

`Public Cache` : 프록시 서버에서 여러 사용자가 공유

 

캐시 무효화

명확한 캐시 비활성화 응답 헤더

Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache // HTTP/1 하위 호환

 

Cache-Control 설정

- `max-age` : 캐시 유효 시간 (초)

- `no-cache` : 캐시 가능하지만, 항상 ORIGIN 서버에 검증하고 사용

- `no-store` : 민감한 정보가 있으므로 저장하면 안 됨

  (메모리에서 사용하고 최대한 빨리 삭제)

- `must-revalidate`

  : 만료 후 최초 조회 시 ORIGIN 서버에 검증하고 사용

  : ORIGIN 서버 접근 실패 시 오류 발생 504 (Gateway Timeout)

- `public` : 응답이 프록시 캐시에 저장 가능

- `private` : 응답이 사용자 개인 브라우저 캐시에만 저장 가능 (기본값)

 

 

 

 

 

 

 

 

 

 

 

출처 | HTTP 웹 기본 지식(김영한) - 인프런

728x90