[Network] 응용 계층
✦ DNS와 자원
◆ 도메인 네임과 네임 서버
-
도메인 네임 (Domain name) : 호스트의 IP 주소와 대응되는 문자열 형태 호스트 특정 정보 ex) www.example.com, www.naver.com
-
.기준 계층적 분류
- 최상단 → 루트 도메인 (Root domain)
- 그 다음 → 최상위 도메인 (TLD : Top-Level Domain)
- 그 다음 → 2단계 도메인 (Second-level domain)
-
전체 주소 도메인 네임 (FQDN : Fully Qualified Domain Name)
- 모든 도메인 네임 포함 도메인 네임
- 호스트 네임 (Host name) : FQDN 첫 번째 부분 (www)
-
- 네임 서버 (Name server)
- 도메인 주소 - IP 주소 쌍 저장. like 전화번호부
- DNS 서버
- 도메인 네임 시스템 (DNS : Domain Name System)
- 계층적 & 분산된 도메인 네임 대한 관리 체계
- 애플리케이션 계층 프로토콜
◆ 계층적 네임 서버
- 도메인 네임 풀이 (resolve) , 리졸빙 (resolving) : IP 주소 모르는 상태에서 도메인 네임 대응 IP 주소 알아내는 과정
- 네임 서버 유형
- ◆ 로컬 네임 서버 (Local Name Server)
- 클라이언트와 맞닿아 있는 네임 서버
- IP 주소 알아내고자 할 때 가장 먼저 찾는 네임 서버
- 일반적으로 ISP 할당
-
공개 DNS 서버 (public DNS server) ex) 구글 : 8.8.8.8, 8.8.4.4 / 클라우드 플래어 : 1.1.1.1
- ◆ 루트 네임 서버 (Root Name Server)
- 로컬 네임 서버가 대응 IP 주소 모를 때
- 루트 도메인 관장 네임 서버
- 질의에 대해 TLD 네임 서버 IP 주소 반환
- ◆ TLD 네임 서버
- TLD 관리 네임 서버
- ◆ 책임 네임 서버 (Authoritative Name Server)
- 특정 도메인 영역 (zone) 관리 네임 서버
- 자신 관리 영역 질의 대해서는 곧바로 대답

- 재귀적 질의 (recursive query)
- 클라이언트 → 로컬 네임 서버 질의
- 로컬 네임 서버 → 루트 네임 서버 질의
- 루트 네임 서버 → TLD 네임 서버 질의
- TLD 네임 서버 → 책임 네임 서버 질의
- 책임 네임 서버 → TLD 네임 서버 답변
- TLD 네임 서버 → 루트 네임 서버 답변
- 루트 네임 서버 → 로컬 네임 서버 답변
- 로컬 네임 서버 → 클라이언트 답변
- 반복적 질의 (iterative query)
- 클라이언트 → 로컬 네임 서버 질의
- 로컬 네임 서버 → 루트 네임 서버 질의
- 루트 네임 서버 → 로컬 네임 서버 답변
- 로컬 네임 서버 → TLD 네임 서버 질의
- TLD 네임 서버 → 로컬 네임 서버 답변
- 로컬 네임 서버 → 책임 네임 서버 질의
- 책임 네임 서버 → 로컬 네임 서버 답변
- 로컬 네임 서버 → 클라이언트 답변
- DNS 캐시 : 네임 서버들이 기존에 응답받은 결과 임시 저장 → 후 활용
- TTL (Time To Live) : 캐시될 수 있는 시간
◆ 자원을 식별하는 URI
-
자원 : 네트워크 상의 메시지 통해 주고받는 대상 ex) HTML 파일, 이미지, 동영상, 텍스트
- HTTP 요청 메시지 대상
-
URI (Uniform Resource Identifier) : 자원 식별할 수 있는 정보
- ◆ URL (Uniform Resource Locator)
-
위치를 이용해 자원 식별

