웹 개발을 하다보면, 클라이언트(Client)와 서버(Server)간의 통신이 필수적이다.
이를 어떻게 관리할 것인지에 대한 방법을 정리해보았다.
상태 유지(Stateful)와 상태 유지하지 않음(Stateless)으로 구분할 수 있는데, 여기서의 "상태 유지"는 말 그대로 서버가 클라이언트의 상태를 보존함을 의미한다.
➡ 즉, 네트워크 프로토콜이다.
통신에 필요한 데이터를 서버가 가지고 있으며, 세션 종료시까지 클라이언트의 상태 정보를 저장하는 것을 의미한다.
작업중이던 서버 중단 시, 중단된 시점부터 다시 진행이 가능하다.
하지만, 서버 1과 통신 중에 해당 서버에 장애가 생겨 서버 2가 이어 받을 경우, 서버 2는 상태 정보를 가지고 있지 않기 때문에 통신에 문제가 된다. (재인증 절차가 필요하다.)
또한, 서버 확장(scale out) 작업 시에 기존의 데이터와 세션을 모두 옮겨주는 등의 관리가 필요할 수 있다.
서버가 클라이언트의 상태 정보를 저장하지 않는다. (요청에 대한 응답만 처리)
통신에 필요한 데이터는 클라이언트가 가지고 있다가 서버와 통신 시 데이터를 전송하는 방식이다. 서버는 별도의 상태를 저장하지 않고, 해당 요청에 단순 응답만 한다.
그렇기 때문에 서버 1에 장애가 생기더라도, 서버 2가 이어 받아 통신을 진행하는 데에 문제가 없다. 상태 정보는 클라이언트가 가지고 있기 때문이다.
서버 확장 시에도 수월하게 대처 가능하다는 장점이 있으며, 클라이언트 요청에 많은 데이터가 소모될 수 있다는 점도 고려해야 한다.