HTTP 웹 기본 지식 (1) | 인터넷 네트워크와 URI
2025. 3. 24. 18:37ㆍSpring/MVC
본 게시글은 아래의 강의를 수강하고 요약 및 추가 정리한 게시글입니다.
모든 개발자를 위한 HTTP 웹 기본 지식 강의 | 김영한 - 인프런
김영한 | , [사진] 📣 확인해주세요!본 강의는 자바 스프링 완전 정복 시리즈의 세 번째 강의입니다. 우아한형제들 최연소 기술이사 김영한의 스프링 완전 정복 로드맵을 먼저 확인해주세요. (바
www.inflearn.com
[목차]
1. 인터넷 네트워크
2. URI와 웹 브라우저 요청 흐름
--------------------------------- 포스팅 (1) ← 이번 포스팅
3. HTTP 기본
4. HTTP 메서드
5. HTTP 메서드 활용
6. HTTP 상태 코드
--------------------------------- 포스팅 (2)
7. HTTP 헤더 - 일반 헤더
8. HTTP 헤더 - 캐시와 조건부 요청
--------------------------------- 포스팅 (3)
1. 인터넷 네트워크
1-1. 인터넷 통신
멀리 떨어진 컴퓨터 두 대는 어떻게 통신할까?
인터넷 망은 아주 복잡하다!
1-2. IP (Internet Protocol)
- 복잡한 인터넷 망을 사용하기 위한 최소한의 규칙: IP 주소 부여하기
- IP의 역할
- 지정한 IP 주소에 데이터 전달
- '패킷'이라는 통신 단위로 데이터를 전달한다
- IP 프로토콜의 한계
- 비연결성: 패킷을 받을 대상의 상태를 알 수 없음. 대상 서버가 없거나 서비스 불능인지 판단 불가하고 그냥 패킷 전송함
- 비신뢰성: 패킷이 순서대로 안오면? (Hello/word! -> world!/Hello), 중간에 패킷이 사라지면?
- 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
1-3. TCP(Transmission Control Protocol, 전송 제어 프로토콜)
- TCP: IP의 한계를 보안해주기 위해서 등장한 개념
- 인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층: HTTP, FTP
- 전송 계층: TCP, UDP
- 인터넷 계층: IP
- 네트워크 인터페이스 계층
- TCP/IP 패킷 정보
- TCP 특징
- 연결지향: TCP 3way handshake
- 데이터 전달 보증: 클라이언트가 데이터 보내고 나면 서버에서 잘 받았다고 응답해줌
- 순서 보장: 서버가 TCP 정보를 보고 순서 잘못 오면 다시 보내라고 요청함
- 신뢰할 수 있는 프로토콜 -> 현재는 대부분의 어플리케이션에서 TCP 사용
- TCP 3 way handshake : 연결 확인 -> 데이터 전송
- UDP (User Datagram Protocol : 사용자 데이터그램 프로토콜)
- 여러 기능을 가진 TCP와 달리 UDP는 기능이 거의 없는 하얀 도화지 같은 프로토콜
- IP 기능 + PORT + 체크섬 정도만 추가됨
- 연결지향, 데이터 전달 보증, 순서 보장 X
- 그럼 왜 씀? 단순하고 빠르다. 사용자가 애플리케이션에서 최적화하여 사용하기 좋다.
1-4. PORT
- 클라이언트가 여러 개의 서버와 동시에 통신해야하면 어떻게 하나? -> PORT 사용
- IP는 목적지 컴퓨터를 찾는 것 (아파트 이름) - IP 패킷 정보 내
- PORT는 그 목적지 IP 내에서 돌아가는 애플리케이션(프로세스)를 찾는 것 (아파트 동호수) - TCP 정보 내
- TCP/IP 패킷 = 출발지 IP, PORT + 목적지 IP, PORT + 전송 데이터
- 할당 가능 포트: 0~65535 할당 가능
- 그러나 잘 알려진 포트 0~1023은 사용하지 않는 것이 좋음
- 예: FTP: 20, 21, TELNET: 23, HTTP: 80, HTTPS: 443
- 포트 사용 예시
//IP+포트의 조합은 항상 출발지(클라이언트)와 목적지(서버) 양쪽이 모두 존재해야 의미가 있다.
//클라이언트 -> 서버 요청
출발지 IP: 192.168.1.10 (내 컴퓨터)
출발지 포트: 51234 (내 컴퓨터에서 YouTube 어플리케이션에 할당된 랜덤 포트)
목적지 IP: 142.250.74.206 (YouTube 서버)
목적지 포트: 443 (목적지 서버가 이건 HTTPS 요청이구나! 하고 이해함)
//서버 -> 클라이언트 응답
출발지 IP: 142.250.74.206 (YouTube 서버)
출발지 포트: 443 (HTTPS)
목적지 IP: 192.168.1.10 (내 컴퓨터)
목적지 포트: 51234 (내가 요청 보낼 때 썼던 포트. YouTube 프로세스를 찾는데 사용됨)
1-5. DNS (Domain Name System)
- IP는 기억하기 어렵고, 변경될 수 있음 -> DNS의 등장
- DNS 서버에 IP주소와 도메인 명을 연결해놓고 편리하게 사용
- IP 바뀌면 DNS 서버에서만 바꾸면 됨
2. URI와 웹 브라우저 요청 흐름
2-1. URI (Uniform Resource Identifier)
- URI : 통일된 방식의 자원 식별정보
- Uniform : 리소스를 식별하는 통일된 방식
- Resource : 자원, URI로 식별할 수 있는 모든 것 (구분할 수 있는 모든 정보를 뜻함 )
- Identifier : 다른 항목과 구분하는데 필요한 정보
- URI, URL, URN의 구분
- URI (Resource Identifier) : URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다.
- URL (Resource Locator) : 리소스의 위치를 지정 -> 거의 이걸 사용함
- URN (Resource Name) : 리소스에 이름을 부여 (urn:isbn:8960777331) -> 이런게 있다 정도
- 위치는 변할 수 있지만, 이름은 변하지 않는다. 그러나 URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화 되지 않음
따라서 대부분 URL을 사용하기 때문에 URI가 URL과 거의 같은 의미로 사용됨
- URL 문법
- scheme: 주로 프로토콜을 사용한다.
프로토콜이란? 어떤 방식으로 자원에 접근할 것인가 하는 약속, 규칙 (http, https, ftp 등) - 접속 포트는 일반적으로 생략 가능 (http: 80, https: 443)
2-2. 웹 브라우저 요청 흐름
1) 웹 브라우저 (클라이언트) -> 서버 요청
2) HTTP 요청 메세지 생성
3) HTTP 요청 메세지 -> TCP/IP 패킷 생성 -> 서버 전송
4) 서버 -> 클라이언트 HTTP 응답 메시지 생성
5) HTTP 응답 메시지 전송
5) 웹 브라우저 (클라이언트)가 HTML 렌더링해서 데이터가 화면에 보여짐