seong

02 Stateful, Stateless 본문

자바/자바 실습

02 Stateful, Stateless

hyeonseong 2022. 7. 27. 10:54

 

세션 상태

  • Host P 와 Host Q가 서로 통신 인증이 된 상태.
  • 클라이언트와 서버 간 통신이 인증이 된 상태이다.
  • 세션이 된 상태에서는 데이터 송수신이 가능하다.

 

세션 정보

  • 하나의 세션에서 Client → Server 전송할 데이터의 정보이다.
  • Server는 Client가 전송하는 데이터를 모두 수신할 때까지 세션 상태를 유지한다.

 

Stateful

  • 세션이 종료될 때까지 Client의 세션 정보를 저장하는 네트워크 프로토콜이다.
  • Ex) TCP 3 -way Hand Shake, 온라인 뱅킹 등등..
  • 장점
    • 서버가 클라이언트의 세션 정보를 저장하고 있으므로, 연결이 끊긴다 하더라도, 다시 그 지점부터 시작할 수 있다.
  • 단점
    • 속도가 느리다는 단점이 있다.
    • 통신이 끊기면, 클라이언트의 세션 정보를 새로운 서버로 옮겨 주어야 하기 때문에 속도, 확장성 면에서 좋지 못하다.

 

Stateless(무상태)

  • Server가 Client의 세션 상태 및 정보를 저장하지 않는 네트워크 프로토콜이다.
  • Ex) UDP 프로토콜, 온라인 검색
  • Client가 요청한 것에만 Server가 응답해 주는 방식이다.
  • Client가 송신하려 했던 정보를 Server가 모두 수신했는지 확인해 주지 않는다.
  • 어떠한 이전의 통신과도 연관이 없으며 각각의 요청에 대해서 독립적이다.
  • 장점
    • Stateful에 비해 속도가 빠르며, 확장성이 좋다.
    • 각각의 통신, 요청에 대한 응답은 모두 독립적이기 때문에 세션 상태 및 정보를 저장하지 않기 때문이다.
    • 대량의 트래픽 발생 시에도 대처를 수월하게 가능하다.
  • 단점
    • 송수신 할 때마다 서버가 세션 상태 및 정보를 저장하지 않기 때문에 송신할 때마다 전송해야 할 데이터가 많다.

 

  • Stateful 예시
  • 만약 쇼핑몰이 있다고 가정을 하자.
  • 구매자 A, 판매자 B가 있다.
  • 구매자 A : 이 책의 가격은 얼마인가요?
  • 판매자 B : 이 책은 1만 원입니다.

 

  • 구매자 A : 5개 구매하겠습니다.
  • 판매자 B : 5개 총 5만 원입니다.

 

  • 구매자 A : 카드 결제하겠습니다.
  • 판매자 B : 5만 원 결제 완료되었습니다.

⇒ 여기선 판매자가 모두 B가 진행하므로 거래가 정상적으로 완료된다.


하지만 판매자가 중간에 C로 바뀌게 된다면

 

  • 구매자 A, 판매자 B, 판매자 C
    • 구매자 A : 이 책의 가격은 얼마인가요?
    • 판매자 B : 이 책은 1만 원입니다.

 

    • 구매자 A : 5개 구매하겠습니다.
    • 판매자 C : ?

 

    • 구매자 A : 카드 결제하겠습니다.
    • 판매자 C : ?

⇒ 판매자가 바뀌면 거래가 정상적으로 이루어지지 못하게 된다.


  • Stateless 예시
  • 구매자 A, 판매자 B가 있다.
    • 구매자 A : 이 책의 가격은 얼마인가요?
    • 판매자 B : 이 책은 1만 원입니다.

 

    • 구매자 A : 책을 5개 구매하겠습니다.
    • 판매자 B : 책 5개는 총 5만 원입니다.

 

    • 구매자 A : 책 5개 카드 결제하겠습니다.
    • 판매자 B : 5만 원 결제 완료되었습니다.

⇒ 여기서도 판매자가 바뀐다는 가정을 해보자.

 

  • 구매자 A, 판매자 B, 판매자 C, 판매자 D
    • 구매자 A : 이 책의 가격은 얼마인가요?
    • 판매자 B : 이 책은 1만 원입니다.

 

    • 구매자 A : 책을 5개 구매하겠습니다.
    • 판매자 C : 책 5개는 총 5만 원입니다.

 

    • 구매자 A : 책 5개 5만 원 카드 결제하겠습니다.
    • 판매자 D : 5만 원 결제 완료되었습니다.

⇒ 판매자가 바뀐다 하더라도 소통마다 정확한 의사 전달을 하기 때문에 혼란이 없다.

이러한 상태를 물 상태 Stateless라고 한다.

하지만 한번 소통을 할 때마다 계속 모든 정보를 말해주어야 하는 것이 단점이다.


Statelsee의 인증 문제.

  1. 은행을 가정하자.
  2. A가 은행을 첫 방문을 하게 된다.
  3. A는 자신임을 인증하는 데이터를 → 종업원에게 전달한다.
  4. 종업원은 A의 ID 카드를 서랍에서 꺼내어 A에게 전달, 은행이 가지고 있을 ID 카드를 발행한다.
  5. 이후 A가 은행을 두 번째 방문을 한다.
  6. A는 자신이 첫 방문 때 받은 ID 카드를 은행에 제출한다.
  7. 종업원은 받은 ID 카드를 은행이 가지고 있는 ID 카드와 비교한다.
  8. 고객 ID 카드와 은행 ID 카드를 비교해 일치한다면 거래를 진행한다.

⇒ 여기서 고객이 가지고 있는 ID 카드는 쿠키, 은행이 가지고 있는 ID 카드를 세션이라고 한다.

 

📌 쿠키란? 웹 브라우저가 컴퓨터에 저장하는 텍스트 파일. 즉 웹 사이트를 방문할 때 사용자의 다음 재방문을 대비해 기본적인 정보를 저장한다.

📌 세션이란? 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보는 것.

 

또 다른 예로 “로그인” 이 있다.

회원 가입 → ID, Pwd 입력 → 로그인

위의 과정에서 입력하고 사용자가 입력한 값을 서버에 있는 값과 비교하는 과정이 생략되었다.

이러한 이유는 이 모든 과정이 프로토콜이며, 프로토콜은 자동적으로 이루어지기 때문이다.

 

'자바 > 자바 실습' 카테고리의 다른 글

06 자바 기본 규칙  (0) 2022.07.28
05 Static, Stack, Heap  (0) 2022.07.28
04 JVM  (0) 2022.07.28
03 컴파일, 인터프리터  (0) 2022.07.27
01 신뢰성 있는 통신  (0) 2022.07.27