🌐 네트워크 계층별 핵심 개념 정리
1. IP (Internet Protocol)
| 항목 | 설명 |
|---|
| 역할 | IP 주소를 기반으로 데이터를 패킷 단위로 전달 |
| 특징 | - 비연결성 (Connectionless) - 비신뢰성 (패킷 손실, 순서 변경 가능) - 프로그램 구분 불가 (포트 없음) |
2. TCP vs UDP
| 구분 | TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
|---|
| 목적 | 신뢰성 있는 연결 제공 | 빠른 전송 중심 |
| 연결 방식 | 연결지향 (3-way handshake) | 비연결성 |
| 신뢰성 | 데이터 손실/중복/순서 보장 | 보장하지 않음 |
| 속도 | 상대적으로 느림 | 빠름 |
| 사용 사례 | 파일 전송, 웹, 이메일 등 | 스트리밍, 게임 등 |
| 기타 | 흐름 제어, 혼잡 제어 포함 | checksum만 포함 (간단한 오류 검출) |
✅ 3-Way Handshake
1. Client → SYN → Server
2. Server → SYN+ACK → Client
3. Client → ACK → Server
3. PORT (포트 번호)
| 항목 | 설명 |
|---|
| 역할 | IP 주소 하나에 여러 애플리케이션을 구분하기 위한 번호 |
| 예시 | 80: HTTP, 443: HTTPS, 22: SSH 등 |
4. DNS (Domain Name System)
| 항목 | 설명 |
|---|
| 역할 | 사람이 읽기 쉬운 도메인 이름 → IP 주소로 변환 |
| 이유 | IP는 기억하기 어렵고, 변경 가능성 존재 |
URI = URL + URN
| 구분 | 설명 |
|---|
| URL | 리소스의 위치를 지정 (https://example.com/page) |
| URN | 리소스의 이름 부여 (e.g., ISBN 등) — 거의 사용되지 않음 |
URL 구성
형식:
scheme://[userinfo@]host[:port][/path][?query][#fragment]
예시:
https://www.google.com:443/search?q=hello&hl=ko
| 구성 요소 | 의미 |
|---|
scheme | 프로토콜 (http, https) |
userinfo | 사용자 정보 (거의 사용하지 않음) |
host | 도메인 또는 IP |
port | 포트 번호 (기본값 생략 가능) |
path | 리소스 경로 (/search) |
query | ?key=value 형태의 파라미터 |
fragment | 문서 내 위치 지정 (#section1) |
6. 웹 브라우저의 요청 흐름
예시 요청:
https://www.google.com:443/search?q=hello&hl=ko
| 단계 | 설명 |
|---|
| ① DNS 조회 | www.google.com → IP 주소 변환 |
| ② TCP 연결 | 브라우저 ↔ 서버 (포트 443 연결) |
| ③ HTTP 요청 전송 | GET /search?q=hello&hl=ko HTTP/1.1 |
| ④ 응답 수신 | 서버로부터 HTML 등의 데이터 수신 |
| ⑤ 렌더링 | 브라우저가 결과 페이지를 화면에 출력 |
HTTP 메시지 구조
전체 구조 (요청 / 응답 공통)
Start Line
Header Fields
(빈 줄)
Message Body
요청 메시지 예시 (GET)
GET /search?q=hello HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0
(빈 줄)
응답 메시지 예시
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>...</html>
상태 코드 요약
| 범위 | 의미 | 예시 |
|---|
| 1xx | 처리 중 | 100 Continue |
| 2xx | 성공 | 200 OK, 201 Created |
| 3xx | 리다이렉트 | 301 Moved, 304 Not Modified |
| 4xx | 클라이언트 오류 | 400 Bad Request, 404 Not Found |
| 5xx | 서버 오류 | 500 Internal Server Error |
HTTP Method 정리
| Method | 목적 | 바디 사용 | 멱등성 | 안전성 | 캐시 |
|---|
| GET | 조회 | ❌ | ✅ | ✅ | ✅ |
| POST | 생성, 처리 | ✅ | ❌ | ❌ | ❌ |
| PUT | 전체 수정 | ✅ | ✅ | ❌ | ❌ |
| PATCH | 부분 수정 | ✅ | ❌ | ❌ | ❌ |
| DELETE | 삭제 | ❌(가급적) | ✅ | ❌ | ❌ |
메서드별 요약
1. GET
- 리소스 조회
- 파라미터는 쿼리 스트링 사용
- 캐싱 가능
2. POST
- 리소스 생성 또는 처리 요청
- 메시지 바디 사용
- 멱등성 없음 (같은 요청 여러 번 보내면 여러 리소스 생김)
3. PUT
- 지정된 리소스를 전체 교체
- 리소스 없으면 새로 생성
- 멱등 (같은 요청 여러 번 해도 결과 동일)
4. PATCH
- 리소스를 부분 수정
- 일부 필드만 바꿀 때 사용
- 멱등성 없음
5. DELETE
- 리소스 삭제
- 멱등 (지워진 리소스를 다시 지워도 결과 동일)
REST 설계 팁: URI는 명사, Method는 동사 역할
| 동작 | URI | Method |
|---|
| 회원 조회 | /members/100 | GET |
| 회원 등록 | /members | POST |
| 회원 전체 수정 | /members/100 | PUT |
| 회원 일부 수정 | /members/100 | PATCH |
| 회원 삭제 | /members/100 | DELETE |
클라이언트 → 서버 데이터 전송 방식
전송 방식 개요
| 방식 | 사용 메서드 | 설명 |
|---|
| 쿼리 파라미터 | GET | 검색, 필터, 정렬 등 조건 전달 |
| 메시지 바디 | POST, PUT, PATCH | 리소스 생성/수정 등 실제 데이터 전달 |
정적 데이터 조회
동적 데이터 조회
기본 전송
- 용도: 회원가입, 상품주문, 데이터 변경
- 메서드: POST
- Content-Type:
application/x-www-form-urlencoded
- 형식: key=value 형태로 메시지 바디에 전송
- 예시:
username=kim&age=30
인코딩
- 전송 데이터는 URL 인코딩 필요
- 예:
abc김 → abc%EA%B9%80
파일 업로드 (다중 파트)
- Content-Type:
multipart/form-data
- 용도: 파일 업로드, 여러 데이터 조합 전송
- 특징: 바이너리 데이터 포함 가능
지원 메서드
HTTP API 데이터 전송
-
대상: 웹/모바일 앱, 서버 간 통신 등
-
방식: JavaScript(Ajax), 앱 SDK, 서버 코드 등
-
메서드: GET, POST, PUT, PATCH, DELETE 등 자유롭게 사용
-
Content-Type: application/json 권장
-
형식 예시 (POST):
POST /members HTTP/1.1
Content-Type: application/json
{
"username": "young",
"age": 20
}
등록 방식에 따른 구조 구분
| 방식 | 메서드 | URI 결정 주체 | 예시 URI |
|---|
| 컬렉션(Collection) | POST | 서버가 URI 생성 | /members |
| 스토어(Store) | PUT | 클라이언트가 URI 지정 | /files/mycat.jpg |
| 문서(Document) | - | 고정 리소스 | /members/100, /images/logo.png |
| 컨트롤러(Controller) | POST | 명령/동작 수행 URI | /orders/100/start-delivery
/members/100/delete |
정리
| 구분 | 설명 |
|---|
| 문서(Document) | 단일 리소스를 의미하는 URI |
| 컬렉션(Collection) | 서버가 URI를 관리하는 리소스 디렉토리 |
| 스토어(Store) | 클라이언트가 URI를 지정해 직접 저장 |
| 컨트롤러(Controller) | 문서/컬렉션/스토어로 해결되지 않는 행위 표현 |
추가 Tip
- GET + 쿼리 → 조회 조건
- POST + 바디 → 데이터 생성 또는 처리
- PUT/PATCH → 전체/부분 수정
- multipart/form-data → 파일 포함 전송