WEB (3) - stateless vs stateful

김지승·2025년 9월 23일

CS

목록 보기
19/22

1. Stateless vs Stateful

Stateless

  • 정의: 서버가 클라이언트의 이전 요청 상태를 기억하지 않음.

  • 장점:

    서버 구조가 단순하고 확장성이 좋음
    요청 처리 속도가 빠름
    서버 간 부하 분산이 용이

  • 단점:

    로그인 상태, 장바구니 등 상태 유지 기능을 구현하려면 추가 작업 필요

Stateful

  • 정의: 서버가 클라이언트의 상태를 기억하며 요청 간 연결을 유지함.

  • 장점:

    로그인 세션, 실시간 협업 등 상태 유지가 쉬움
    사용자가 중간에 끊겨도 세션을 통해 상태 복원 가능

  • 단점:

    서버 확장성 문제 발생 가능
    서버 메모리 사용량 증가

2. 상태 유지 방법: 쿠키와 세션

쿠키(Cookie)

  • 정의: 클라이언트(브라우저)에 저장되는 작은 데이터 조각

  • 특징:

    클라이언트에 저장되므로 서버 부하 적음
    브라우저 종료 후에도 유지 가능 (영속 쿠키)
    보안 이슈 발생 가능 (XSS 공격 등)

세션(Session)

  • 정의: 서버가 클라이언트별 상태를 메모리나 DB에 저장

  • 특징:

    서버가 상태를 관리하므로 보안성이 높음
    서버 부하가 증가할 수 있음
    보통 쿠키와 함께 사용 (세션 ID를 쿠키에 저장)

3. 쿠키+세션 방식

  1. 사용자 로그인 요청
  • 클라이언트가 아이디와 비밀번호를 서버에 전송
  1. 서버에서 인증
  • 서버가 DB에서 사용자 정보를 확인 후 인증 성공 시 세션 생성
  • 세션 ID를 생성하고 서버 메모리 또는 DB에 저장
  1. 세션 ID를 쿠키에 저장
  • 서버가 응답 헤더를 통해 클라이언트에 세션 ID 전달
  1. 서버에서 세션 확인
  • 클라이언트가 요청할 때마다 서버는 쿠키의 세션 ID를 확인
  • 세션 정보가 유효하면 로그인 상태 유지
  • 세션 정보 기반으로 권한 확인 및 사용자 데이터 제공
  1. 로그아웃 시 세션 삭제

4. JWT(JSON Web Token)

  • 세션 기반 Stateful은 서버 확장에 한계가 있어 JWT와 같은 Stateless 인증으로 발전

  • 특징:

    서버가 상태를 저장하지 않음
    클라이언트에 토큰 저장, 요청 시 토큰 검증
    확장성 높음, 부하 분산 용이

5. 세션 활용 경험

동시편집 캔버스 기능에서, 소유자가 권한을 ‘비공개’로 변경하면 서버가 세션 ID를 기준으로 연결된 모든 사용자의 WebSocket 연결을 해제하여 실시간 권한을 즉시 적용함.

profile
디등

0개의 댓글