
정의: 서버가 클라이언트의 이전 요청 상태를 기억하지 않음.
장점:
서버 구조가 단순하고 확장성이 좋음
요청 처리 속도가 빠름
서버 간 부하 분산이 용이
단점:
로그인 상태, 장바구니 등 상태 유지 기능을 구현하려면 추가 작업 필요
정의: 서버가 클라이언트의 상태를 기억하며 요청 간 연결을 유지함.
장점:
로그인 세션, 실시간 협업 등 상태 유지가 쉬움
사용자가 중간에 끊겨도 세션을 통해 상태 복원 가능
단점:
서버 확장성 문제 발생 가능
서버 메모리 사용량 증가
정의: 클라이언트(브라우저)에 저장되는 작은 데이터 조각
특징:
클라이언트에 저장되므로 서버 부하 적음
브라우저 종료 후에도 유지 가능 (영속 쿠키)
보안 이슈 발생 가능 (XSS 공격 등)
정의: 서버가 클라이언트별 상태를 메모리나 DB에 저장
특징:
서버가 상태를 관리하므로 보안성이 높음
서버 부하가 증가할 수 있음
보통 쿠키와 함께 사용 (세션 ID를 쿠키에 저장)
- 사용자 로그인 요청
- 클라이언트가 아이디와 비밀번호를 서버에 전송
- 서버에서 인증
- 서버가 DB에서 사용자 정보를 확인 후 인증 성공 시 세션 생성
- 세션 ID를 생성하고 서버 메모리 또는 DB에 저장
- 세션 ID를 쿠키에 저장
- 서버가 응답 헤더를 통해 클라이언트에 세션 ID 전달
- 서버에서 세션 확인
- 클라이언트가 요청할 때마다 서버는 쿠키의 세션 ID를 확인
- 세션 정보가 유효하면 로그인 상태 유지
- 세션 정보 기반으로 권한 확인 및 사용자 데이터 제공
- 로그아웃 시 세션 삭제
세션 기반 Stateful은 서버 확장에 한계가 있어 JWT와 같은 Stateless 인증으로 발전
특징:
서버가 상태를 저장하지 않음
클라이언트에 토큰 저장, 요청 시 토큰 검증
확장성 높음, 부하 분산 용이
동시편집 캔버스 기능에서, 소유자가 권한을 ‘비공개’로 변경하면 서버가 세션 ID를 기준으로 연결된 모든 사용자의 WebSocket 연결을 해제하여 실시간 권한을 즉시 적용함.