- scheme : 자원 접근 방법
- authority : 호스트 특정 정보
- path : 자원이 위치한 경로
- query : 특정 자원만 찾기
- 쿼리 문자열 (query string) = 쿼리 파라미터 (query parameter)
?시작<키=값>형태
- fragment : 자원의 한 조각을 가리키기 위한 정보
- HTML 특정 부분 가리키기 위해 사용
- ◆ URN (Uniform Resource Name)
- 이름 이용해 자원 식별
- 자원 위치 무관하게 자원 식별 가능
ex)
urn:isbn:045140523
◆ DNS 레코드 타입
- DNS 자원 레코드 (DNS resource record)
- 네임 서버에 의해 관리
- 이름 (호스트 이름, Record nave)
- 값 (값/위치, Value)
- 레코드 유형
| A | 도메인 네임 - IPv4 주소 대응 관계 |
| AAAA | 도메인 네임 - IPv6 주소 대응 관계 |
| CNAME | 호스트 네임 별칭 |
| NS | 특정 호스트 IP 주소 찾을 수 있는 네임 서버 |
| MX | 해당 도메인과 연동된 메일 서버 |
✦ HTTP
◆ HTTP 의 특성
- HTTP (Hyper Text Transfer Protocol) : 응용 계층에서 정보 주고받는 데 사용되는 프로토콜
- ◆ 요청-응답 기반 프로토콜
-
클라이언트 - 서버 구조 기반의 요청 - 응답 프로토콜

