2 minute read

DNS (Domain Name System)

  • www.example.com 과 같이, 인터넷에서 사용되는 호스트 이름을 192.0.0.1과 같은 IP 주소로 변환하는 시스템이다.

동작 방식

  1. 사용자가 웹 브라우저에서 도메인 이름을 입력한다
  2. 브라우저는 로컬 DNS 캐시를 검색한다
  3. 로컬 DNS 캐시에 해당 도메인 이름이 없으면, 브라우저는 DNS 요청을 생성한다.
  4. DNS 요청은 먼저 사용자의 컴퓨터에서 인터넷으로 전송된다.
  5. 인터넷 상에서 DNS 서버들 사이에 요청이 전달되며, DNS 서버가 요청을 처리한다.
  6. 요청이 처리되면, DNS 서버는 응답으로 해당 도메인 이름에 대한 IP 주소를 반환한다.
  7. IP 주소를 인터넷을 통해 사용자의 컴퓨터로 전송한다.
  8. 브라우저는 IP 주소를 이용하여 웹 서버에 접속한다.

DNS의 주요 기능

  • 호스트 이름과 IP 주소 간의 매핑 제공
  • 도메인 이름 계층 구조 관리
  • DNS 캐싱을 통한 인터넷 트래픽 감소

DNS 캐시

  • DNS 서버에서 도메인 이름과 IP 주소 간의 매핑 정보를 저장하는 공간

DNS 레코드 타입

여러가지 종류의 레코드 타입을 가지고 있으나, 가장 많이 사용되는 것은 다음의 두가지이다.

  • A 레코드
    • 도메인 이름과 IP 주소 간의 매핑 정보를 제공한다.
  • CNAME 레코드
    • 한 도메인 이름이 다른 도메인 이름을 가리키도록 설정한다. 하나의 IP 주소를 여러 도메인 이름으로 사용할 수 있게 한다.

DNS 오버로드

  • DNS 서버는 대량의 DNS 요청을 처리해야 하므로, DNS 서버 오버로드는 웹 애플리케이션 성능에 영향을 미칠 수 있다.
  • DNS 캐시를 적극적으로 활용하고, 로드 밸런서를 이용하여 DNS 서버 부하를 분산해 오버로드를 방지해야 한다.

Blocking / Non-blocking

  • 작업을 수행할 때 제어권이 있는지에 따라 구분한다.

  • Blocking

    • 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 자신의 작업을 멈추고 해당 작업을 기다린 후 자신의 작업을 시작한다.

  • Non-blocking
    • 다른 주체의 작업에 관련 없이 자신의 작업을 수행한다.

Synchronous / Asynchronous

  • 특정 작업 수행시 해당 작업의 완료 여부를 확인하는지에 따라 구분한다.
  • 처리해야 할 작업을 어떤 흐름으로 처리할 것인가에 대한 관점이다.

  • Synchronous
    • 호출하는 함수가 호출되는 함수의 작업 완료 후 리턴을 기다리거나, 리턴 받더라도 미완료 상태이면 작업 완료 상태임을 계속 확인한다.
  • Asynchronous
    • 호출하는 함수가 호출되는 함수에게 콜백 함수를 함께 전달해서, 호출되는 함수의 작업이 완료되면 콜백 함수를 실행한다.
    • 호출하는 함수에서 호출되는 함수의 작업 완료 여부를 신경쓰지 않는다.
  • 위에서 살펴보았듯이 Sync와 Async, Blocking과 non-blocking은 상이한 개념이므로, Sync-Blocking, Sync-NonBlocking, Async-Blocking, Async-NonBlocking 으로 조합하여 사용이 가능하다.
  Sync-Blocking Sync-NonBlocking Async-Blocking Async-NonBlocking
Result 직접 반환 받음 직접 반환 받음 간접적으로 반환 간접적으로 반환
Control 호출한 함수에서 제어 호출한 함수에서 제어 호출한 함수에게 제어 호출한 함수에게 제어
Execution 다른 함수에게 제어권을 넘김 다른 함수에게 제어권을 넘기지 않음 다른 함수에게 제어권을 넘김 다른 함수에게 제어권을 넘기지 않음
Usage JAVA Spring 의도치 않게 실수로 사용될 수 있음 AJAX 요청 등에서 사용됨 JS 비동기 콜백 등에서 사용됨

웹 통신의 흐름

  1. 클라이언트가 서버에 요청(Request)을 보낸다.
    • 요청은 HTTP 프로토콜을 사용하며, 요청 메서드(GET, POST, PUT, DELETE 등)와 함께 요청 URL, 헤더, 바디 등의 정보를 포함한다.
  2. 서버는 요청을 받아서 처리하고, 클라이언트에게 응답(Response)을 보낸다.
    • 응답은 HTTP 프로토콜을 사용하며, 응답 상태 코드(200, 404, 500 등)와 함께 헤더, 바디 등의 정보를 포함한다.
  3. 클라이언트는 서버로부터 받은 응답을 처리한다.
    • 응답 바디는 HTML, JSON, 이미지 등의 데이터 형식일 수 있다.
  4. 클라이언트는 필요에 따라 추가적인 요청을 보내거나, 브라우저에 표시할 콘텐츠를 렌더링한다.

www.example.com 을 입력했을 때 (DNS의 웹 앱 라우팅 과정)

  1. 사용자가 웹 브라우저에서 웹 앱의 도메인 이름을 입력
  2. 사용자의 컴퓨터는 로컬 DNS 캐시에 저장된 도메인 이름과 IP 주소 매핑을 확인
  3. 로컬 DNS 캐시에 매핑이 없으면, 사용자의 컴퓨터는 인터넷 서비스 공급자(ISP)의 DNS 서버에 도메인 이름을 요청
  4. ISP의 DNS 서버는 도메인 이름을 기반으로 다른 DNS 서버에 질의하여 IP 주소를 검색
  5. DNS 서버는 IP 주소를 반환하고, ISP의 DNS 서버는 이를 사용자의 컴퓨터에게 반환
  6. 사용자의 컴퓨터는 반환된 IP 주소를 사용하여 웹 애플리케이션 서버에 요청
  7. 웹 애플리케이션 서버는 요청을 수락하고, 해당하는 웹 페이지를 반환
  8. 사용자의 웹 브라우저는 반환된 웹 페이지를 렌더링하여 사용자에게 보여줌

출처

Leave a comment