HTTP 그리고 WebSocket

·2022년 6월 18일
0

컴퓨터개론

목록 보기
4/14
post-thumbnail

원래는 Rest API와 GraphQL을 적으려고 했는데, 어떻게 통신이 되는가? 에 대해서 부터 알아야 한다는 생각이 들었다.

그래서 적어보는 HTTP, 그리고 웹소켓에 대한 이야기다.

HTTP (HyperText Transfer Protocol)

인터넷 상에서 클라이언트와 서버가 텍스트를 주고 받을 때 사용하는 통신 규약을 HTTP라고 한다.

HTTP에는 몇가지 특징이 존재한다.

  • TCP / IP 4계층 중 애플리케이션 계층에 속해있다.
    애플리케이션 계층에는 HTTP를 제외하고 총 4개가 추가로 존재한다.
    • 파일을 보내는 규약 FTP
    • 메일을 보내는 규약 SMTP
    • 원격 시스템의 명령을 보내는 SSH
    • 도메인 이름과 IP 주소를 재 매핑해주는 DNS
  • 요청(Request)을 보내는 경우에만 응답(Response)을 받을 수 있다.
    • 응답을 보내줄 때 상태를 나타내는 응답 상태 코드가 꼭 함께 온다.
  • 비연결성(Connectionless)
    • 요청을 하고 응답을 받으면 연결을 끊어버리는 특징이 있다.
    • 이러한 특징 때문에 요청을 할 때 마다 연결, 해제를 하는 오버헤드가 발생하여
      HTTP 1.1부터는 keep-alive라는 옵션이 추가되었다.
    • keep-alive의 추가로 응답을 받더라도 바로 끊어버리는 것이 아니라
      일정 시간을 기다렸다가, 정말 오지 않으면 그때야 연결을 끊어버린다.
  • 무상태(Stateless)
    각 요청이 모두 독립적으로 여겨지는 특징으로, 서버는 클라이언트의 상태를 유지하지 않는다.
    • 이러한 이유때문에 로그인을 유지하기 위하여 쿠키, 세션 OAuth JWT를 사용하여
      로그인 상태를 유지할 수 있게 만든다.

이렇게 특징을 한번 봤는데, 이 포스트에서 중요한 것은 비연결성에 있다.

만약 채팅 시스템을 구현한다고 생각을 해보자.

채팅은 두 명 이상의 사람들이 대화를 하게 될 것이다.

하지만 해당하는 사람들이 언제 채팅을 칠지 예측할 수 없는데
이것을 알 수 없기 때문에 끊임없이 HTTP 요청을 보내는 것은 리소스의 낭비가 될 것이다.

그래서 나오게 된 것이 양방향 통신, WebSocket이다.

WebSocket

인터넷 상에서 클라이언트와 서버가 특정 port를 통하여 실시간 양방향 통식을 하는 규약을 WebSocket이라고 한다.

단방향 통신의 HTTP와는 다르게 양방향 통신이라는 특징을 가지고 있다.

WebSocket의 특징

  • TCP / IP 4계층 중 전송 계층에 속해있는 TCP에 의존한다.
  • 요청과 응답의 제약 없이 데이터를 보낼 수 있다.
    • HTTP와는 다르게 클라이언트에서도 데이터를 보낼 수 있고, 서버에서도 보낼 수 있다.
  • 연결성 (Connection)
    • HTTP와는 정반대로 연결이 계속 이루어져있다.
      한번 열어놓은 port를 사용하여 실시간으로 데이터가 오가기 때문에 리소스의 낭비가 없다.
  • 상태저장(Stateful)
    • 한번 연결한 상태에 대해서는 상태가 유지된다.
      만약 유지가 되지 않는다면 A와 B가 채팅을 하려고 했는데 막 CDEF한테 메세지가 가는 것이다(....)

이러한 특징을 가지고 있어서 실시간으로 조회라던가 멀티플레이(게임)이 필요한 상황에서는 웹소켓을 사용하여 서비스를 만든다.


하지만 사용자 입장에서는 실시간이 당연히 좋겠지만, 개발자 입장에서는 정말 수많은 문제가 발생할 수 있어서 꼭 다뤄보고 싶은 서비스기도 하다.

node에서는 채팅방을 만들기 쉽게 WebSocket 기반으로 만들어진 Socket.Io가 있어서 금방금방 적용할 수 있다곤 하던데.... 이번 프로젝트때는 작업량이 많아서 손을 대질 못해서 아쉬웠다.

이 다음은 http를 서술했으니 restapi를 작성할 수 있게 됐다!

끝!

profile
물류 서비스 Backend Software Developer

0개의 댓글