일반적으로 웹 애플리케이션은 서버에 해당 작업을 수행해달라고 요청을 보내는 클라이언트(Client)와 클라이언트의 요청을 받아 작업을 처리해준 후 결과를 반환해주는 서버(Server)로 이루어진 서버-클라이언트 구조로 되어 있고 HTTP 프로토콜을 이용하여 통신하는데 HTTP 프로토콜은 비연결성(Connectinless)와 무상태성(Stateless)라는 2가지의 중요한 특성을 갖는다.
비연결성(Connectinless): 비연결성(Connectinless)은 서로 통신한 서버와 클라이언트가 통신 이후에는 연결을 유지하지 않는 방식이다.
하지만 클라이언트의 요청이 지속되는 상황에서 요청을 하나 처리할 때마다 서버와의 연결을 끊었다가 다시 연결하면 연결 비용이 기하급수적으로 올라갈 것이다.
따라서 현재는 이를 방지하기 위해 비연결성을 유지하되 클라이언트의 마지막 요청 처리 이후에도 단기간 동안은 연결을 유지하여 연결 비용을 절약하는 HTTP 지속 연결 방식(Persistent Connections)을 사용하고 있다.
예를 들어 클라이언트의 마지막 요청 이후 설정값인 10초 동안 아무 요청이 없다면 서버와 클라이언트간의 연결은 끊어지고 이후 클라이언트가 요청을 한다면 서버와의 커넥션을 다시 만들어야 한다.
무상태성(Stateless): 무상태성(Stateless)은 서버가 클라이언트의 상태와 관련된 정보들을 저장하지 않는 것이다.
웹 애플리케이션을 설계할 때에는 로그인 유지 등의 어쩔 수 없는 최소한의 경우을 제외하고는 기본적으로 무상태(stateless)로 설계해야 한다.
만약 예를 들어 상태유지(stateful)로 웹이 구성된다면 클라이언트는 서버에 데이터를 넘겨주기 때문에 무조건 기존에 통신했던 서버하고만 통신해야 한다.
중간에 서버에 에러가 발생하여 다른 서버와 연결되면 필요한 데이터가 새로 바뀐 서버에 존재하지 않아 에러가 발생하고 처음부터 작업해야 한다는 문제점이 발생하고 서버 증설도 어려워진다. 하지만 실제로 클라이언트가 한 서버하고만 계속 연결되는 경우는 드물다.
하지만 무상태로 웹 애플리케이션을 설계한다면 클라이언트와 통신하던 서버가 중간에 바뀌거나 새로 다른 서버와 연결된다 하더라도 서버에 데이터가 저장되는 것이 아니라 클라이언트가 매 요청마다 필요한 데이터를 서버에 계속 넘겨주기 때문에 아무 서버랑 통신이 가능하다는 크나큰 장점이 있다.
다만 무상태성은 매 요청마다 기존에 서버에 넘겨주었던 데이터까지 포함하여 너무 많은 데이터를 보내주어 비용이 많이 들 수 있다는 단점 또한 존재한다.