Stateful과 Stateless

2024. 5. 19. 15:49·Server
목차
  1. Stateful과 Stateless
  2. Stateful (상태 유지)
  3. Stateless (무상태)

 

Stateful과 Stateless

 

웹 공부를 함에 있어서 서버와 클라이언트 사이에 상태유지 (Stateful), 그리고 무상태 (Stateless)라는 개념을

자주 들었었다. 그렇지만 머릿속에 남는 것은 단어 그 자체뿐이었고, 왜 이러한 특성이 중요한 것인지

궁금하여 학습하였다.

 

오늘은 Stateful과 Stateless에 대해 명확히 이해하기 위한 포스팅을 작성하고자 한다.


 

 

Stateful (상태 유지)

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

클라이언트의 상태를 보존한다?

이는 클라이언트의 정보를 서버의 어딘가에 저장하고, 통신 시 이를 활용한다는 의미이다.

 

(보통 브라우저의 쿠키나 서버의 세션 메모리에 저장되어 상태를 유지한다.)

 


Stateful 문제점

서버에서 클라이언트의 상태 정보를 저장한다고 할 때, 가장 큰 문제는

클라이언트의 정보를 저장하고 있는 서버에 문제가 생겨, 다른 서버를 사용해야 할 때 발생한다.

 

그 이유는 새로운 서버에는 이전 서버에서 저장한 클라이언트의 상태를 기억하고 있지 않기 때문이다.

 

우리가 옷을 주문한다고 가정해보자.

 

로그인, 주소 입력, 결제의 과정까지 각 단계에서 이전에 내가 선택한 정보들이지속적으로 저장되어 있지 않다면, 다시 말해 Stateful 하지 않다면 우리는 해당 상품을 주문할 수 없을 것이다.

 

 

정리하면, Stateful 시스템은 사용자에게 개인화되고 맞춤화된 경험을 제공하는 데 유용하지만, 상태 정보를 지속적으로 관리해야하므로 시스템의 복잡성이 증가하고, 서버의 부하가 커질 수 있으며 이를 고려한 적절한 구조 설계가 중요하다.

 

이러한 불상사를 방지하기 위해서는 다음과 같은 방법들이 사용된다.

  1. 캐시 서버 (Redis) 활용
  2. 클라우드 서비스 활용
  3. 이중화 및 분산 시스템 활용

 

 


Stateless (무상태)

 

무상태는 앞서 소개한 stateful과는 반대로 서버가 클라이언트의 상태를 보존하지 않음의 의미이다.

Stateless 구조에서 서버는 요청이 왔을 때 응답을 보내는 역할만을 수행하며

 

클라이언트의 상태는 오직 클라이언트에게 그 책임이 있다.

다시 말해, 클라이언트와 서버 간 통신에 필요한 모든 상태정보들을 클라이언트에서 가지고 있다가

서버와 통신할 때 실어서 보내는 것이 무상태 구조이다.

 

 

위의 Stateful 예시를 대입 했을 때,

클라이언트가 서버에게 주문에 관한 모든 정보를 누적하여 전달하며, 서버는 클라이언트의 어떠한 상태도 기억하지 않는다.

 

data [ ( 브랜드 ( xx ), 셔츠, 우리집 주소로 결제형식은 카드로 결제)]의 전체 내용을 서버로

요청서버는 그저 결제 승인. 

 


Stateless 문제점

stateful과 달리, 무상태의 경우 클라이언트가 서버에 전달할 데이터의 양이 많아지는 것이 가장 큰 문제점이다.

 

 

하지만 Stateless 구조를 활용할 경우 Scale-out 즉, 서버 확장을 수월하게 할 수 있으므로처리하는 데이터의 양이 증가한다고 할 때, 이를 처리할 서버만 증설한다면 문제를 해결할 수 있다.

 

(Stateful과 달리 클라이언트의 상태를 기억할 필요가 없으므로)

 

대표적인 프로토콜로는 HTTP와 UDP가 있으며

 

stateless의 특징을 유지하면서도 로그인 상태 유지를 가능하게 해주는 기술이 바로 JWT (Json Web Token)이다.

 

 

 

 

 

 

 

 

 

 

'Server' 카테고리의 다른 글

RESTful API에 대하여  (0) 2024.06.10
JPA와 MyBatis (ORM, SQL Mapper)에 대하여  (0) 2024.06.09
java.lang.IndexOutOfBoundsException (MyBatis)  (0) 2024.05.18
intellij Project 인식 오류 해결하기  (0) 2024.05.15
웹프로그래밍_Servlet에 대하여  (2) 2024.03.14
  1. Stateful과 Stateless
  2. Stateful (상태 유지)
  3. Stateless (무상태)
'Server' 카테고리의 다른 글
  • RESTful API에 대하여
  • JPA와 MyBatis (ORM, SQL Mapper)에 대하여
  • java.lang.IndexOutOfBoundsException (MyBatis)
  • intellij Project 인식 오류 해결하기
지화자_
지화자_
나만의 글로 기록하기
지화자_
냉정과열정사이
지화자_
전체
오늘
어제
  • 분류 전체보기 (47)
    • 알고리즘 (18)
      • 개념정복 (6)
      • 문제풀이 (12)
    • ComputerScience (5)
      • 데이터베이스 (3)
      • 네트워크 (0)
      • OS (2)
    • SSAFY (2)
    • Java (6)
    • Server (10)
    • Spring (3)
    • 일상 (1)
    • OpenSource (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 추상클래스
  • n-queen
  • 배포
  • 조합
  • 부분집합
  • 비트마스크
  • 재귀함수
  • 빌드
  • cd
  • BFS
  • 아니안무서워
  • 알고리즘
  • 병합정렬
  • CI
  • dfs
  • 백트래킹
  • 나무섭지
  • 소프티어
  • OOP
  • 분할정복
  • 백준바이러스
  • 구현
  • 인터페이스
  • AOP

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.2
지화자_
Stateful과 Stateless
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.