웹에서 가장 중요한 HTTP, TCP/IP, HTTP 메세지에 대해서 알아봅니다
HTTP
웹 서비스는 HTTP(Hyper Text Transfer Protocol, 하이퍼텍스트 전송 방식)이라는 규칙을 통하여 데이터를 주고 받습니다. 여기서 하이퍼 텍스트는 하이퍼링크를 통하여 이곳에서 저곳으로 움직일 수 있는 텍스트라고 할 수 있습니다. 일반적으로 앞에서 뒤로 읽어나가는 순차적 흐름이 아니라 중간에서 다른곳으로 오가는 방식을 의미합니다.
TCP/IP(Transmission Control Protocol/Internet Protocol)
TCP/IP란 TCP규약과 IP규약을 합친 웹 상에서만 사용하는 규칙을 의미합니다.
TCP는 데이터 전달을 관리하는 규칙입니다. 즉, 데이터를 작게 나누어서 한쪽에서 다른쪽으로 옮기고, 이를 다시 조립하여 원래의 데이터로 만드는 규칙입니다. 여기서 잘게 나눈 데이터 단위를 패킷
이라고 합니다. 인터넷에서는 정보를 전달하는 단위를 뜻합니다. TCP는 패킷을 조립하고, 손실된 패킷을 확인하고, 재전송하도록 요청하는 기능을 합니다.
IP는 인터넷상의 주소 규칙입니다. 집의 주소를 부여하는 규칙이 존재하듯이, 인터넷상에 연결된 모든 컴퓨터의 위치에도 규칙이 필요합니다. 이전에는 2⁸*4
자리의 주소인 IPv4
를 사용하였지만 주소가 고갈이 되고 있어서 16⁴*8
자리인 IPv6
로 전환하고 되고 있습니다.
TCP/IP 4계층
OSI(Open Systems Interconnections)7계층
은 시스템들의 연결을 위한 모델입니다. TCP/IP 4계층
은 이를 웹 서비스에 맞게 단순화시킨 모델입니다.
- 응용계층: HTTP, FTP, Telnet, SMTP 등 네트워크를 사용하는 응용프로그램으로 이뤄집니다.
- 전송계층: TCP, UDP 등 시스템을 연결하고 데이터를 전송하는 역할을 합니다.
- 인터넷계층: ICMP, IGMP, IP등 데이터를 정의하고 데이터의 경로를 라우팅합니다.
- 물리계층: Ethernet, ATM등 네트워크 하드웨어를 의미합니다
클라이언트로부터 특정 주소로 요청이 들어오면 DNS 상에서 IP주소를 받아옵니다 → HTTP 계층에서 HTTP 메시지를 작성합니다 → TCP 계층에서 HTTP 메시지를 패킷으로 분해합니다. → IP계층에서 전송위치를 확인하고 → 네트워크를 통하여 전송합니다. 그 이후는 위의 과정의 역순으로 진행하여 처리합니다.
통신
프로토콜을 이용하여 source
와 target
간의 데이터를 주고 받는 방법을 뜻합니다. 크게 동기식과 비동기식으로 구분됩니다.
동기식 통신은 대표적으로 HTTP, 클라이언트의 요청을 서버에서 응답할 때 까지 기다리는 방식입니다.(HTTP 1.1의 Pipe Lining으로 클라이언트에서 응답메시지를 받기 전에 요청메시지를 전달할 수 있습니다. 하지만 본질적으로 비동기통신은 아닙니다)
비동기식 통신은 대표적으로 AMQP
(Advanced Message Queue Protocol, 개선된 메시지 큐 프로토콜), 메시지 브로커를 통하여 요청 메시지를 전달하는 방식입니다. 클라이언트에서는 브로커에게 메시지를 전달하기만 하고, 기다리지 않기 때문에 비동기 식이라고 불립니다. 요청하는 측에서는 메시지를 Publish
하고 처리하는 쪽에서는 메시지를 Subscribe
하기 때문에 pub/sub
구조라고도 부릅니다.
Client-Server
클라이언트와 서버는 데이터를 주고 받습니다. 클라이언트에서 한번 요청한 내용에 대해서 기억하지 않습니다. 이를 Stateless
하다고 표현합니다.
Client
요청 메시지 작성 →메시지 발송 →서버의 응답 대기 …
메시지 수신 → 메시지 해석 → 클라이언트에서 요청 추가 처리
Server
클라이언트의 요청 대기 … 요청 메시지 수신 → 메시지 해석 → 어플리케이션에 대한 내용 처리 → 결과 반환 → 응답 메시지 작성 → 메시지 발송
HTTP 메시지
HTTP메시지는 시작줄, 헤더, 본문으로 구성되어있습니다
시작줄
요청 메시지
요청 내용을 구체적으로 포함합니다.
메서드, 요청 URL, HTTP 버전GET /document/item/1 1.1
응답 메시지
사용자에게 일어난 내용을 응답합니다. 상태코드와 사유내용은 일대일 구조로 대응됩니다.
버전, 상태코드, 사유구절1.1 200 OK
헤더
메시지 본문에 대한 부가정보를 표현합니다. 헤더의 종류는 일반
, 요청
, 응답
, 엔터티
, 확장
등이 있습니다.
자주 볼 수 있는 헤더예시를 보도록 하겠습니다.
Connection
일반적으로 클라이언트와 서버간의 통신은 한번 맺고 끝납니다. 그러나 컨넥션 비용이 많이 소비되기 때문에 이를 개선하기 위하여 keep-alive
옵션을 통하여 컨넥션을 재활용합니다.
Content-type
응답하는 컨텐츠의 유형을 의미합니다.
Cache-control
캐쉬 사용을 막을 것인지, 허용할 것인지 제어합니다.
Access-Control-Allow-Origin
클라이언트에서 현재와 다른 도메인에서 정보를 가져올 수 있는 도메인의 정보를 담고 있습니다. 이를 CORS(Cross Origin Resource Sharing)
이라고 부릅니다
HTTP 응답코드
웹 서비스를 개발하면서 자주 접하게 되는 응답 코드입니다.
100대 코드: 정보전달
200대 코드: 성공응답
200: OK, 정상
204: No Content, 보통 특정내용을 삭제시 해당 응답코드를 응답합니다.
206: Range, 헤더를 지정한 요청을 응답할 때 사용합니다.
300대 코드: Redirection, request완료를 위해 추가 동작이 필요합니다
301: Moved Permanently, 영구적으로 URI 변경을 의미
302: Found, 일시적인 URI 이동을 의미
304: Not Modified, 변경 없음
307: Temporary Redirect, 임시적인 redirect
400대 코드: 클라이언트의 에러
400: Bad Request, 잘못된 요청
403: Forbidden, 접근권한없음
404: Not Found, 요청 내용이 없거나 찾을 수 없음
408: Request Timeout, 요청 타임아웃
500번대 코드: 서버의 에러
500: Internal Server Error, 서버에러, 로직에러 발생시 자주 등장합니다.
503: Service Unavailable, 서버 한계 초과등 오류
참고링크
- https://ooz.co.kr/260
- http://wiki.gurubee.net/pages/viewpage.action?pageId=26739929
- https://www.joinc.co.kr/w/Site/Network_Programing/Documents/IntroTCPIP
- https://eastroot1590.tistory.com/entry/socket-TCPIP%EB%9E%80
다시 정리하면서 당연히 알아야 하지만 몰랐던 부분을 많이 발견하게 되었습니다. 더 자세한 내용을 보기 원하시면 HTTP 완벽가이드라는 책을 추천드립니다