2025-11-25

오늘 배운 것

05-1 DNS와 자원

도메인 네임과 네임 서버

  • 도메인 네임 : 호스트의 IP 주소와 대응되는 문자열 형태의 호스트 특정 정보
    • IP 주소에 비해 기억하기 쉬움
  • 네임서버 : 도메인 네임과 IP 주소를 관리
    • DNS 서버 : 도메인 네임을 관리하는 네임 서버
      • 도메인 네임을 통해 IP 주소를 알아낼 수 있음
      • IP 주소가 바뀌더라도 바뀐 IP 주소에 도메인 네임을 다시 대응하면 되므로 간편함
  • 전체 주소 도메인 네임(FQDN : Fully-Qualified Domain Name) 구성
    • 루트 도메인 → .
      • 도메인 네임의 마지막에 점이 찍힌 형태로 표기
      • 일반적으로 루트 도메인을 생략해서 표기
    • 최상위 도메인(TLD)
      • 도메인 네임의 마지막 부분
      • 예: com, net, org, kr
    • 2단계 도메인
      • www.example.com에서 example
    • 3단계 도메인
      • www.example.com에서 www
  • 서브 도메인
    • 다른 도메인이 포함된 서브 도메인
    • mail.google.com → google.com의 서브도메인
    • google.com → com의 서브 도메인

계층적 네임 서버

  • 리졸빙
    • IP 주소를 모르는 상태에서 도메인 네임에 대응되는 IP 주소를 알아내는 과정
  • 로컬 네임 서버
    • 클라이언트와 맞닿아 있는 네임 서버
    • 클라이언트가 도메인 네임을 통해 IP 주소를 알아내고자 할 때 가장 먼저 찾게 되는 네임서버
    • 로컬 네임 서버의 주소는 일반적으로 ISP에서 할당
      • 공개 DNS 서버를 이용해서 할당 할 수 도 있음
        • 예 : 구글의 8.8.8.8, 8.8.4.4, 클라우드 플레어의 1.1.1.1
  • 루트 네임 서버
    • 루트 도메인을 관장하는 네임 서버로, 질의에 대해 TLD 네임 서버의 IP 주소를 반환
    • 로컬 네임 서버가 대응되는 IP 주소를 모를때 질의 하는 서버
  • TLD 네임 서버
    • TLD를 관리하는 네임 서버
    • TLD의 하위 도메인 네임을 관리하는 네임 서버 주소 반환
  • 책임 네임 서버
    • 특정 도메인 영역을 관리하는 네임 서버로, 자신이 관리하는 도메인 영역의 질의에 대해서는 다른 네임서버에게 떠넘기지 않고 곧바로 답할 수 있는 네임 서버
    • 로컬 네임 서버가 마지막으로 질의하는 네임 서버
  • 재귀적 질의
    • 클라이언트가 로컬 네임 서버에게 도메인 네임 질의
    • 로컬 네임서버가 루트 네임서버에게 질의
    • 루트 네임서버가 TLD 네임 서버에게 질의
    • TLD 서버가 다음 단계에 질의하는 과정을 반복
    • 최종 응답 결과를 역순으로 전달 받음
  • 반복적 질의
    • 클라이언트가 로컬 네임서버에게 도메인 네임 질의
    • 로컬 네임서버가 루트 네임 서버에게 질의해 다음으로 질의할 네임서버 주소를 응답받음
    • 그다음 로컬 네임서버가 해당 TLD 네임 서버에게 질의해서 다음으로 질의할 네임 서버의 주소를 응답 받는 과정을 반복
    • 최종응답 결과를 클라이언트에게 알려줌
  • DNS 캐시
    • 리졸빙 과정은 시간이 오래걸리고 네트워크상의 메시지 수가 지나치게 늘어날 수 있음
    • 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 이를 활용하기 위해 사용하는 캐시
    • TTL이라는 값과 함께 저장되어 이게 만료되면 해당 정보 삭제

자원을 식별하는 URI

  • 자원 : 네트워크 상의 메시지를 통해 주고받는 대상
    • HTML, 이미지, 동영상, 텍스트 파일 등등
  • URI(Uniform Resource Identifier) : 자원을 식별할 수 있는 정보
    • URL(Uniform Resource Locator) : 위치를 이용해 자원을 식별
    • URN(Uniform Resource Name) : 이름을 이용해 자원을 식별

