Stateless, Stateful가 뭘까?

홍정민·2024년 8월 7일
0


Stateless, Stateful이라는 용어를 개발하다 보면 어디선가 주워들을 수 있다. 이 용어가 뭔지 차근차근 알아 보도록 하자.

State?

Stateless를 해석해 보면 "상태가 없음"이라는 뜻이다. 여기서 상태가 무엇인지 파악하는게 중요할 것 같다. 여기서 말하는 상태(State)가 무엇일까?

상태(State)
클라이언트 - 서버 아키텍처에서 로그인 정보, 장바구니에 담긴 아이템 목록 등과 같이 클라이언트의 현재 상태 정보라는 의미로 받아들이면 된다.

그러면, 상태가 있다(Stateful)라고 하는 것을 짐작해 볼 수 있다.

Stateful

정의에서 알아 봤듯이, 상태가 있다(Stateful)라고 함은 서버가 클라이언트의 상태를 기억하고 있다라고 생각할 수 있다. 서버는 클라이언트 상태에 맞게 서비스를 제공할 수 있는 것이다.

대표적으로, 세션 인증 방식이 stateful하다고 할 수 있다. 세션 인증 방식은 웹에서 사용자의 데이터를 서버가 기억하고 있는 것이다.

좋은점

서버에서 사용자 데이터를 관리하다 보니 다양한 개인 설정(다크 모드, 설정, 장바구니 등)을 쉽게 구현하고 제공할 수 있다.

문제점

서버에서 상태를 유지하다 보니, 만약 요청이 진행되는 중간에 서버가 비정상적인 오류로 종료되면 이전의 상태값을 잃어버리기 때문에 클라이언트가 누군지 잊어버리게 된다.

예를 들어, 장바구니에 물품을 잘 담고 있었는데 갑자기 로그인 페이지가 뜨고 장바구니의 물품이 모두 사라지는 것이다.

이러한 문제는 기존 데이터를 새 서버에 이전하여 세션을 유지해 준다면 해결할 수 있다고 한다.

Stateless

Stateless는 "상태가 없다"라는 의미이다. 즉, "서버는 클라이언트의 상태(정보)를 저장하지 않는다."라고 할 수 있다.

Stateless는 세션 처리 과정 없이 단순하게 요청을 받으면 응답을 보내주는 역할을 한다. 클라이언트의 상태는 클라이언트가 저장을 하고있는 것이다.

예를들어, httpjwt 등이 Stateless를 띄는 요소들이다.

좋은점

Stateful에서 클라이언트의 상태는 서버가 저장을 하고 있다. 즉, "비용을 개발자가 부담한다."라고 할 수 있다. 반면에 Stateless는 비용을 클라이언트가 부담하기 때문에 개발자의 비용을 덜 수 있다.

또한, 세션을 관리하지 않아도 되기 때문에 비교적 서버의 로직이 단순해질 수 있다.

문제점

상태가 없으므로 페이지 이동시 상태 정보를 유지할 수 없다. 그러나 중요한 사용자 인증의 경우 JWT 방식을 사용하여 로그인을 유지시킬 수 있다.

결론

Stateful은 서버가 클라이언트의 상태를 유지하는 방식이고, Stateless는 클라이언트의 상태를 본인 스스로 저장하고 유지하는 방식이다.

이에 따라, 본인의 서비스 형태에 맞게 Stateful 방식과 Stateless 방식 구조를 잘 적용시키면 될 것 같다.

0개의 댓글