Stateless
설명
예시
- 인터넷에서 책을 구매하는 경우
- Client: 책 상세정보 요청
- Server 1: 책 상세정보 표시
- Client: 책 2개 구매 요청
- Server 2: 책 2개 구매 페이지 표시
- Client: 책 2개 결제 요청
- Server 3: 책 2개 결제 및 구매 완료
장점
- 서버가 계속 달라져도(Server 1, Server 2, Server 3) 요청 처리 가능
- 요청이 늘어나면 서버 증설 가능 (Scale-out)
- 중간에 장애가 생겨도 다른 서버에서 처리 가능
단점
Stateful
설명
예시
- 인터넷에서 책을 구매하는 상황
- Client: 책 상세정보 요청
- Server: 책 상세정보 표시
- Client: 2개 구매 요청
- Server: 책 2개 구매 페이지 표시
- Client: 결제 요청
- Server: 책 2개 결제 및 구매 완료
장점
단점
- 중간에 서버가 달라지면 보존하고 있는 정보가 사라져서 요청 처리 불가능
- 중간에 장애 발생 시 처음부터 다시 요청해야 함
한계
- 모든 부분을 Stateless로 설계 불가능
- 상태 유지(Stateful)는 최소한으로 사용해야 함
- 로그인 등 인증 상태를 유지해야 하는 경우
- 세션 사용 시 Stateful
- JWT 사용 시 Stateless (모든 요청 헤더에 JWT 포함)
- JWT는 즉시 폐기할 수 없기 때문에 보안을 위해 서버에서 DB로 일부 상태를 관리해야 하는데, 그렇게 되면 Stateful이 됨