URL

image.png

  • scheme
    • 자원에 접근하는 방법
    • 일반적으로 사용할 프로토콜 명시
    • http, https
  • authority
    • 호스트를 특정할 수 있는 정보
    • IP주소, 도메인네임
    • 콜론 뒤에 포트 번호를 덧붙일 수도 있음
  • path
    • 자원이 위치한 경로
    • /(최상위 경로) 를 기준으로 계층적으로 자원의 위치를 표현
  • query
    • 물음표로 시작되는 <키=값> 형태의 데이터
    • 앰퍼샌드를 사용하여 여러 쿼리 문자열을 연결하요 표현
  • fragment
    • 자원의 한 조각을 가리키기 위한 정보
    • 흔히 HTML 파일과 같은 자원에서 특정 부분을 가리키기 위해 사용

05-2 HTTP

HTTP의 특성

  • HTTP(Hypertext Transfer Protocol) : 응용계층에서 정보를 주고받는데 사용되는 프로토콜

요청-응답 기반 프로토콜

  • HTTP 는 클라이언트-서버 구조 기반의 요청-응답 프로토콜

미디어 독립적 프로토콜

  • HTTP는 주고받을 수 있는 자원의 특성을 제한하지 않고 그저 자원을 주고받을 수단의 역할만을 수행
  • 미디어 타입 : HTTP 에서 메시지로 주고받는 자원의 종류
    • MIME타입(Multipurpose Internet Mail Extension Type)이라고도 불림
    • 타입/서브타입 형식으로 구성
      • 타입 : 데이터의 유형
      • 서브타입 : 주어진 타입에 대한 세부 유형
      • text/html, text/plain, image/png
    • 부가적인 설명을 위해 선택적으로 매개변수가 포함될 수 있음
      • 타입/서브타입;매개변수=값

스테이트리스 프로토콜

  • HTTP는 상태를 유지하지 않는 스테이트리스 프로토콜
  • 클라이언트의 모든 HTTP 요청은 기본적으로 독립적인 요청으로 간주
  • 장점
    • 특정 서버에 종속되지 않아 장애 시에도 통신·서비스 영향 최소화
    • 상태를 저장하지 않기 때문에 서버 간 상태 공유가 필요 없어 구조가 단순하고 관리가 쉬움
    • 서버를 추가하거나 교체하기 수월해 확장성과 대응력이 높음
    • 상태 저장 부담이 없어서 많은 동시 요청을 처리할 때 서버 부하가 줄어듦

지속 연결 프로토콜

  • HTTP 1.0 이하는 비지속 연결
    • HTTP 는 TCP상에서 동작
    • HTTP는 비연결형 프로토콜, TCP는 연결형 프로토콜
    • 쓰리 웨이 핸드셰이크를 통해 TCP 연결 수립 후 요청 응답 받으면 연결 종료
    • 추가 요청-응답을 위해서는 다시 TCP 연결 수립해야함
  • HTTP 1.1 이상은 지속 연결(킵 얼라이브)
    • 매번 새롭게 연결 수립하고 종료하지 않아도 됨

HTTP 메시지 구조

  • 시작 라인, 필드 라인, 메시지 본문으로 이루어져 있음
  • 필드라인은 0개 이상
  • 메시지 본문은 없을 수 있음
  • 필드라인과 메시지 본문 사이에는 빈 줄바꿈 존재
  • 시작 라인
    • 요청 메시지 일때는 요청 라인, 응답 메시지 일때는 상태 라인
    • 요청 라인
      • 메서드 (공백) 요청 대상 (공백) HTTP 버전 (줄바꿈)
      • 메서드 : 클라이언트가 서버의 자원에 대해 수행할 작업의 종류
        • GET, POST, PUT DELETE 등
      • 요청 대상
        • HTTP 요청을 보낼 서버의 자원
        • /hello?q=world, /
      • HTTP 버전
        • HTTP/1.1
    • 상태 라인
      • HTTP 버전 (공백) 상태코드 (공백) 이유구문* (줄바꿈)
          • 선택적
      • 상태코드
        • 요청에 대한 결과를 나타내는 세 자리 정수
      • 이유 구문
        • 상태 코드에 대한 문자열 형태의 설명
  • 필드 라인(헤더 라인이라고도 불림)
    • 0개 이상의 HTTP 헤더가 명시
      • 사실 일반적으로는 다양한 헤더들이 사용됨
    • 헤더이름: 헤더 값 → 으로 구성
    • Host: www.example.com
  • 메시지 본문
    • HTTP 요청 혹은 응답 메시지에서 본문이 필요할 경우 명시
    • 없을 수도 있고 다양한 콘텐츠 타입이 사용될 수 있음

