[꼼꼼한 개발자] 꼼코더

8. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 기본] - 모든 것이 HTTP, 클라이언트 서버 구조 본문

HTTP

8. 모든 개발자를 위한 HTTP 웹 기본 지식 - [HTTP 기본] - 모든 것이 HTTP, 클라이언트 서버 구조

꼼코더 2022. 9. 13. 15:06
반응형

🌎 모든 것이 HTTP, 클라이언트 서버 구조

일반적으로 휴대폰, 컴퓨터 등에서 필요한 데이터는 서버에 요청하여 받아온다.

네트워크를 통해 서버로부터 데이터를 가져오기 위한 통신으로 크게 HTTP 통신과 Socket 통신 2가지가 있다.


🤝 HTTP(HyperText Transfer Protocol)

  • HTTP는 하이퍼 텍스트를 주고 받기 위한 규칙(통신 규약)이다.
  • 처음엔 문서간에 링크를 통해 연결할 수 있는 프로토콜로 사용했으나, 현재는 모든 것을 전송한다.

🤳🏻 HTTP 메시지에 모든 것을 전송

1) 거의 모든 형태의 데이터 전송 가능

  • HTML, TEXT
  • IMAGE, Media, File, 음성, 영상, 파일
  • JSON, XML(API)

2) 서버 간에 데이터를 주고받을 때도 대부분 HTTP 사용

  • 실무에서 통신할 때 TCP 프로토콜을 직접 사용해서 통신하는 경우는 게임 서버를 제외하고는 거의 없다.

🧱 기반 프로토콜

  • TCP: HTTP/1.1, HTTP/2는 TCP 기반이다.
  • UDP: HTTP/3
  • 현재는 대부분 HTTP/1.1을 사용하는데, HTTP/2, HTTP/3도 굉장히 급속도로 커지고 있다.
  • TCP 통신은 3 way handshake 때문에 신뢰성과 연결성은 보장하지만, 이 과정에 걸리는 시간만큼 속도가 떨어질 수 밖에 없다. 그렇기에 HTTP/3에서는 UDP 프로토콜을 애플리케이션 레벨에서 재설계를 해서 속도를 높혔다.
  • 개발자 도구에서 Network 탭의 Protocol에서 어떤 버전의 HTTP를 사용하는지 알 수 있다.


🧙🏻‍♂️ HTTP 역사

  1. HTTP/0.9 (1991년) : GET 메서드만 지원, HTTP 헤더X
  2. HTTP/1.0 (1996년) : 메서드, 헤더 추가
  3. HTTP/1.1 (1997년) : 가장 많이 사용하고 우리에게 가장 중요한 버전이다.
  • RFC2068 (1997년) ➡️ RFC2616 (1999년) ➡️ RFC7230~7235 (2014년)

4. HTTP/2 (2015년) : 성능 개선

5. HTTP/3 (진행중) : TCP 대신에 UDP 사용, 성능 개선


🖥 클라이언트 서버 구조

Request Response 구조

  • 클라이언트는 요청(Request)을 보내고 서버는 요청에 대한 결과를 응답(Response)하는 구조이다.
  • 이렇게 클라이언트와 서버를 분리함으로써 각각의 역할에 맞는 책임만 수행하면 되기에 각 역할은 자신의 책임에 집중할 수 있다.
  • 이슈가 생겼을때도 이슈가 생긴 역할(클라이언트or 서버)에서만 이슈를 관리하면 된다.
  • 클라이언트와 서버를 개념적으로 분리하는 것이 중요하다!!
    1) 클라이언트 - UI, UX, 사용성에 집중
    2) 서버 - 비즈니스 로직, 데이터 처리에 집중
       (장점) → 클라이언트, 서버는 각각 독립적으로 진화 가능

🙋🏻‍♂️ Q&A

Q. 실무에서 TCP로 직접 서버간의 통신을 하는 경우는 거의 없다고 했는데, 이는 socket 방식인가?

 

ASocket 방식은 TCP/UDP 프로토콜을 직접 사용하여 통신하는 경우다.

 

즉, HTTP 메시지를 이용하지 않고 직접 TCP 계층에서 3 way-handshake를 하여 연결한다.

Socket 방식으로 통신하는게 TCP(또는 UDP) 프로토콜을 직접 사용하는 경우를 말한다.

 

[출처] https://www.inflearn.com/questions/273456

[출처] https://www.inflearn.com/questions/416812


Q. 클라이언트는 요청을 해야만 응답을 받을 수 있는가?

 

A. 기본적인 동작은 클라이언트가 요청하고 서버가 응답하는 구조이다.

그런데 예를 들어, 댓글 알림처럼 클라이언트는 어떠한 요청도 하지 않고 서버가 보내주는 데이터를 받는 경우는 HTTP 통신만으로는 기술적인 한계가 있다. 그래서 웹 소켓같은 기술들이 있다.

 

[출처] https://www.inflearn.com/questions/167813

 

참고 : https://hseungyeon.tistory.com

 

위 자료는 김영한님의 ‘모든 개발자를 위한 HTTP 웹 기본 지식’ 강의를 참고하여 작성하였습니다.
https://www.inflearn.com/course/http-웹-네트워크/dashboard

 

 

Comments