내가 만든 쿠키
~

서버는 요청을 처리하고, 새로운 세션 생성.
이때 생성된 세션 ID를 응답 헤더의 Set-Cookie 로 클라이언트에게 전달함.
Set-Cookie: sessionID=abc123
클라이언트는 해당 쿠키를 브라우저에 저장.
클라이언트가 다음 요청을 보낼 때, 브라우저는 자동으로 저장된 쿠키(sessionID) 를 함께 전송함.
Cookie: sessionID=abc123
| 단계 | 방향 | 설명 |
|---|---|---|
| ① | Client → Server | 첫 요청 (세션 없음) |
| ② | Server → Client | Set-Cookie 로 세션 ID 전달 |
| ③ | Client → Server | 저장된 세션 ID를 Cookie로 전송 |
| ④ | Server | 세션 ID 기반으로 동일 클라이언트 식별 및 응답 |
서버는 쿠키 안의 세션 ID를 통해 “누가 요청했는가”를 구분한다.
(Set-Cookie로 ID 발급 → 이후Cookie로 인증 유지)

서버는 응답을 보내면서, 쿠키를 설정(Set-Cookie) 함.
응답 헤더 예시:
Set-Cookie: name=value
Set-Cookie: user=hoil
브라우저(클라이언트)는 이 정보를 저장함.
즉, 로컬의 쿠키 테이블(cookie table) 에
key = name, value = value 형태로 저장.
이후 같은 서버에 다시 요청할 때,
브라우저는 자동으로 저장된 쿠키를 함께 전송함.
Cookie: name=value; user=hoil;
이렇게 하면 서버는 클라이언트를 식별하거나 상태를 유지할 수 있음.
| 단계 | 방향 | 주요 동작 | 설명 |
|---|---|---|---|
| ① | Client → Server | 요청 | 최초 요청 (쿠키 없음) |
| ② | Server → Client | 응답 + Set-Cookie | 서버가 쿠키를 클라이언트에 전달 |
| ③ | Client → Server | 요청 + Cookie | 브라우저가 저장된 쿠키를 자동 전송 |
쿠키(Cookie) 는 서버가 브라우저에 저장시키는 작은 데이터로,
이후 요청 시 자동으로 포함되어 클라이언트를 식별하거나
세션 상태를 유지하는 역할을 한다.
//클라이언트가 보낸 쿠키들 중에서 세션 id가 있는지 확인한다.
List<Cookie> cookies = request2.allCookies().get(MYAPP_SESSION_ID);
if (cookies != null) {
//세션 id가 있으면 이 값을 가지고 클라이언트를 구분한다.
sessionId = cookies.get(0).value();
} else {
//세션 id가 없으면 이 클라이언트를 구분하기 위해 새 세션id를 발급한다.
sessionId = UUID.randomUUID().toString();
firstVisit = true;
}
if (firstVisit) {
//세션 id가 없는 클라이언트를 위해 새로 발급한 세션 id를 쿠키로 보낸다
// 웹 브라우저는 이 값을 내부 메모리에 저장할 것이다.
response.addCookie(new DefaultCookie(MYAPP_SESSION_ID, sessionId));
}

참고
- 쿠키 차단하면 로그인 불가하다!!
요약! 그럼 쿠키는 왜 구울까?
- Client 세션을 알아내기위해!
Connection-oriented
: TCP = 연결후 통신 (telnet,ftp,http,smtp)
- stateful : 요청 응답 반복!
- stateless 요청 응답 끊기!
Connectionless
: UDP = 연결 없이 통신 (ping, 방송)
