[CS] - Network(5)
DNS (Domain Name System)
- www.example.com 과 같이, 인터넷에서 사용되는 호스트 이름을 192.0.0.1과 같은 IP 주소로 변환하는 시스템이다.
동작 방식
- 사용자가 웹 브라우저에서 도메인 이름을 입력한다
- 브라우저는 로컬 DNS 캐시를 검색한다
- 로컬 DNS 캐시에 해당 도메인 이름이 없으면, 브라우저는 DNS 요청을 생성한다.
- DNS 요청은 먼저 사용자의 컴퓨터에서 인터넷으로 전송된다.
- 인터넷 상에서 DNS 서버들 사이에 요청이 전달되며, DNS 서버가 요청을 처리한다.
- 요청이 처리되면, DNS 서버는 응답으로 해당 도메인 이름에 대한 IP 주소를 반환한다.
- IP 주소를 인터넷을 통해 사용자의 컴퓨터로 전송한다.
- 브라우저는 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 비동기 콜백 등에서 사용됨 |
웹 통신의 흐름
- 클라이언트가 서버에 요청(Request)을 보낸다.
- 요청은 HTTP 프로토콜을 사용하며, 요청 메서드(GET, POST, PUT, DELETE 등)와 함께 요청 URL, 헤더, 바디 등의 정보를 포함한다.
- 서버는 요청을 받아서 처리하고, 클라이언트에게 응답(Response)을 보낸다.
- 응답은 HTTP 프로토콜을 사용하며, 응답 상태 코드(200, 404, 500 등)와 함께 헤더, 바디 등의 정보를 포함한다.
- 클라이언트는 서버로부터 받은 응답을 처리한다.
- 응답 바디는 HTML, JSON, 이미지 등의 데이터 형식일 수 있다.
- 클라이언트는 필요에 따라 추가적인 요청을 보내거나, 브라우저에 표시할 콘텐츠를 렌더링한다.
www.example.com 을 입력했을 때 (DNS의 웹 앱 라우팅 과정)
- 사용자가 웹 브라우저에서 웹 앱의 도메인 이름을 입력
- 사용자의 컴퓨터는 로컬 DNS 캐시에 저장된 도메인 이름과 IP 주소 매핑을 확인
- 로컬 DNS 캐시에 매핑이 없으면, 사용자의 컴퓨터는 인터넷 서비스 공급자(ISP)의 DNS 서버에 도메인 이름을 요청
- ISP의 DNS 서버는 도메인 이름을 기반으로 다른 DNS 서버에 질의하여 IP 주소를 검색
- DNS 서버는 IP 주소를 반환하고, ISP의 DNS 서버는 이를 사용자의 컴퓨터에게 반환
- 사용자의 컴퓨터는 반환된 IP 주소를 사용하여 웹 애플리케이션 서버에 요청
- 웹 애플리케이션 서버는 요청을 수락하고, 해당하는 웹 페이지를 반환
- 사용자의 웹 브라우저는 반환된 웹 페이지를 렌더링하여 사용자에게 보여줌
Leave a comment