응용계층 , HTTP

2025. 5. 26. 14:23·Deep Dives/CS Fundamentals

네트워크 응용 계층과 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

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 캐시 시스템

성능 최적화를 위해 각 단계에서 캐시를 활용합니다.

캐시 단계별 흐름

  1. 브라우저 캐시 → 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 최적화

  1. DNS 캐시 활용: TTL 값 적절히 설정
  2. CDN 활용: 지리적으로 가까운 서버 사용
  3. DNS Prefetch: <link rel="dns-prefetch" href="//api.example.com">

HTTP 성능 최적화

  1. Keep-Alive 사용: 연결 재사용으로 성능 향상
  2. 압축 활용: Gzip, Brotli 압축 적용
  3. 캐시 전략: 적절한 Cache-Control 헤더 설정

보안 고려사항

  1. HTTPS 사용: 데이터 암호화
  2. CORS 설정: 적절한 도메인 허용
  3. 헤더 보안: CSP, HSTS 등 보안 헤더 적용

디버깅 팁

  1. 개발자 도구: Network 탭 활용
  2. curl 명령어: API 테스트
  3. 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
'Deep Dives/CS Fundamentals' 카테고리의 다른 글
  • CPU 동작 원리와 성능 요소 정리
  • 컴퓨터 구조 기초
  • 전송계층
  • 네트워크 계층
Jcob.moon
Jcob.moon
반가워요~ 하루하루 꾸준히 코딩 작성하는 곳입니다 !!
  • Jcob.moon
    Pixelated Thoughts
    Jcob.moon
  • 전체
    오늘
    어제
    • HelloWorld (174) N
      • Daily Logs (123) N
        • TIL (Today I Learned) (64) N
        • Algorithm Practice (55)
        • Dev Book Notes (4)
      • Deep Dives (36)
        • 문제 해결 (Troubleshooting) (3)
        • CS Fundamentals (22)
        • Career Prep (4)
        • Technical Notes (7)
      • Project Log (7)
      • Any (3)
      • Cooperation (4)
        • Github (2)
        • Conventions (1)
        • Git (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
Jcob.moon
응용계층 , HTTP
상단으로

티스토리툴바