HTTP Stateless(feat, REST API)

phantom0308
3 min readOct 20, 2021

--

REST API, REST에 대해 설명하거나 포스트한 내용들을 보자면, 이해하는 내용이나 개념들이 각각 다르다.

REST는 표현적 상태 전송(Representational State Transfer)의 약어.HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식.월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식이다

하지만 HTTP 환경을 이용한다는 것은 아마 알고 있을 것이다.

그렇다면REST API를 알아 보기 앞서, REST API 와 HTTP 간의 관계와 특징에 대해 알아야 할 것이다.

REST API와 HTTP의 공통점은 Stateless(무상태)이다.

Stateless란 무엇일까? 클라이언트와 서버 관계에서 서버가 클라이언트의 상태를 보존 하지 않음을 의미한다.(반대로 Stateful은 서버가 클라이언트의 상태를 보존함을 의미한다.)

HTTP와 다르게 TCP 는 Connection(3-handsShake)을 맺고, 서버가 클라이언트에 대한 정보와 상태를 유지시키고 있기 때문에, Stateful 이라고 한다.

HTTP 는 Stateless와 Connectionless 의 특징을 가지고 있는데, 이는 클라이언트의 요청에 대해 서버가 응답을 마치면 연결을 끊어 버리는 성질을 나타낸다.

Connectionless(비연결성)으로 인해 서버는 클라이언트를 식별할 수 가 없는데, 이를 Stateless라고 한다.

이렇게 말하면, 내가 사용하고 있는 웹사이트들은 HTTP 환경에서 정보를 유지하고 있다고 생각하며 의문이 들 것이다.

맞다. 하지만 HTTP 환경에서도 클라이언트의 상태와 정보를 기억해야하기 때문에, 쿠키와 세션을 이용하여 식별할 수 있고, Stateful하게 된다.

근래에는 쿠키와 세션의 보완적인 문제로 인해, 토큰 기반의 인증 방식 OAuth, JWT 를 통해 식별하고 있다.

HTTP 프로토콜은 인터넷 상 불특정 다수의 통신 환경을 기반으로 설계 되어있다. 만약 서버에서 다수의 클라이언트 연결을 계속 유지를 한다면, 이에 따른 많은 리소스가 발생할 것이다.

물론 연결 유지를 줄이게 되면 매번 새로운 연결 해제를 반복하며, 그에 대한 오버 헤드가 발생하게 된다. 이를 해결 하기 위해 HTTP 1.1 부터는 KeepAlive라는 속성으로 통해 일정 시간, 범위 동안 연결을 유지하는 해줄 수 있다.

이와 같이, REST API 중 HTTP의 요소에 대해 알아보았다. 이 일부분이 REST API 전부를 설명하긴 힘들다.

REST API는 HTTP 자원(URI)을 이용하고, 행위(HTTP Method)에 대해 표현하도록 설계하는 것이라고 생각된다.

REST API 에 대한 자세한 내용은 다른 글에서 다루도록 할 예정이다.

--

--