개발자 공부 - 인프런 온라인 강의/모든 개발자를 위한 HTTP 웹 기본 지식

[섹션 4. HTTP 기본] 클라이언트 서버 구조 & Stateful, Stateless / 인프런 김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식

easpop 2024. 11. 12. 18:43
728x90
반응형

 

이번 시간에는 클라이언트 서버 구조와 http 상태값인 Stateful, Stateless에 대해서 알아보았다.


http의 특징 첫번째로는, 클라이언트 - 서버 구조로 이루어져 있다는 것이다.

 

클라이언트가 http 메세지로 서버에 요청을 보내고, 응답이 올때까지 클라이언트는 기다린다.

 

그렇게 서버는 결과를 만들어서 클라이언트에게 보내고, 클라이언트는 응답 결과를 열어서 동작을 하게 된다.

 

위와 같은 구조는 표면적인 내용이고...

 

조금 더 살펴보자면, 과거에는 클라이언트와 서버가 분리되어 있지 않았다.

 

그래서 요즘은 클라이언트와 서버를 분리를 하면서,

 

비즈니스 로직과 데이터는 서버에, UI와 사용성은 클라이언트에 집중을 하여 분리를 했다.

 

이렇게 되므로써, 각각 분리적으로 진화가 가능하게 된다.

 

예를 들면, 클라이언트는 UI를 그릴 때, 휴대폰인지, PC인지, 이런 것에 따라서 UI에만 집중을 할 수 있다.

728x90
반응형

또한, 예를 들어, 트래픽이 매우 초과하는 일이 발생한다면,

 

백엔드 아키텍쳐를 다시 그려서 트래픽을 어떻게 다룰지, 서버쪽에서만 집중을 할 수 있다는 점이다.

 

http의 또 다른 특징은 무상태(stateless) 프로토콜을 지향한다는 점이다.

 

무상태 프로토콜이란, 서버가 클라이언트의 상태를 보존하지 않는다는 뜻이다.

 

반대 개념으로는 stateful이 있는데, 이는 상태 유지를 뜻한다.

 

stateless로 예를 들자면, 마트에서 물건을 사는 경우를 생각해보자.

상태유지(stateful)를 해야 하기 때문에, 중간에 다른 점원으로 바뀌면 안된다.

(중간에 다른 점원으로 바뀐다면, 상태 정보를 다른 점원에게 전달을 해줘야한다.)

이를 서버의 개념으로 대입하자면, 하나의 서버만 통신을 해야 하고 장애가 나면 문제가 발생한다.

 

반대로 무상태(stateful)은 중간에 다른 점원으로 바뀌어도 된다.

(사려는 물건의 정보를 다른 점원에도 똑같이 전달하기 때문이다.

예를 들면, 정보 1 : 노트북 A / 정보 2 : 개수는 3대 / 정보 : 결제는 카드로,

이런 정보들을 모아서 전달하기 때문에 점원 A에서 점원 B로 바뀌더라도 문제가 없다.)

그렇기 때문에, 갑자기 고객이 증가해도 점원을 대거 투입할 수 있게 된다.

 

그 개념을 서버에 대입해서, 클라이언트 요청이 증가해도 서버를 대거 투입할 수 있다.

클라이언트가 요청할때, 필요한 데이터를 다 담아서 요청을 하기 때문에, 서버는 상태를 보관하지 않고 응답만 하면 된다.

서버A와 통신하다가 장애가 발생하더라도 상태를 보관하지 않기 때문에 서버B와 통신해도 아무런 문제가 없다.

이와 같이, 무상태는 응답 서버를 쉽게 바꿀 수 있다. 즉, 무한한 서버 증설이 가능하다는 것을 뜻한다.

 

하지만 Stateless도 실무에서는 한계가 있을 수도 있다.

모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있기 때문.

 

예를 들어서 단순한 이벤트 소개 페이지는 상태를 유지할 필요가 없지만,

로그인과 같이 상태를 유지해야 하는 경우에는,

일반적으로는 브라우저의 쿠키와 서버의 세션을 조합해서 상태를 유지하는 기능을 한다.

이럴 때, 서버의 세션이 날아가거나 한다면, 로그인이 풀려버릴 것이다.

 

알아야할 점은, 애플리케이션 설계할 때는 가능한 상태 유지는 최소한으로 사용하고 꼭 필요한 경우에만 사용해야 한다는 점이다.

 

728x90
반응형