[네이버클라우드캠프] - Cookie*

liho·2023년 8월 3일
0

내가 만든 쿠키~

Cokie

  • HTTP 서버가 HTTP Client에 Key=value 형태로 보관시키는 값!
  • HTTP Client는 요청할 때 마다 Cookie를 받은 Server로 다시 전달

🍪 HTTP Client & Session — 쿠키를 이용한 클라이언트 구분 과정 요약

1️⃣ 최초 요청 (클라이언트 → 서버)

  • 클라이언트가 서버에 첫 요청을 보냄.
  • 아직 세션 ID(Session ID) 가 없음.

2️⃣ 서버 응답 (서버 → 클라이언트)

  • 서버는 요청을 처리하고, 새로운 세션 생성.

  • 이때 생성된 세션 ID를 응답 헤더의 Set-Cookie 로 클라이언트에게 전달함.

    Set-Cookie: sessionID=abc123
  • 클라이언트는 해당 쿠키를 브라우저에 저장.


3️⃣ 이후 요청 (클라이언트 → 서버)

  • 클라이언트가 다음 요청을 보낼 때, 브라우저는 자동으로 저장된 쿠키(sessionID) 를 함께 전송함.

    Cookie: sessionID=abc123

4️⃣ 서버의 세션 식별

  • 서버는 요청 헤더에 포함된 세션 ID를 식별하여
    같은 클라이언트의 이전 상태(로그인 정보, 장바구니 등)를 유지함.
  • 즉, 쿠키의 세션 ID를 기준으로 동일 클라이언트를 구분.

🧩 핵심 요약

단계방향설명
Client → Server첫 요청 (세션 없음)
Server → ClientSet-Cookie 로 세션 ID 전달
Client → Server저장된 세션 ID를 Cookie로 전송
Server세션 ID 기반으로 동일 클라이언트 식별 및 응답

💡 한 줄 요약

서버는 쿠키 안의 세션 ID를 통해 “누가 요청했는가”를 구분한다.
(Set-Cookie로 ID 발급 → 이후 Cookie로 인증 유지)


1️⃣ 클라이언트 → 서버 : 요청 (Request)

  • 클라이언트가 서버에 HTTP 요청을 보냄.
  • 이때는 아직 쿠키 정보가 없음 (최초 요청).

2️⃣ 서버 → 클라이언트 : 응답 (Response)

  • 서버는 응답을 보내면서, 쿠키를 설정(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));
    }
  • 정상적인 세션id를 발급된 쿠키가 등록이 된 사진

참고

  • 쿠키 차단하면 로그인 불가하다!!

요약! 그럼 쿠키는 왜 구울까?

  • Client 세션을 알아내기위해!

HTTP 통신

  • 방식

Connection-oriented

: TCP = 연결후 통신 (telnet,ftp,http,smtp)

  • stateful : 요청 응답 반복!
  • stateless 요청 응답 끊기!

Connectionless

: UDP = 연결 없이 통신 (ping, 방송)

0개의 댓글