본문 바로가기
2025 Dev Log/2025.Backend

[#3][다시, 처음부터 #4]서버의 동작 방식과 상태 관리

by Dev.후크리 2025. 9. 17.

서버의 동작 방식과 상태 관리는 웹 서버가 요청을 처리하는 과정과 세션/쿠키 같은 상태 관리 방식을 말한다.

 


1. 개념 설명 (Concept)

 

웹 서버 동작 흐름:
클라이언트(브라우저) → HTTP 요청 → 서버(Controller → Service → Repository → DB) → 응답 반환

  • 서버는 기본적으로 Stateless(무상태): HTTP는 요청과 응답 후 연결을 끊기 때문에, 이전 요청의 상태를 기억하지 않음.
  • 하지만 로그인/장바구니 같은 기능을 위해 상태 관리가 필요 → 이를 위해 **쿠키(Cookie), 세션(Session), 토큰(Token)**을 사용.

실제 서비스 예시:

  1. 로그인 시도 → 서버에서 사용자 인증 → 세션 ID를 발급
  2. 세션 ID는 브라우저 쿠키에 저장됨
  3. 이후 요청마다 쿠키를 포함해 서버에 전달 → 서버가 세션 저장소에서 사용자 정보 확인

2. 올바른 용어 (Terminology)
  • Stateless (무상태): HTTP 특성. 서버는 이전 요청 기억 X
  • Cookie (쿠키): 클라이언트 브라우저에 저장되는 작은 데이터
  • Session (세션): 서버 메모리/DB에 저장되는 사용자 상태 정보
  • Token (토큰): 상태를 서버가 기억하지 않고 클라이언트가 인증 정보를 담아 보내는 방식 (ex. JWT)
  • Session Store (세션 저장소): 서버 클러스터 환경에서 세션을 공유하기 위한 저장소 (Redis 등)

3. 잘못 쓰기 쉬운 표현 + 실제 맥락 (Misuse & Context)

 

❌ 잘못된 표현:

  • “HTTP는 상태를 유지한다” → 틀림, HTTP는 기본적으로 Stateless
  • “세션은 클라이언트에 저장된다” → 일부만 맞음, 실제 데이터는 서버에 있고 클라이언트에는 세션 ID만 저장됨

✅ 현업 맥락:

  • 개발자들끼리는 “세션 유지(Session 유지)”라고 표현하지만, 정확히는 서버가 상태를 추적하는 방식을 말하는 것임
  • “토큰 기반 인증”은 **세션 없는 인증(stateless)**을 뜻함

4. 면접 예시 (Interview Q&A)

 

Q1. HTTP가 무상태(stateless)라는 것은 무슨 의미인가요?
👉 서버가 요청 간 상태를 기억하지 않으며, 각 요청은 독립적으로 처리된다는 의미입니다.

 

Q2. 세션(Session)과 토큰(Token)의 차이는 무엇인가요?
👉 세션은 서버가 상태를 저장하고 추적하며, 토큰은 클라이언트가 인증 정보를 직접 포함해 stateless하게 처리합니다.

 


4일차 확인 퀴즈

Q1. (OX)

HTTP 프로토콜은 기본적으로 상태를 기억하는 프로토콜이다.

 

👉
정답: X
HTTP는
Stateless(무상태)
프로토콜이에요. 각 요청은 독립적으로 처리되고, 이전 요청과 연결되지 않습니다.

Q2.

세션(Session)과 쿠키(Cookie)의 저장 위치를 각각 올바르게 설명한 것은?

  1. 세션은 클라이언트, 쿠키는 서버
  2. 세션은 서버, 쿠키는 클라이언트
  3. 세션과 쿠키 모두 서버
  4. 세션과 쿠키 모두 클라이언트

👉 정답: 2번 (세션은 서버, 쿠키는 클라이언트)

세션 데이터: 서버 메모리/DB에 저장 쿠키: 브라우저(클라이언트)에 저장

Q3.

다음 중 토큰(Token) 기반 인증의 특징으로 옳지 않은 것은?

  1. 서버가 상태를 직접 저장하지 않는다.
  2. 클라이언트가 매 요청마다 토큰을 포함한다.
  3. 서버는 토큰의 유효성을 검증한다.
  4. 로그아웃 시 서버가 토큰을 즉시 무효화할 수 있다.

👉 정답: 4번

1, 2, 3은 모두 맞습니다. 하지만 로그아웃 시 서버가 토큰을 즉시 무효화할 수 없다 → ❌ → 토큰은 이미 발급되어 클라이언트가 가지고 있기 때문에, 일반적으로 만료시간(exp)까지 유효합니다. (대안: 블랙리스트 저장, 짧은 만료시간 + Refresh Token 사용)

Q4.

아래 상황에서 필요한 개념은?

  • 사용자가 로그인한 뒤 브라우저를 닫았다가 다시 열었는데 자동 로그인됨.
    👉 ( ) 덕분에 가능하다.

👉 정답: 쿠키(Cookie) 세션은 브라우저 닫으면 기본적으로 끊어집니다. 자동 로그인을 유지하려면 브라우저가 세션 ID(혹은 토큰)를 쿠키에 저장해두고, 다시 접속할 때 서버에 보내야 합니다.

경훈님 답변은 “세션 저장소에 저장된 세션”이었는데, 이건 현재 로그인 유지 중일 때 맞는 설명이에요. 브라우저 닫았다 열어도 유지되는 건 쿠키 덕분이에요.

 

Q5. (주관식)

세션(Session) 방식과 토큰(Token) 방식 인증의 가장 큰 차이점은 무엇인가요?


👉 정답 포인트: 상태를 서버가 관리하느냐(세션) vs 클라이언트가 관리하느냐(토큰)

세션: 서버 메모리/DB에 사용자 상태 저장 → 서버 부하 ↑ 토큰: 클라이언트가 인증 정보 자체를 매번 포함 → 서버 확장성 ↑

제 답변인은  “서버측 DB/메모리 사용 유무”

요약
  • HTTP = Stateless
  • 세션 = 서버 저장 / 쿠키 = 클라이언트 저장
  • 토큰은 서버가 상태를 기억하지 않고 클라이언트가 인증 정보 포함
  • 자동 로그인 = 쿠키 덕분
  • 세션 vs 토큰 = 상태 관리 주체의 차이