HTTP는 서버와 클라이언트가 서로 데이터를 주고받기 위해 사용되는 통신 규약이다.

 

브라우저로 여는 웹 페이지는 HTTP또는 보안이 추가된 HTTPS가 사실상 전부이다.

 

오늘은 HTTP의 특징에 대해서 알아보도록 하겠다.

 

Client - Server 구조


Cilent와 Server는 서로 독립된 구조이다.

 

Cilent가 Server로 요청을 보내오면 그대에한 결과를 만들어 응답을 한다.

 

유저와 서버도 HTTP 통신을 하지만 사실 서버 간에도 HTTP 통신을 하는 경우도 매우 많다.

그 이유는 서로의 책임을 명확히 하여 유지 보수 등의 이점을 가질 수 있으며 HTTP로 Client  Server의 구조를 가져가면서 결합도를 떨어뜨리는 역할을 하기 때문이다.

 

보통 사용하는 유저가 클라이언트이고 그에 대한 대답을 server에서 해주기 때문에 서버는 언제나 서버 역할만 할 것 같지만 서버 간 통신을 할 때는 서버도 클라이언트가 될 수 있다.

 

 

 

무상태성 (Stateless)


무상태성이란 서버는 클라이언트의 상태(로그인 여부, 다크 모드 여부 등)를 갖고있지 않는다는 것이다.

 

무상태성에는 몇 가지 장단점이 있다.

  • 장점
    • 아무 인스턴스가 요청을 처리해도 동일 결과를 낼 수있어 수평 확장 (Scale out)의 유리하다.
    • 요청이 상태에 의존하지 않기 때문에 캐시 활용에 유리하다.
    • 서버는 입력 - 출력 함수를 구현하듯 요청을 처리하면 되고 세션 만료, 서버 메모리 고갈 등의 관리 비용이 낮기 때문에 서버 설계가 단순화된다.
  • 단점
    • 모든 정보가 요청에 있어야 하므로 중복과 오버헤드가 증가한다
    • 순수 무상태 토큰(JWT)은 발급 시점에 유효기간이 박혀 있어서 탈취되면 만료 전까지 악용될 수 있기 때문에 이에 대한 대책이 필요하다
    • 상태를 LocalStorage나 쿠키에 담고 있는 경우 데이터 동기화와 무결성 검증 로직이 추가로 필요하다.

 

비연결성 (Connectionless)


비연결성이란 클라이언트가 보낸 요청에 응답을 받았으면 더 이상 연결을 유지하지 않는다는 것이다.

 

이로인해 더 이상 사용하지 않는 커넥션을 유지하지 않아도 되어 유지 비용이 감소한다.

그렇다면 주고받는 요청이 많은 경우(ex 주식, 채팅)에는 오히려 비용이 상승하기도 하는데 이럴땐 WebSocket이나 SSE(server sent event)등을 잘 활용하는 방법도 있다.

+ Recent posts