- ◆ 미디어 독립적 프로토콜
- 주고받을 자원 특성 무관, 그저 자원 주고받을 수단 (인터페이스) 역할 수행
-
미디어 타입 (media type) : HTTP 에서 메시지로 주고받는 지원 종류 = MIME 타입 (Multipurpose Internet Mail Extensions Type)
- 타입 (type) : 데이터 유형
- 서브타입 (subtype) : 주어진 타입 대한 세부 유형
| text | 일반 텍스트 | plain html css javascript |
| image | 이미지 | png jpeg webp gif |
| video | 비디오 | mp4 ogg webm |
| audio | 오디오 | midi wav |
| application | 바이너리 데이터 | octet-stream xml json x-www-form-urlencoded |
| multipart | 여러 요소 데이터 | form-data encrypted |
- 주고받을 미디어 타입 제한 X, 독립적 동작 可
- ◆ 스테이트리스 프로로콜
- 스테이트리스 (stateless) : 상태 유지 X
- 서버 → HTTP 요청 클라이언트 상태 기억 X
- 모든 HTTP 요청은 독립적 요청
- 확장성 (scalability) : 특정 서버 종속 X, 서버 추가 용이
- 견고성 (robustness) : 문제 생겨도 다른 서버 대체 가능
- ◆ 지속 연결 프로토콜
-
지속 연결 (persistent connection) : 한 TCP 연결에서 여러 요청 - 응답 가능 기술 = 킵 얼라이브 (keep-alive)
- 매번 new 연결 수립 & 종료 X
◆ HTTP 메시지 구조
```plain text 시작 라인 필드라인 (0개 이상)
메시지 본문 (선택적) ```
- 시작 라인 (start-line)
-
요청 라인 : HTTP 요청 메시지
메소드 요청대상 HTTP버전-
메소드 (method) : 클라이언트가 서버의 자원에 대해 수행할 작업 종류 ex) GET, POST, PUT, DELETE
- 요청 대상 (request-target) : HTTP 요청 보낼 서버 자원
- URL 경로 (path) 명시
- HTTP 버전 (HTTP-version)
-
-
상태 라인 : HTTP 응답 메시지
HTTP버전 상태코드 이유구문- HTTP 버전 (HTTP-version)
- 상태 코드 (status code) : 요청 대한 결과 나타내는 세 자리 정수
- 이유 구문 (reason phrase) : 상태 코드 대한 문자열 형태 설명
ex)
HTTP/1.1 404 Not Found
-
- 필드 라인 (field-line)
- 0개 이상 HTTP 헤더 (HTTP header) 명시 → 헤더 라인 (header-line)
- HTTP 헤더 : HTTP 통신 필요 부가 정보
:기준 헤더 이름 (header-name) : 헤더 값 (header-value)
- 0개 이상 HTTP 헤더 (HTTP header) 명시 → 헤더 라인 (header-line)
- 메시지 본문 (message-body)
- 존재 O / X 둘다 가능
◆ HTTP 메소드
- 종류
| GET | 자원 습득 위한 메소드 |
| HEAD | GET 유사, but 헤더만 응답 |
| POST | 서버가 특정 작업 처리 |
| PUT | 자원 대체 위한 메소드 |
| PATCH | 자원 부분적 수정 메소드 |
| DELETE | 자원 삭제 위한 메소드 |
| CONNECT | 자원 대한 양방향 연결 시작 메소드 |
| OPTIONS | 사용 가능 메소드 등 통신 옵션 확인 메소드 |
| TRACE | 자원 루프백 테스트 수행 메소드 |
- GET : 특정 자원 조회
- 가장 흔히 사용
- 요청 대상, Host 헤더
- HEAD : 헤더만 조회
- POST : 서버가 특정 작업 처리
- 범용성 多
- 클라이언트가 서버에 new 자원 생성할 때
- 성공적 생성 → 응답 메시지 Location 헤더
- PUT : 덮어쓰기, 완전한 대체
- PATCH : 일부 수정
- DELETE : 삭제
- 같은 URL 요청, 다른 메소드 → 다른 요청 간주
- API 문서 : URL로 어떤 요청 받았을 때 어떻게 응답? 설명 문서
◆ HTTP 상태 코드
- 코드 유형
| 100번대 (100~199) | 정보성 상태 코드 |
| 200번대 (200~299) | 성공 상태 코드 |
| 300번대 (300~399) | 리다이렉션 상태 코드 |
| 400번대 (400~499) | 클라이언트 에러 상태 코드 |
| 500번대 (500~599) | 서버 에러 상태 코드 |
- ◆ 200번대 : 성공 상태 코드
| 200 | OK | 요청 성공 |
| 201 | Created | 요청 성공 + new 자원 생성 |
| 202 | Accepted | 요청 성공 but 아직 작업 완료 X |
| 203 | No Content | 요청 성공 but 메시지 본문 데이터 X |
- ◆ 300번대 : 리다이렉션 상태 코드
- 리다이렉션 (redirection) : 요청 완수 위해 추가적 조치 필요 상태
- 영구적 리다이렉션 (permanent redirection) : 자원 완전 new 장소 이동, 경로 영구적 재지정
- 일시적 리다이렉션 (temporary redirection) : 자원 위치 임시 변경 or 임시 사용 URL 필요
| 301 | Moved Permanently | 영구적 리다이렉션 : 재요청 메소드 변경 가능 |
| 308 | Permanent Redirect | 영구적 리다이렉션 : 재요청 메소드 변경 불가 |
| 302 | Found | 일시적 리다이렉션 : 재요청 메소드 변경 가능 |
| 303 | See Other | 일시적 리다이렉션 : 재요청 메소드 GET 으로 변경 |
| 307 | Temporary Redirect | 일시적 리다이렉션 : 재요청 메소드 변경 X |
- ◆ 400번대 : 클라이언트 에러 상태 코드
| 400 | Bad Request | 클라이언트 잘못된 요청 |
| 401 | Unauthorized | 요청 자원 대한 유효 인증 X |
| 403 | Forbidden | 요청이 서버에 의해 거부 (ex. 접근 권한 X) |
| 404 | Not Found | 요청 자원 못 찾음 |
| 405 | Method Not Allowed | 요청 메소드 지원 X |
- 인증 (Authentication) : 자신이 누구인지 증명
- WWW-Authenticate 헤더 통해 인증 방법 알려줘야 함
- 권한 부여 (Authorization) : 인증된 주체에게 작업 허용 (= 인가)
- ◆ 500번대 : 서버 에러 상태 코드
| 500 | Internal Server Error | 요청 처리 불가 |
| 502 | Bad Gateway | 중간 서버 통신 오류 |
| 503 | Service Unavailable | 현재 요청 처리 불가, 나중에 가능할 수도? |
◆ HTTP 의 발전
- HTTP/0.9
- 사용 가능 메소드 GET 뿐
- 요청 메시지 1 줄, 헤더 지원 X
- HTTP/1.0
- GET 이외 메소드 도입, 헤더 지원 시작
- 지속 연결 지원 X
- HTTP/1.1
- 지속 연결 공식적 지원
- 파이프라이닝 기능, 콘텐츠 협상 기능
- HTTP/2.0
- 헤더 압축 전송 & 바이너리 데이터 기반 메시지 송수신 → 송수신 효율 ↑
- 서버 푸시 (server push) 기능 : 미래 필요 예상 자원 미리 전송
- HOL (Head-Of-Line blocking) 블로킹 문제 완화
- 첫 번째 패킷 처리 지연 → 나머지도 모두 지연
- 멀티플렉싱 (multiplexing) 기법 도입해 완화 : 여러 스트림으로 병렬적 메시지 송수신
- HTTP/3.0
- UDP 기반 구현 QUIC (Quick UDP Internet Connections) 프로토콜 기반 동작
- 속도 측면 개선
✦ HTTP 헤더 & HTTP 기반 기술
◆ HTTP 헤더
- HTTP 필드 라인에 명시
- 필드 이름 (헤더 이름): 필드 값(헤더 값)
- ◆ 요청 시 활용 HTTP 헤더
- Host : 요청 보낼 호스트
- 도메인 네임으로 명시, 포트 번호 포함 가능 1. User-Agent : 웹 브라우저와 같이 HTTP 요청을 시작하는 클라이언트 측 프로그램 ex) 운영체제, 브라우저 종류 · 버전, 렌더링 엔진
- Referer : 클라이언트가 요청 보낸 URL
- 유입 경로 파익 가능
- Authorization : 클라이언트 인증 정보
Authorization: <type> <credentials>
- 기본 타입 : Basic
- username:password 합친 뒤 Base64 인코딩 값 → 인증 정보 (credential)
- Base64 : 인코딩 방식 일종
- ◆ 응답 시 활용 HTTP 헤더
- Server : 요청 처리 서버 측 소프트웨어 관련 정보 명시
- Allow : 클라이언트 허용 HTTP 메소드 목록 표시
- Retry-After : 503 과 함께, 언제 사용 가능한지 표기
- Location : 클라이언트에게 자원 위치 알려줄 때 사용
- WWW-Authenticate : 401과 함께, 자원 접근 위한 인증 방식 설명
- 보안 영역 (realm) / 인증 사용 문자집합 (charset)
- ◆ 요청 & 응답 모두 활용 HTTP 헤더
- Date : 메시지 생성 날짜 & 시각 정보
- Connection : 클라이언트 요청-응답 간 연결방식 설정
- keep-alive / close 1. Content-Lenght : 본문 바이트 단위 크기 (길이) 1. Content-Type, Content-Language, Content-Encoding : 메시지 본문 표현 방식
- 표현 헤더 (representation header)
- ◆ 요청 시 활용 HTTP 헤더
| 한국어 | ko | 한국 | KR |
| 영어 | en | 미국 영국 |
US GB |
| 중국어 | zh | 중국 타이완 |
CN TW |
| 일본어 | ja | 일본 | JP |
| 독일어 | de | 독일 | DE |
| 프랑스어 | fr | 프랑스 | FR |
◆ 캐시 (cache)
- 정보 사본 임시 저장 → 불필요 대역폭 낭비, 응답 지연 방지
- 원본 X
- 개인 전용 캐시 (private cache) : 웹 브라우저 저장
- 공용 캐시 (public cache) : 클라이언트 - 서버 사이 중간 서버 저장
- 캐시 신선도 (cache freshness) : 사본이 얼마나 최신 원본과 유사?
- 유지법 → 캐시 데이터 유효 기간 설정
- Expires 헤더 (날짜)
- Cache-Control 헤더 Max-Age 값 (초)
- 재검사
- 날짜 기반 재검사 : If-Modified-Since 헤더
- 요청 자원 변경 → 200 & new 자원 반환
- 요청 자원 변경 X → 304 로 변경 X 알림 (+ Last-Modified)
- 요청 자원 삭제 → 404 로 존재 X 알림
- 엔티티 태그 기반 재검사
- 엔티티 태그 (entity tag) : 자원 버전 식별 정보 → If-None-Match 헤더
- Etag 변경 → 200 & 변경 데이터 & Etag
- Etag 동일 → 304
- 요청 자원 삭제 → 404 로 존재 X 알림
- 엔티티 태그 (entity tag) : 자원 버전 식별 정보 → If-None-Match 헤더
- 날짜 기반 재검사 : If-Modified-Since 헤더
- 유지법 → 캐시 데이터 유효 기간 설정
◆ 쿠키 (cookie)
- 서버에서 생성 → 클라이언트에 저장
- 서버가 클라이언트 상태 알 수 있음
- 보안 한계
- <이름, 값> 형태
- 응답 메시지 (서버) : Set-Cookie 헤더 → 쿠키 저장
- 요청 메시지 (클라이언트) : Cookie 헤더 → 쿠키 내용 전송
- Expires : 날짜 쿠키 만료 시점
- Max-Age : 초 단위 유효 기간
- 보안
- Secure : HTTPS 사용 시에만 쿠키 전송
- HttpOnly : HTTP 송수신 통해서만 쿠키 이용 제한
◆ 콘텐츠 협상 & 표현
- 콘텐츠 협상 (content negotiation) : 같은 URI에 가장 적합한 ‘자원 형태’ 제공 메커니즘
- 표현 (representation) : 송수신 가능한 자원의 형태
- Accept : 선호 미디어 타입
- Accept-Language : 선호 언어
- Accept-Charset, Accept-Encoding : 선호 문자 인코딩, 압축 방식
공유하기
Twitter Facebook LinkedIn글 이동
시리즈 이동
Comments