본문 바로가기
[Naver Cloud Camp 7] 교육 정리

네이버 클라우드 캠프 54일차 230711

by 우기37 2023. 7. 11.

#1 교육정리

1) Stateful & Stateless

 

 

 

 

#2 Stateful & Stateless

Stateful - 상태유지)

상태 유지라 함은 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존함을 의미합니다.

클라이언트와 서버 간에 송수신을 하며 단계별 과정을 진행하는데 있어, 서버에서 클라이언트가 이전 단계에서 제공한 값을 저장하고 다음 단계에서도 저장한 상태입니다.

 

대표적으로 홈페이지에서 한번 로그인을 하면 페이지를 이동해도 로그인이 풀리지않고 계속 유지되는 것이 바로 서버가 클라이언트의 상태를 유지(기억)하고 있으니깐 가능한 것입니다.

 

클라이언트의 정보를 기억한다라는 말은 어딘가에 정보를 저장하고 통신할때마다 읽는다는 뜻입니다.

이러한 정보들은 일반적으로 브라우저의 쿠키(Cookie)에 저장되거나, 서버의 세션(Session) 메모리에 저장되어 상태를 유지하게 됩니다.

 

즉, 상태 저장 시스템은 시스템과의 이전 상호 작용을 기억하고 이에 대한 정보를 저장합니다 . 결과적으로 시스템과의 새로운 상호 작용은 이전 상호 작용과 다른 출력을 생성할 수 있습니다.

 

다음은 수업 내용을 정리한 내용입니다.

 

stateful 방식은 여러 클라이언트의 요청을 서버에서 순차적으로 처리하기 때문에 먼저 접속한 클라이언트가 접속을 끊을때까지 나중에 접속한 클라이언트는 기다려야 합니다. 그래서 동시에 많은 클라이언트의 접속을 유지 할 수가 없다는 불편함이 있습니다. 먼저 접속한 클라이언트가 요청을 하는데 지연이 되어 나중에 접속한 클라이언트가 계속 기다려야 하는 악순환이 반복되게 됩니다.

 

그러나 장점도 있습니다.

 

클라이언트 정보를 유지 한다는 큰 장점이 있습니다.

클라이언트가 요청한 작업 결과를 기억하고 저장하여 유지하고 연결 작업을 처리하는데 수월합니다.

 

예로는 위와같이 실생활에서는 상담전화와 실시간 chatting 그리고 게임의 경우가 있고, 프로그램적으로는 telnet, ssh, ftp 가 있습니다.

 

시스템과의 모든 새로운 상호 작용은 상태를 변경하고 다른 출력을 생성합니다. 상태 저장 시스템의 다른 예로는 이메일 서비스(예:Gmail) 및 소셜 미디어 플랫폼이 있습니다.

 

 

stateful한 프로토콜)

대표적인 Stateful 구조를 따르는 프로토콜로 TCP 3-way handshaking 과정을 예를 들수가 있다.

 

  1. 클라이언트는 서버에 SYN(접속 요청 메세지)를 전송하고 SYN_SENT 상태가 된다.
  2. 서버는 SYN 요청을 받고, 클라이언트에 요청을 수락하는 SYN/ACK를 전송하고 SYN_RECEIVED 상태가 된다.
  3. 클라이언트는 서버에게 수락 확인으로 ACK를 또 보내고, 수신 받은 서버는 ESTABLISHED 상태가 된다.
  4. 세션 '상태'가 ESTABLISHED 가 됨으로써, 서버와 클라이언트는 서로 데이터를 주고 받을 수 있는 상태가 된다.

 

이렇게 TCP는 세션 '상태'에 따라 서버의 응답이 달라지게 되는 Stateful 하다고 말할수 있는 것이다.

 

출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC

 

 

 

Stateless- 무상태)

무상태는 반대로 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하지 않음을 의미합니다

Stateless 구조에서 서버는 단순히 요청이 오면 응답을 보내는 역할만 수행하며, 상태 관리는 전적으로 클라이언트에게 책임이 있는 것입니다.

 

즉, 클라이언트와 서버간의 통신에 필요한 모든 상태 정보들은 클라이언트에서 가지고 있다가 서버와 통신할 때 데이터를 실어 보내는 것이 무상태 구조입니다.

 

서버는 단순히 받아서 응답만 해주기 때문에 상태 유지에 대한 부하가 현저히 줄어들게 됩니다.

또한, 상태를 보관하지 않아 서버1에 문제가 생겨 서버2가 이어 받아도 응답하는데 있어 문제도 없습니다.

 

출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC

 

출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC

 

그래서 대량의 트래픽 발생 시에도 서버 확장을 통해 대처를 수월하게 할 수 있다는 장점도 있습니다.

(stateful과 달리 서버가 바뀌어서도 정확한 응답에 문제가 없기 때문에)

 

출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC

 

즉, 상태 비저장 시스템은 시스템과의 과거 상호 작용에 대한 정보를 저장하지 않습니다 . 따라서 시스템과의 각 상호 작용은 시스템과의 첫 번째 상호 작용과 같습니다.

 

상태 비저장 시스템의 다른 예로는 발신지에서 목적지로 패킷을 보내는 데 사용되는 TCP/IP 모델 의 네트워크 계층 프로토콜인 인터넷 프로토콜 (IP)과 응용 프로그램 계층 프로토콜인 HTTP( Hypertext Transfer Protocol )가 있습니다. 네트워크의 장치 간에 정보를 전송하는 데 사용되는 TCP/IP 모델입니다.

 

다음은 수업 내용을 정리하였습니다.

 

 

stateless 문제점)

무상태의 단점으로는 클라이언트의 요청에 상대적으로 Stateful 보다 더 많은 데이터가 소모되게 된다는 점이다.

매번 요청할때마다 자신의 부가정보를 줘야한다.

물론 이벤트 소개 페이지처럼 아무 정보를 담을 필요가 없는 페이지는 무상태로 만들면 좋다.

 

하지만 로그인처럼 유저가 로그인하고 있다는 상태를 유지해야 하는 서비스는 상태를 유지하지 않으면 로그인이 풀려버린다.

따라서 모든 것을 무상태로 설계할 수 없다. 어쩔 수 없는 경우에만 상태 유지를 최소한으로 사용하는 것이 베스트이다.

 

 

stateless한 프로토콜)

대표적인 Stateless 프로토콜로는 UDP HTTP 를 들 수 있다. (HTTP 통신 기본이 무상태)

무상태에선 브라우저는 데이터를 전송할 때마다 연결하고 바로 끊어버리게 된다.

 

UDP를 예로 들어 보자면, UDP는 TCP와 달리 handshaking 과정을 통해 연결 세션을 인증하는 절차를 수행하지 않고, 세션 상태에 관계 없이 그냥 무작정 보내 버린다.

그래서 서버쪽은 클라이언트와의 세션 정보를 저장하는 과정을 거치지 않아, 클라이언트가 송신한 데이터가 수신되었는지 확인하지도 않으며 클라이언트와의 세션 상태에 관계없이 요청에 대한 응답만을 수행하게 된다.

 

즉, Client와의 세션 정보를 Server가 저장하지 않는다는 점에서 Stateless 하다고 말할 수 있는 것이다.

 

출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-Stateful-Stateless-%EC%A0%95%EB%A6%AC