
Cookie는 웹 서버가 클라이언트(웹 브라우저)에게 응답할 때 추가적인 헤더 정보를 저장, 이후 클라이언트가 서버에 요청할 때 이 정보를 함께 전달하는 메커니즘.
이를 통해 웹 서버는 같은 클라이언트에서 온 요청임을 식별할 수 있음.
비유: 놀이공원의 재입장 팔찌처럼, 클라이언트를 식별하여 추가 인증 없이도 연속적인 서비스 제공이 가능.
Set-Cookie 헤더를 통해 어떤 데이터를 쿠키로 쓸것인지, 유효시간 및 보안설정을 서버에서 설정하여 제어하는것
예) 웹 브라우저 내 저장되어있는 쿠키 리스트
a.com, Path: /)a.com, Path: /user)b.com, Path: /hello)c.com, Path: /world)예) 위 리스트 기반으로 아래 웹 서버에 대한 요청에 따라 전송되는 쿠키 예
a.com/user/name 호출 시 1번 쿠키 + 2번 쿠키 전송a.com/ 호출 시 1번 쿠키 전송b.com/hello 호출 시 3번 쿠키 전송c.com/ 호출 시 어떤 쿠키도 전송하지 않음Cookie 유효 시간 (MaxAge / Expires)
명시 되어 있다면 : Persistent Cookie(지속쿠키) -> 유효 기간이 설정된 쿠키로, MaxAge나 Expires 속성을 설정하여 브라우저 종료 후에도 유지됨.
명시되어 있지 않다면 : Session Cookie(세션쿠키) -> 유효 기간이 설정되지 않은 쿠키로, 브라우저 종료 시 삭제됨.
보안 설정
HttpOnly: 클라이언트 측 JavaScript를 통해 쿠키에 접근하지 못하도록 설정합니다. (XSS 공격 예방)
Set-Cookie: sessionId=abc123; HttpOnly;
Secure: HTTPS 연결에서만 쿠키 전송. (패킷탈취인 MITM 방지)
Set-Cookie: sessionId=abc123; Secure;
SameSite: 쿠키의 크로스 사이트 요청 제한을 설정(CSRF 공격 예방)
Set-Cookie: sessionId=abc123; SameSite=Strict;
Session은 정보를 웹 서버측에 저장하다보니
민감 정보들이 웹 서버측에 안정하게 저장되고
웹 브라우저간 공유 가능 : 여러 웹 브라우저를 돌아다니며 행동해도 모두 서버에 중앙 기록된다.
Session은 정보를 웹 서버측에 저장하는것이기에, 아무리 많은 정보를 저장하더라도 요청을 방해하지 X(쿠키가 방해받지 않는다)
사용자가 로그인 요청
사용자가 ID와 비밀번호를 입력하고, 서버에 로그인 요청을 보냅니다.
서버가 인증 정보를 검증
서버는 데이터베이스(DB) 등에서 사용자의 인증 정보를 확인하고, 인증에 성공하면 세션 생성 및 세션 ID 발급.
서버가 쿠키를 설정
서버는 세션 ID를 클라이언트로 반환하면서 HTTP 응답 헤더에 Set-Cookie를 포함해 쿠키를 설정합니다.
클라이언트가 쿠키 저장
브라우저는 서버에서 전달받은 쿠키를 저장하며, 이후 같은 도메인에 요청을 보낼 때 쿠키를 자동으로 포함합니다.
다음 요청에서 쿠키로 인증
사용자가 인증이 필요한 리소스에 접근할 때 브라우저는 저장된 쿠키를 요청 헤더에 자동으로 추가.
서버는 요청에 포함된 세션 ID를 확인해 사용자의 인증 상태를 확인합니다.
서버의 인증 처리 및 응답
서버는 세션 ID를 검증하고, 유효하다면 요청한 리소스를 제공.
유효하지 않다면, 인증 오류(401 Unauthorized) 응답을 반환