6장_ : 쿠키와 UUID로 세션 아이디 직접 생성

2026. 2. 8. 13:53·Book/자바 웹 프로그래밍 Next Step

 

웹 애플리케이션 서버에서 세션이 동작하는 원리 실습

이 실습은 5장의 web-application-server 프로젝트를 기반으로 이어서 진행한다.
지금까지 이론적으로 살펴본 쿠키와 세션의 관계를, 이번에는 직접 코드로 구현해본다.

이번 실습의 목표는 다음과 같다.

  • 세션에서 사용할 고유한 아이디(Session ID) 를 생성한다
  • 이 세션 아이디를 쿠키를 통해 클라이언트에 전달한다
  • 이후 요청에서는 이 아이디로 같은 클라이언트를 식별한다

즉, 세션이 실제로 어떻게 시작되는지를 바닥부터 구현해보는 단계다.

 

 

세션을 위한 “고유한 아이디”가 왜 필요한가

세션의 핵심은

서버에 상태를 저장하고, 그 상태를 구분할 수 있는 키를 클라이언트가 매 요청마다 보내준다.

이때 필요한 것이 바로 세션 아이디(Session ID) 다.

  • 같은 클라이언트의 요청인지 구분해야 하고
  • 충돌 없이 유일해야 하며
  • 예측하기 어려워야 한다

그래서 UUID 같은 랜덤한 고유 값을 사용하겠다.

 

UUID(Universally Unique Identifier)는
전 세계적으로 유일할 확률이 매우 높은 식별자를 생성하기 위한 표준 형식이다.

JDK에서는 UUID 클래스를 통해 간단히 생성할 수 있다.

 

 

UUID가 어떻게 생기는지 확인해보기

UUID의 형태를 직접 확인하기 위해 간단한 테스트 클래스를 만든다.

public class UUIDTest {
    @Test
    public void uuid() {
        System.out.println(UUID.randomUUID());
    }
}

테스트를 실행하면 다음과 같은 값이 출력된다.

`adcc5d66-7293-465a-867e-dd6e5a0621b0`

이 값의 특징은 다음과 같다.

  • 충분히 길고
  • 랜덤하며
  • 사람이 의미를 해석할 필요가 없고
  • 중복될 가능성이 극히 낮다

즉, 세션 아이디로 쓰기에 매우 적합한 값이다.

 

 

쿠키를 활용해 세션 아이디 전달하기

이제 본격적으로 세션 아이디를 쿠키로 전달하는 로직을 구현한다.

기본 전략

  1. 클라이언트가 처음 요청을 보낸다
  2. 요청에 세션 아이디 쿠키가 없다면
    • 서버가 새로운 세션 아이디를 생성한다
    • `Set-Cookie` 헤더로 클라이언트에 전달한다
  3. 이후 요청부터는
    • 브라우저가 이 쿠키를 자동으로 `Cookie` 헤더에 담아 보낸다
  4. 서버는 이 값을 이용해 같은 클라이언트를 식별한다

 

 

RequestHandler에서 세션 아이디 검사 로직

`RequestHandler` 클래스에서
요청 헤더에 쿠키가 있는지 먼저 확인한다.

if (getSessionId(request.getHeader("Cookie")) == null) {
    response.addHeader("Set-Cookie", "JSESSIONID=" + UUID.randomUUID());
}

 

  • 요청 헤더의 Cookie 값을 가져온다
  • 그 안에 JSESSIONID가 있는지 확인한다
  • 없다면:
    • 새로운 UUID를 생성한다
    • Set-Cookie 헤더로 JSESSIONID를 내려준다

즉,

“이 클라이언트는 처음 온 사용자다”
→ “새로운 세션 아이디를 발급한다”

라는 의미다.

 

 

쿠키에서 세션 아이디 꺼내기

쿠키 문자열은 다음과 같은 형태로 들어온다.

JSESSIONID=abc123; theme=dark; lang=ko

이를 그대로 쓰기 어렵기 때문에 파싱이 필요하다.

private String getSessionId(String cookieValue) {
    Map<String, String> cookies = HttpRequestUtils.parseCookies(cookieValue);
    return cookies.get("JESSIONID");
}

흐름 설명

  1. `Cookie` 헤더 문자열을 파싱해서
  2. `Map<String, String>` 형태로 변환한다
  3. 그중 `JSESSIONID` 값을 꺼낸다

이 값이 존재한다면,

  • 이미 세션 아이디를 가진 클라이언트다

존재하지 않는다면,

  • 아직 세션이 없는 첫 요청이다

 

 

정리

전체 흐름은 다음과 같다.

  1. 클라이언트가 서버에 요청
  2. 서버가 Cookie 헤더 확인
  3. JSESSIONID 없음
    • UUID 생성
    • Set-Cookie: JSESSIONID=... 응답
  4. 브라우저가 쿠키 저장
  5. 이후 모든 요청에
    • Cookie: JSESSIONID=... 자동 포함
  6. 서버는 이 값으로 클라이언트 식별

이것이 바로 세션이 시작되는 순간이다.

 

 

 

 


출처 : 《자바 웹 프로그래밍 Next Step》, 박재성, 로드북

'Book > 자바 웹 프로그래밍 Next Step' 카테고리의 다른 글

6장_ : JSP 중심 구조에서 MVC 패턴으로의 변화  (0) 2026.02.08
6장_ : 쿠키와 세션  (0) 2026.02.07
6장_ 요구사항4 : 회원 목록 및 개인정보 수정 보안 강화  (0) 2026.02.07
6장_ 요구사항3 : 세션 기반 로그인/로그아웃 상태 만들기  (0) 2026.02.07
6장_ 요구사항1: 개인정보 수정  (0) 2026.02.06
'Book/자바 웹 프로그래밍 Next Step' 카테고리의 다른 글
  • 6장_ : JSP 중심 구조에서 MVC 패턴으로의 변화
  • 6장_ : 쿠키와 세션
  • 6장_ 요구사항4 : 회원 목록 및 개인정보 수정 보안 강화
  • 6장_ 요구사항3 : 세션 기반 로그인/로그아웃 상태 만들기
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    aws
    java
    개발서적
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
6장_ : 쿠키와 UUID로 세션 아이디 직접 생성
상단으로

티스토리툴바