저번 시간까지는 [SpringBoot][4]로 스프링부트 기초에 대해 배워보았다.
이제 모든 개발자를 위한 HTTP 웹 기본 지식
에 대해 배워보려고 한다. ㅎㅇㅌ !!
별 내용이 없군요,,?
📌 역할
- 지정한
IP주소(IP Address)
에 데이터 전달패킷(packet)
통신 단위로 데이터 전달
내가 지구 반대편 친구에게 메시지 (패킷)를 전달하기 위해서는 출발지 IP
, 도착지 IP
가 필요하다. ➡️ 이런식으로 !!
이때 패킷이 갈때, 올때 다른 노드를 탈 수 있다.
📌 IP 프로토콜 한계
비연결성
: 패킷 받을 대상이 없다면? 서비스 불능 상태라면? (에도 불구하고 패킷을 전송해버린..)비신뢰성
: 중간에 패킷이 사라진다면? 패킷이 뒤죽박죽 온다면?프로그램 구분
: 같은 IP를 사용하는 서버에 통신하는 애플리케이션이 두 개 이상,,?!
이 한계들을 해결하기 위한 것이 바로 TCP
, UDP
이다.
⬆️ 프로토콜 계층
⬆️ TCP/IP 패킷 정보
📌 TCP 특징
: 전송 제어 프로토콜 (Transmission Control Protocol)
- 연결지향 → TCP 3 way handshake (가상 연결)
- 데이터 전달 보증 (메시지를 잘 받았는지 응답해줌)
- 순서 보장 (Hello, world! → world! Hello, ❌)
- 신뢰할 수 있는 프로토콜
현재는 대부분 TCP 사용
⬆️ (논리적으로 연결)
📌 UDP 특징
: 사용자 데이터그램 프로토콜(User Datagram Protocol
- UDP는 하얀 도화지에 비유하곤 함 → 기능이 거의 없음
- 연결지향 → TCP처럼 3 way handshake ❌
- 데이터 전달 보증 ❌
- 순서 보장 ❌
- 데이터 전달 및 순서 보장이 안되지만, 단순하고 빠름
IP와 거~의 같다고 할 수 있지만 PORT와 체크섬정도가 추가.
애플리케이션에서 추가 작업이 필요.
패킷 받을 대상이 없거나 서비스 불능 상태일 때 패킷을 전송하는 문제 ➡️ 해결
중간에 패킷이 사라지거나 순서가 뒤바뀌는 문제 ➡️ 해결
클라이언트가 👩🏻💻 게임도 하고 👩🏻💻 화상통화도 하고 👩🏻💻 웹서핑도 한다. 그런데 이때 패킷을 받았다? 누가 보낸거지 ?!
🤔: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 땐 어떻게 해결하면 좋을까?
정답부터 말하자면 PORT가 해결해준다.
PORT는 같은 IP 내에서 프로세스를 구분해준다.
🤔: 그런데 서버에서 어떻게 내 port번호 를 아는거야?
애초에 패킷을 전송할 때 출발지 IP/PORT, 목적지 IP/PORT, 전송 데이터..등등 이 전달된다.
📌 참고
0~65535: 할당 가능
0~1023: 잘 알려진 포트로 사용하지 않는 것이 좋음
(FTP
: 20, 21
TELNET
: 23
HTTP
: 80
HTTPS
: 443)
IP는 기억하기가 어렵다는 단점이 있다. (ex. 200.200.200.3)
그리고 IP는 변경될 수 있다.
: 도메인 네임 시스템 (Domain Name System)
전화번호부 같은 시스템이고 도메인 명을 IP 주소로 변환해준다.
도메인 명은 돈을 주고 사는거고 DNS 서버가 IP로 변환해주는 것 !