HTTP 메서드

  • GET : 자원을 습득하기 위한 메서드
  • HEAD : GET과 동일하나, 헤더만을 응답받는 메서드
  • POST : 서버로 하여금 특정 작업을 처리하게끔 하는 메서드
  • PUT : 자원을 대체하기 위한 메서드
  • PATCH : 자원에 대한 부분적 수정을 위한 메서드
  • DELETE : 자원을 삭제하기 위한 메서드
  • CONNECT : 자원에 대한 양방향 연결을 시작하는 메서드
  • OPTIONS : 사용 가능한 메서드 등 통신 옵션을 확인하는 메서드
  • TRACE : 자원에 대한 루프백 테스트를 수행하는 메서드

GET - 가져다 주세요

  • 특정 자원을 조회할 때 사용
  • GET 요청 메시지 본문을 포함시키는 것은 바람직하지 않음
    • 쿼리 문자열을 통해 자원 요청

HEAD - 헤더만 가져다주세요

  • GET과 동일하나 응답 메시지에 메시지 본문이 포함되지 않음

POST - 처리해 주세요

  • 서버가 특정 작업을 처리하도록 요청하는 메서드
    • 대부분 새로운 자원을 생성하고자 할 때 사용
    • 만약 성공적으로 요청 처리되면 Location 헤더를 통해 새로 생성된 자원의 위치를 알려줄 수 있음

PUT - 덮어써 주세요

  • 덮어쓰기 요청
  • 자원이 없으면 새로 생성, 존재하면 완전히 대체

PATCH - 일부 수정해 주세요

  • 부분적 수정

DELETE - 삭제해 주세요

  • 특정 자원 삭제

API 문서

  • 어떤 URL로 어떤 요청을 받을 때 서버의 응답을 잘 보여주는 문서

HTTP 상태 코드

200번대: 성공 상태 코드

200 OK 요청이 성공
201 Created 요청이 성고, 새로운 자원 생성
202 Accepted 요청은 받았으나, 아직 요청 작업을 끝내지 않았음
204 No Content 요청은 성공했지만, 메시지 본문으로 표시할 데이터가 없음

300번대: 리다이렉션 상태 코드

  • 리다이렉션 : 요청을 완수하기 위해 추가적인 조치가 필요한 상태
    • 클라이언트가 요청한 자원이 다른 곳에 있을 때, 클라이언트의 요청을 다른 곳으로 이동시키는 것
      • 이때 다른곳은 URL이 될 수도 있고, 캐시가 될 수도 있음
    • 영구적인 리다이렉션 : 자원이 완전히 새로운 곳으로 이동하여 경로가 영구적으로 재지정

      | 301 | Moved Permanently | 영구적 리다이렉션, 재요청 메서드 변경될 수 있음 | | — | — | — | | 308 | Permanent Redirect | 영구적 리다이렉션, 재요청 메서드 변경되지 않음 |

      • 301 : GET으로 요청후 301 → GET이거나 다른거 일수도 있음
      • 308 : POST로 요청 후 308 → 무조건 POST 로 유지
    • 일시적인 리다이렉션 : 자원의 위치가 임시로 변경되거나 임시로 사용할 URL이 필요한 경우
      • 일시적인 리다이렉션 상태코드를 받으면 요청을 보낸 URL을 기억해야 함

        302 Found 일시적 리다이렉션, 재요청 메서드 변경될 수 있음
        303 See Other 일시적 리다이렉션, 재요청 메서드 GET으로 변경
        307 Temporary Redirect 일시적 리다이렉션, 재요청 메서드 변경되지 않음

results matching ""

    No results matching ""