본 게시글은 김영한님의 인프런(Inflean)강의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 수강하고 공부한 내용을 정리한 글입니다.
1. 인터넷 통신
인터넷에서 컴퓨터 둘은 어떻게 통신할까?
만약 , 클라이언트와 서버가 가까이 있으면 케이블로 2PC를 연결하여 통신할 수 있다.
하지만, 클라이언트와 서버의 거리가 멀면 그 사이에 있는 인터넷망을 통해서 메시지를 보내야 한다.
클라이언트(요청) <-> 인터넷 <-> 서버(응답)
클라이언트가 request message를 전송하면 인터넷 망 내부의 수많은 중간 노드(서버)들을 거쳐 서버에 도착한다. 이후 서버에서 요청을 처리하고 응답을 보내는 과정도 동일하게 진행된다.
인터넷 망에서 메세지가 도착하는 과정을 제대로 알기위해서는 우선 IP(인터넷 프로토콜)에 대해 학습해야 한다.
2. IP(인터넷 프로토콜)
2.1 IP 주소 부여
메세지를 전달하기 위해서는 클라이언트(출발지)와 서버(목적지)의 IP주소가 부여된 상태여야 한다.
메세지를 전송하는 것은 편지를 보내는 것과 같다.
편지 봉투(Packet)에 편지(Message)를 담고, 봉투에 받는 사람의 주소(Destination IP address)와 보내는 사람의 주소(Source IP address)를 작성해야 전송할 수 있다.
2.2 IP (인터넷 프로토콜)의 역할
- 지정한 IP 주소(IP address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
2.3 IP 패킷 정보
IP packet은 헤더와 데이터 부분으로 나뉜다.
헤더에는 출발지 IP(클라이언트 IP), 목적지 IP(서버 IP), 기타 정보(연결 정보, 데이터 타입, 유저 기계 정보..) 등이 저장되고, 데이터에는 전송할 메세지가 저장된다.
2.4 클라이언트 패킷 전달
2.5 서버 패킷 전달
서버는 클라이언트에게서 message를 잘 받았음을 알리기 위해 OK message를 전송한다.
만약 잘 받지 못했다면, 다양한 상태 코드를 담아 message를 보낼 수 있다.
HTTP response status code | Description |
1XX | Informational(정보 제공) - 임시 응답 |
2XX | Success(성공) - 클라이언트의 요청이 잘 처리됨 |
3XX | Redirection(리다이렉션) - 주소가 이동되었음을 알림 |
4XX | Client Error(클라이언트 에러) - 없는 페이지 요청 등 |
5XX | Server Error(서버 에러) - DB 오류 처리 등 |
이외에도 다양한 상태 코드들이 있다. ex) 404 Not Found - 요청한 페이지를 찾을 수 없습니다.
2.6 IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성
- 중간에 패킷이 사라지거나 여러개의 패킷이 순서대로 도착하지 않을 수 있음
- 인터넷 망을 통해 전송되던 패킷이 인터넷에 문제가 생겨 사라지는 경우가 발생할 수 있다.
- 소실되더라도 클라이언트는 알 수 없다.
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 구분하기 어렵다.
- 비연결성 - 대상이 서비스 불능, 패킷 전송
- 클라이언트(출발지)에서 패킷을 전송하려고 할 때, 대상 서버(목적지)의 상태는 알 수 없다. 그래서 항상 패킷을 보내게 되는 문제가 있다.
- 비신뢰성 - 패킷 소실
- 만약 인터넷 망의 어떤 중간 노드(서버)가 문제가 생기면, 클라이언트(출발지)에서 보낸 패킷이 유실되는 문제가 있다.
- 비신뢰성 - 패킷 전달 순서 문제 발생
- 패킷의 용량이 매우 클 때, 패킷을 분리해서 보내게 된다. 그런데 그 패킷들이 모두 같은 경로로(같은 노드들을 거쳐서) 이동하는 것은 아니기 때문에, 패킷 전달 순서가 보장되지 않는 문제가 있다.
용어 정리
1. 여기서 말하는 클라이언트와 서버란?
요청자: 클라이언트, 요청 메시지를 받는 곳: 서버
해당 강의에서 말한 예시) 클라이언트: 메시지를 보내는 나의 pc에 설치된 애플리케이션, 서버: 친구의 PC에 설치된 애플리케이션
출처: https://www.inflearn.com/community/questions/146771/
2. 프로토콜이란?
프로토콜 = 통신 규약(약속) 이다.
서로간에 데이터를 주고 받기 위해서 데이터를 이런 모양이어야 하고, 그 안에 ip, port라는게 있어야 등의 약속을 말한다. 인터넷은 실제 byte 데이터를 전달하면서 통신을 한다. 그리고 어떻게 통신할지, 앞의 몇자리는 IP가 들어가고 나머지는 데이터가 들어가는 등 약속이 필요한데, 이 약속이 프로토콜이다.