네트워크 응용 계층과 HTTP 완전 정복 가이드
개발자라면 반드시 알아야 할 네트워크의 핵심, 응용 계층부터 HTTP까지 한 번에 정리해보겠습니다.
DNS와 도메인 네임 시스템
왜 DNS가 필요할까?
웹사이트에 접속할 때 www.google.com
을 입력하지 8.8.8.8
을 입력하지 않는 이유가 여기에 있습니다.
- IP 주소의 한계: 모든 서버의 IP를 외우기 어렵고, IP는 언제든 변경될 수 있음
- 도메인 네임의 등장: 사람이 기억하기 쉬운 문자열 형태로 호스트를 식별
도메인 네임의 계층 구조
www.sparta.com.
│ │ │ │
│ │ │ └── 루트 도메인 (생략 가능)
│ │ └────── 최상위 도메인 (TLD)
│ └──────────── 2단계 도메인
└───────────────── 3단계 도메인 (서브도메인)
주요 TLD 종류
.com
- 상업용.org
- 비영리 조직.net
- 네트워크 관련.kr
- 대한민국 국가 도메인
DNS 서버의 계층적 구조
DNS는 전 세계에 분산된 서버들이 계층적으로 협력하는 시스템입니다.
1. 로컬 네임 서버 (Local DNS Server)
- 클라이언트가 가장 먼저 접촉하는 DNS 서버
- ISP에서 제공하거나 공개 DNS 사용 가능
- Google DNS:
8.8.8.8
,8.8.4.4
- Cloudflare DNS:
1.1.1.1
- Google DNS:
2. 루트 네임 서버 (Root DNS Server)
- 최상위 계층의 DNS 서버
- TLD 네임 서버의 주소를 알려줌
3. TLD 네임 서버
- 각 최상위 도메인을 관리
- 해당 도메인의 권한 있는 네임 서버 주소 제공
4. 권한 있는 네임 서버 (Authoritative DNS Server)
- 특정 도메인에 대한 최종 정보를 가진 서버
- 실제 IP 주소를 반환
DNS 질의 과정
재귀적 질의 (Recursive Query)
클라이언트 → 로컬 DNS → 루트 DNS → TLD DNS → 권한 있는 DNS
← ← ← ←
반복적 질의 (Iterative Query)
클라이언트 → 로컬 DNS
로컬 DNS → 루트 DNS (TLD 주소 반환)
로컬 DNS → TLD DNS (권한 있는 DNS 주소 반환)
로컬 DNS → 권한 있는 DNS (최종 IP 반환)
로컬 DNS → 클라이언트 (IP 전달)
DNS 캐시 시스템
성능 최적화를 위해 각 단계에서 캐시를 활용합니다.
캐시 단계별 흐름
- 브라우저 캐시 → 2. OS 캐시 → 3. 라우터 캐시 → 4. ISP 캐시
각 캐시는 TTL(Time To Live) 값에 따라 유효 시간이 결정됩니다.
URI, URL, URN 완벽 이해
자원(Resource)이란?
네트워크를 통해 주고받는 모든 정보
- HTML 파일, 이미지, 동영상, JSON 데이터 등
URI의 하위 개념들
URI (Uniform Resource Identifier)
├── URL (Uniform Resource Locator) - 위치 기반
└── URN (Uniform Resource Name) - 이름 기반
URL 구조 분석
http://www.sparta.com:8042/over/there?name=sparta#rtan
│ │ │ │ │ │
│ │ │ │ │ └── Fragment
│ │ │ │ └──────────────── Query
│ │ │ └─────────────────────────── Path
│ │ └──────────────────────────────── Port
│ └─────────────────────────────────────────────── Authority
└────────────────────────────────────────────────────── Scheme
각 구성 요소 설명
구성 요소 | 역할 | 예시 |
---|---|---|
Scheme | 접근 방법/프로토콜 | http:// , https:// , ftp:// |
Authority | 호스트 정보 | www.sparta.com , 192.168.1.1 |
Port | 포트 번호 | :8080 , :3000 (생략 시 기본값) |
Path | 자원의 경로 | /users/profile , /api/v1/posts |
Query | 추가 매개변수 | ?page=1&size=10&sort=desc |
Fragment | 문서 내 특정 부분 | #section1 , #top |
실무 예시
https://api.github.com:443/repos/octocat/Hello-World/issues?state=open&sort=created#issue-1
URN vs URL
URL의 한계
- 자원의 위치가 변경되면 접근 불가
- 서버 이전 시 기존 링크 무효화
URN의 장점
- 위치와 무관한 고유 식별자
- 예:
urn:isbn:9788966262281
(도서 ISBN)
HTTP 프로토콜 심화
HTTP의 핵심 특성
1. Stateless (무상태)
서버가 클라이언트의 이전 요청을 기억하지 않음
장점
- 서버 확장성 ↑ (로드밸런싱 용이)
- 서버 장애 시 복구 용이
단점
- 매 요청마다 인증 정보 필요
- 세션/쿠키로 상태 관리 필요
2. Connectionless (비연결성)
요청-응답 후 연결 종료
HTTP/1.0: 매번 새로운 연결
HTTP/1.1+: Keep-Alive로 연결 재사용
HTTP 메시지 구조
요청 메시지
GET /api/users HTTP/1.1
Host: api.example.com
Authorization: Bearer token123
Content-Type: application/json
{"name": "홍길동"}
응답 메시지
HTTP/1.1 200 OK
Content-Type: application/json
Set-Cookie: sessionId=abc123
{"id": 1, "name": "홍길동"}
HTTP 메서드 완벽 정리
메서드 | 용도 | 안전성 | 멱등성 | 실무 사용 예 |
---|---|---|---|---|
GET | 조회 | ✅ | ✅ | 게시글 목록, 사용자 정보 |
POST | 생성/처리 | ❌ | ❌ | 회원가입, 게시글 작성 |
PUT | 전체 수정 | ❌ | ✅ | 프로필 전체 업데이트 |
PATCH | 부분 수정 | ❌ | ❌ | 특정 필드만 업데이트 |
DELETE | 삭제 | ❌ | ✅ | 계정 삭제, 게시글 삭제 |
HTTP 상태 코드 실무 가이드
2xx 성공
- 200 OK: 일반적인 성공
- 201 Created: 리소스 생성 성공 (POST 요청)
- 204 No Content: 성공했지만 응답 본문 없음 (DELETE 요청)
3xx 리다이렉션
- 301 Moved Permanently: 영구 이동 (SEO에 중요)
- 302 Found: 임시 이동
- 304 Not Modified: 캐시된 버전 사용
4xx 클라이언트 오류
- 400 Bad Request: 잘못된 요청 형식
- 401 Unauthorized: 인증 필요
- 403 Forbidden: 권한 없음
- 404 Not Found: 리소스 없음
- 429 Too Many Requests: 요청 한도 초과
5xx 서버 오류
- 500 Internal Server Error: 서버 내부 오류
- 502 Bad Gateway: 게이트웨이 오류
- 503 Service Unavailable: 서비스 일시 중단
중요한 HTTP 헤더들
요청 헤더
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Content-Type: application/json
Accept: application/json
Cache-Control: no-cache
응답 헤더
Set-Cookie: sessionId=abc123; HttpOnly; Secure
Cache-Control: max-age=3600
Access-Control-Allow-Origin: https://mysite.com
Content-Security-Policy: default-src 'self'
실무에서 알아야 할 포인트
DNS 최적화
- DNS 캐시 활용: TTL 값 적절히 설정
- CDN 활용: 지리적으로 가까운 서버 사용
- DNS Prefetch:
<link rel="dns-prefetch" href="//api.example.com">
HTTP 성능 최적화
- Keep-Alive 사용: 연결 재사용으로 성능 향상
- 압축 활용: Gzip, Brotli 압축 적용
- 캐시 전략: 적절한 Cache-Control 헤더 설정
보안 고려사항
- HTTPS 사용: 데이터 암호화
- CORS 설정: 적절한 도메인 허용
- 헤더 보안: CSP, HSTS 등 보안 헤더 적용
디버깅 팁
- 개발자 도구: Network 탭 활용
- curl 명령어: API 테스트
- Postman: API 문서화 및 테스트
# DNS 조회 확인
nslookup google.com
# HTTP 요청 테스트
curl -X GET "https://api.example.com/users" \
-H "Authorization: Bearer token123"
마무리
네트워크 응용 계층의 핵심 개념들을 정리해보았습니다. 이러한 기초 지식은 웹 개발뿐만 아니라 시스템 설계, 성능 최적화, 트러블슈팅에서도 매우 중요합니다.
다음 학습 목록
- RESTful API 설계 원칙
- 웹 소켓과 실시간 통신
- GraphQL vs REST API
- 마이크로서비스 아키텍처
'Deep Dives > CS Fundamentals' 카테고리의 다른 글
CPU 동작 원리와 성능 요소 정리 (0) | 2025.05.28 |
---|---|
컴퓨터 구조 기초 (3) | 2025.05.27 |
전송계층 (2) | 2025.05.25 |
네트워크 계층 (0) | 2025.05.24 |
컴퓨터 네트워크 2 (0) | 2025.05.19 |