티스토리 뷰

프로그래밍 기초/CS

Stateful과 Stateless

StartCoriny 2024. 4. 19. 05:08

Stateful (상태 유지)

  - 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존하는것이다.

  - 보존을 하기 위한 클라이언트의 정보는 세션 또는 쿠키에 저장하여 상태를 유지한다.

  - Stateful 구조를 따르는 프로토콜로 TCP의 3-way handshaking과정이 있다.

 

     • 클라이언트가 서버에게 통신을 시작하려는 의도를 알리기 위해 SYN 패킷을 보낸다.

     • 서버는 클라이언트의 SYN패킷을 받고 통신을 수락할 준비가 되었다는 신호로 SYN-ACK패킷을 보낸다.

     • 클라이언트는 SYN-ACK를 받고 응답을 위해 ACK패킷을 보낸다.

     • 이 과정은 클라이언트와 서버간의 TCP연결 설정이며 데이터를 전송 가능하게 하는 과정이다.

     • 웹 브라우징, 파일전송, 원격전송과 같은 인터넷을 통한 거의 모든 종류의 데이터 통신에 사용된다.

 

즉, 쉽게 말하면 로그인 한 상태가 유지된다거나 장바구니의 내용이 사라지지 않는것과 같은 상태를 말한다.

계속해서 정보를 기억하긴하지만 서버가 바뀌면 기억을 하지 못하는 단점이 있다.

유저( A ) 요청 : 내이름은
유저( A ) → 서버( 1 ) 

유저( A ) 요청 : startcoriny
유저( A ) → 서버( 2 )

유저( A )요청 : 잘부탁해
유저( A ) → 서버( 1 ) 

 

서버( 1 )이 기억하고 있는것 : 내이름은 잘부탁해

서버( 2 )이 기억하고 있는것 : startcoriny

 

이것과 같이 서버의 장애가 일어나거나 못쓰게 되어 다른 서버로 이동하게 되면 나와 관련된 정보가 사라지게 된다.

 

Stateless( 무상태, 상태유지하지 않음 )

  - 말그대로 상태를 유지하지 않는것이다. 즉, 서버가 클라이언트의 상태를 보존하지 않는다.

  - 상태를 유지하던 stateful과는 다르게 서버측에서 전혀 기억하고 있지 않아도 된다.

  - 서버는 요청이 오면 응답을 보내는 역할만 수행한다. why? 상태관리는 클라이언트가 하기 때문.

  - 서버는 응답만 보내주기 때문에 상태 유지에 대한 부하가 줄어들게 되며 서버가 바뀌더라고 문제가 생기지 않는다.

  - HTTP

    • 하이퍼텍스트 전송 프로토콜(HTTP)은 하이퍼텍스트 링크를 사용하여 웹 페이지를 로드하는 데 사용한다.

    • 그렇기 때문에 클라이언트가 서버에 요청을 보내도 서버는 그요청에 대한 응답만 보낼뿐이지 정보를 기억하지 않는다.

    • 각 HTTP요청은 독립적이며, 이전 요청에 대한 상태 정보를 서버가 유지하지 않는다.

  - UDP

    • 연결을 설정하지 않고 데이터를 보내고 받는 데 사용된다.

    • 각 패킷은 독립적으로 처리된다.

    • 패킷 전달의 신뢰성을 보장하지않고, 상태 정보를 유지하지 않는다.

    • 실시간통신, 스트리밍 서비스, DNS, 네트워크 게임 등

      실시간성이 중요한 응용 프로그램 및 데이터 전송의 신뢰성이 중요하지 않은 경우에 주로 사용한다.

 

즉, 통신에 필요한 모든 상태 정보는 클라이언트가 가지고 있고 서보와 통신할때 데이터를 실어서 보낸다.

그렇기 때문에 서버에는 부하가 줄어들게 되고 서버를 증설한다고 해도 상관이 없는 구조가 된다.

유저( A ) 요청 : 내이름은
유저( A ) → 서버( 1 ) 

유저( A ) 요청 : 내이름은 startcoriny
유저( A ) → 서버( 2 )

유저( A )요청 :내이름은 startcoriny 잘부탁해
유저( A ) → 서버( 3 ) 

서버가 다 다르더라도 유저가 각각의 서버에게 전달하고 싶은 것들은 다 전달할수가 있다.

다만 유저가 가지고 있는 정보가 늘어날수록 유저의 데이터가 늘어난다는 점이 이 Stateless의 특징이다.

 

또한, 우리는 로그인 할때 stateful상태라고 했다. 이렇게 되면 부하가 생기는 문제가 있다.

하지만 여기에서도 stateless를 적용할수가 있다. 

JWT토큰을 적용 시킴으로써 서버의 부하를 줄이면서 로그인의 상태도 유지 시킬수가 있다.

이처럼 성능을 개선하고 또 서버를 최대한 효율적으로 사용하기 위해서는 무상태를 지향할수 있도록 노력해야하고

계속해서 방법을 찾아야 한다.

 

 

우리는 성능을 항상 증가 시키기 위해 노력해야하고 공부해야한다.

'프로그래밍 기초 > CS' 카테고리의 다른 글

시간 복잡도와 공간 복잡도  (0) 2024.06.19
AOP에 대하여  (0) 2024.04.17
IoC 와 DI에 대하여  (0) 2024.03.05
객체지향 프로그래밍 설계 5원칙이란?  (0) 2024.03.04
동시성문제와 격리수준에 대해서  (0) 2024.02.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함