✦ 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)
    1. 클라이언트 → 로컬 네임 서버 질의
    2. 로컬 네임 서버 → 루트 네임 서버 질의
    3. 루트 네임 서버 → TLD 네임 서버 질의
    4. TLD 네임 서버 → 책임 네임 서버 질의
    5. 책임 네임 서버 → TLD 네임 서버 답변
    6. TLD 네임 서버 → 루트 네임 서버 답변
    7. 루트 네임 서버 → 로컬 네임 서버 답변
    8. 로컬 네임 서버 → 클라이언트 답변
  • 반복적 질의 (iterative query)
    1. 클라이언트 → 로컬 네임 서버 질의
    2. 로컬 네임 서버 → 루트 네임 서버 질의
    3. 루트 네임 서버 → 로컬 네임 서버 답변
    4. 로컬 네임 서버 → TLD 네임 서버 질의
    5. TLD 네임 서버 → 로컬 네임 서버 답변
    6. 로컬 네임 서버 → 책임 네임 서버 질의
    7. 책임 네임 서버 → 로컬 네임 서버 답변
    8. 로컬 네임 서버 → 클라이언트 답변
  • DNS 캐시 : 네임 서버들이 기존에 응답받은 결과 임시 저장 → 후 활용
    • TTL (Time To Live) : 캐시될 수 있는 시간

◆ 자원을 식별하는 URI

  • 자원 : 네트워크 상의 메시지 통해 주고받는 대상 ex) HTML 파일, 이미지, 동영상, 텍스트

    • HTTP 요청 메시지 대상
  • URI (Uniform Resource Identifier) : 자원 식별할 수 있는 정보

    • ◆ URL (Uniform Resource Locator)
    • 위치를 이용해 자원 식별

      1. scheme : 자원 접근 방법
      2. authority : 호스트 특정 정보
      3. path : 자원이 위치한 경로
      4. query : 특정 자원만 찾기
        • 쿼리 문자열 (query string) = 쿼리 파라미터 (query parameter)
        • ? 시작 <키=값> 형태
      5. 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
pdf
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)
  • 메시지 본문 (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 의 발전

  1. HTTP/0.9
    • 사용 가능 메소드 GET 뿐
    • 요청 메시지 1 줄, 헤더 지원 X
  2. HTTP/1.0
    • GET 이외 메소드 도입, 헤더 지원 시작
    • 지속 연결 지원 X
  3. HTTP/1.1
    • 지속 연결 공식적 지원
    • 파이프라이닝 기능, 콘텐츠 협상 기능
  4. HTTP/2.0
    • 헤더 압축 전송 & 바이너리 데이터 기반 메시지 송수신 → 송수신 효율 ↑
    • 서버 푸시 (server push) 기능 : 미래 필요 예상 자원 미리 전송
    • HOL (Head-Of-Line blocking) 블로킹 문제 완화
    • 첫 번째 패킷 처리 지연 → 나머지도 모두 지연
    • 멀티플렉싱 (multiplexing) 기법 도입해 완화 : 여러 스트림으로 병렬적 메시지 송수신
  5. HTTP/3.0
    • UDP 기반 구현 QUIC (Quick UDP Internet Connections) 프로토콜 기반 동작
    • 속도 측면 개선

✦ HTTP 헤더 & HTTP 기반 기술

◆ HTTP 헤더

  • HTTP 필드 라인에 명시
  • 필드 이름 (헤더 이름): 필드 값(헤더 값)
    • ◆ 요청 시 활용 HTTP 헤더
      1. Host : 요청 보낼 호스트
      • 도메인 네임으로 명시, 포트 번호 포함 가능 1. User-Agent : 웹 브라우저와 같이 HTTP 요청을 시작하는 클라이언트 측 프로그램 ex) 운영체제, 브라우저 종류 · 버전, 렌더링 엔진
    1. Referer : 클라이언트가 요청 보낸 URL
      • 유입 경로 파익 가능
    2. Authorization : 클라이언트 인증 정보 Authorization: <type> <credentials>
    • 기본 타입 : Basic
      • username:password 합친 뒤 Base64 인코딩 값 → 인증 정보 (credential)
      • Base64 : 인코딩 방식 일종
    • ◆ 응답 시 활용 HTTP 헤더
      1. Server : 요청 처리 서버 측 소프트웨어 관련 정보 명시
      2. Allow : 클라이언트 허용 HTTP 메소드 목록 표시
      3. Retry-After : 503 과 함께, 언제 사용 가능한지 표기
      4. Location : 클라이언트에게 자원 위치 알려줄 때 사용
      5. WWW-Authenticate : 401과 함께, 자원 접근 위한 인증 방식 설명
      • 보안 영역 (realm) / 인증 사용 문자집합 (charset)
    • ◆ 요청 & 응답 모두 활용 HTTP 헤더
      1. Date : 메시지 생성 날짜 & 시각 정보
      2. Connection : 클라이언트 요청-응답 간 연결방식 설정
      • keep-alive / close 1. Content-Lenght : 본문 바이트 단위 크기 (길이) 1. Content-Type, Content-Language, Content-Encoding : 메시지 본문 표현 방식
      • 표현 헤더 (representation header)
한국어 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 헤더
        1. 요청 자원 변경 → 200 & new 자원 반환
        2. 요청 자원 변경 X → 304 로 변경 X 알림 (+ Last-Modified)
        3. 요청 자원 삭제 → 404 로 존재 X 알림
      • 엔티티 태그 기반 재검사
        • 엔티티 태그 (entity tag) : 자원 버전 식별 정보 → If-None-Match 헤더
          1. Etag 변경 → 200 & 변경 데이터 & Etag
          2. Etag 동일 → 304
          3. 요청 자원 삭제 → 404 로 존재 X 알림
  • 서버에서 생성 → 클라이언트에 저장
    • 서버가 클라이언트 상태 알 수 있음
    • 보안 한계
  • <이름, 값> 형태
  • 응답 메시지 (서버) : Set-Cookie 헤더 → 쿠키 저장
  • 요청 메시지 (클라이언트) : Cookie 헤더 → 쿠키 내용 전송
  • Expires : 날짜 쿠키 만료 시점
  • Max-Age : 초 단위 유효 기간
  • 보안
    • Secure : HTTPS 사용 시에만 쿠키 전송
    • HttpOnly : HTTP 송수신 통해서만 쿠키 이용 제한

◆ 콘텐츠 협상 & 표현

  • 콘텐츠 협상 (content negotiation) : 같은 URI에 가장 적합한 ‘자원 형태’ 제공 메커니즘
  • 표현 (representation) : 송수신 가능한 자원의 형태
  • Accept : 선호 미디어 타입
  • Accept-Language : 선호 언어
  • Accept-Charset, Accept-Encoding : 선호 문자 인코딩, 압축 방식

글 이동

시리즈 이동

Comments