Network/1. Common

Stateless / Stateful

snowkit 2022. 5. 10. 07:53

Stateless

설명

  • 서버가 클라이언트의 상태를 보존하지 않음

예시

  • 인터넷에서 책을 구매하는 경우
    1. Client: 상세정보 요청
    2. Server 1: 책 상세정보 표시
    3. Client: 책 2개 구매 요청
    4. Server 2: 책 2개 구매 페이지 표시
    5. Client: 책 2개 결제 요청
    6. Server 3: 책 2개 결제 및 구매 완료

장점

  • 서버가 계속 달라져도(Server 1, Server 2, Server 3) 요청 처리 가능
    • 요청이 늘어나면 서버 증설 가능 (Scale-out)
    • 중간에 장애가 생겨도 다른 서버에서 처리 가능

단점

  • 보내는 정보의 양이 많음

Stateful

설명

  • 서버가 클라이언트의 상태를 보존

예시

  • 인터넷에서 책을 구매하는 상황
    1. Client: 상세정보 요청
    2. Server: 책 상세정보 표시
    3. Client: 2개 구매 요청
    4. Server: 책 2개 구매 페이지 표시
    5. Client: 결제 요청
    6. Server: 책 2개 결제 및 구매 완료

장점

  • 보내는 정보의 양이 적음

단점

  • 중간에 서버가 달라지면 보존하고 있는 정보가 사라져서 요청 처리 불가능
  • 중간에 장애 발생 시 처음부터 다시 요청해야 함

한계

  • 모든 부분을 Stateless로 설계 불가능
  • 상태 유지(Stateful)는 최소한으로 사용해야 함
  • 로그인 등 인증 상태를 유지해야 하는 경우
    • 세션 사용 시 Stateful
    • JWT 사용 시 Stateless (모든 요청 헤더에 JWT 포함)
      • JWT는 즉시 폐기할 수 없기 때문에 보안을 위해 서버에서 DB로 일부 상태를 관리해야 하는데, 그렇게 되면 Stateful이 됨

'Network > 1. Common' 카테고리의 다른 글

IP / TCP / UDP  (0) 2022.05.10