오늘 회사에서 다급하게 전화가 와서 "웹 서버 접속을 막아주세요."라고 했다. 난 당연하게 그냥 개발용 웹서버를 막아달라는 줄 알고 8080 포트를 닫아버렸다. 그런데 도메인과 연결된 IP를 타고 tomcat 설정을 통해 접속이 가능했다. 난 뭘 한 거지?
사실 완전히 틀린 말은 아니었을 거다. 어쨌든 "개발용" 웹 서버 접속은 막았으니까. 다만 문제는 그 이후다. DNS에 대한 얘기를 하고 있는데 난 완전히 엉뚱하게 Tomcat 설정을 만지작 거리고 있었다. 도메인과 IP 연결을 끊어야 하는데 계속 애꿎은 웹서버만 만지작 거린 거다... 나중에 해결되고 나서 혼자 헛소리를 하는 날 보면서 다른 분들은 얼마나 답답했을까...(웹 서버 접속을 막아달란 요청은 당연하게도 모든 IP, Port를 통한 접속을 막아달란 얘기였을 테고 DNS에 대한 이해가 부족한 난 아마 Port를 다 지워버렸을 지도... ㅋㅋㅋㅋ 틀린 방법은 아니지만 맞는 방법은 아니지 )
사실 생각해보면 "DNS로 웹 서버 접속을 가능하게 해 달라"라고 했다면 난 도메인과 IP를 연결하고 접속이 되도록 했을 거다. 그런데 왜 난 반대의 경우는 DNS를 떠올리지 못했을까? 간단하다 DNS를 잘 몰라서 그런 거지 그래서 이번 시간엔 DNS를 한번 파헤쳐보자.
1. DNS 란?
DNS는 Domain Name System의 약자로 도메인 이름 시스템이라는 뜻이다. 이 시스템 덕분에 사용자는 불편하게 숫자로 이루어진 IP와 Port를 일일이 치지 않고, 이름을 통해 접속할 수 있다.
2. DNS에 어떻게 등록하지?
도메인 구입하기
그렇다면 DNS를 이용하기 전에 도메인을 먼저 구입해야 하지 않을까? 도메인 등록 업체(GoDaddy, Namecheap, Google Domains, 후이즈 등)를 통해 도메인을 구입하거나 혹은 직접 도메인 매매 사이트에서 도메인을 구입할 수 있다. 이렇게 도메인을 구입했다면 DNS 서비스를 제공하는 사이트에 들어가서 도메인과 IP를 연결해 주면 된다.
도메인 등록하기
후이즈나 route53은 DNS 서비스를 제공한다. 앞서 구매한 도메인을 가지고 해당 사이트에 들어가서 도메인을 등록하면 된다. 이때 "레코드"라는 개념이 등장한다.
레코드란?
DNS 레코드는 도메인 이름과 관련된 정보를 저장하고 있는 데이터 항목이다. DNS 서버에서 도메인 이름에 대한 요청이 발생하면 해당도메인 이름에 대한 DNS 레코드를 검색하여, 이를 통해 IP 주소, 메일 서버 정보, 웹 서버 정보 등의 정보를 반환한다. 그렇다면 레코드의 종류를 살펴보자.
- A 레코드
- 도메인 이름을 IP 주소로 매핑하는 레코드이다. 예를 들어, www.example.com이라는 도메인 이름이 203.0.113.1이라는 IP 주소로 매핑되어 있다면, 해당 도메인 이름의 A 레코드에는 "www.example.com. IN A 203.0.113.1"과 같은 정보가 저장된다.
- CNAME 레코드
- 도메인 이름을 다른 도메인 이름으로 매핑하는 레코드이다. 예를 들어, www.example.com이라는 도메인 이름이 example.com이라는 도메인 이름과 같은 IP 주소를 가리키도록 설정하고자 한다면, 해당 도메인 이름의 CNAME 레코드에는 "www.example.com. IN CNAME example.com."과 같은 정보가 저장된다.
- CNAME 레코드는 또한 여러 개의 도메인 이름을 하나의 IP 주소로 연결하고자 할 때도 사용된다. 예를 들어, 하나의 IP 주소에서 여러 개의 서비스를 제공하고자 할 때, 각 서비스를 제공하는 서브도메인에 대해 CNAME 레코드를 설정하고, 해당 서브도메인의 A 레코드에는 IP 주소를 설정하면, 하나의 IP 주소에서 여러 개의 서비스를 제공할 수 있다.
- NS 레코드
- 도메인 이름의 네임 서버를 지정하는 레코드이다. 도메인 이름의 네임 서버는 해당 도메인 이름에 대한 DNS 레코드를 제공하는 서버를 말한다.
3. DNS 조회하기(DNS Lookup)
그렇다면 수많은 도메인과 IP 가 있을텐데 이를 조회하고 사용자에게 반환해 주는 것일까? 이런 조회하는 과정을 DNS lookup이라 하는데 이 과정을 살펴보자.
보통 웹 브라우저를 사용하여 도메인 이름을 입력하면, 웹 브라우저는 먼저 해당 도메인 이름의 IP 주소를 찾기 위해 로컬 DNS 캐시(컴퓨터에 저장된 최근 DNS 정보)를 조회한다. 만약 로컬 DNS 캐시에 해당 정보가 없으면, 웹 브라우저는 DNS 서버에 질의하여 해당 도메인 이름의 IP 주소를 얻는다.
DNS 서버는 일반적으로 ISP(Internet Service Provider) - KT나 SKT - 에서 제공하는 DNS 서버를 사용하며, 질의된 도메인 이름의 DNS 레코드 정보가 저장된 DNS 서버를 찾아 해당 정보를 전달한다. 이때, DNS 서버는 일반적으로 다음의 절차를 따른다.
- 로컬 DNS 캐시 조회: 먼저 웹 브라우저는 컴퓨터의 로컬 DNS 캐시를 조회하여 도메인 이름에 대한 IP 주소 정보가 있는지 확인합니다. 만약 로컬 DNS 캐시에 정보가 없으면, 다음 단계로 진행한다.
- Recursive Query: 로컬 DNS 서버가 Recursive Query를 수행한다. Recursive Query는 로컬 DNS 서버가 다른 DNS 서버로부터 정보를 수집하는 것을 의미한다. 로컬 DNS 서버는 TLD(Top-Level Domain) 서버에 도메인 이름에 대한 IP 주소 정보를 요청한다.
- TLD Server Query: TLD 서버는 해당 도메인 이름에 대한 정보를 가지고 있는 DNS 서버의 IP 주소를 반환한다.
- Authoritative Server Query: 로컬 DNS 서버는 TLD 서버에서 받은 정보를 바탕으로 해당 도메인 이름의 Authoritative Server에 IP 주소 정보를 요청한다.
- Response: Authoritative Server는 도메인 이름에 대한 IP 주소 정보를 반환한다.
4년 차 개발자인데 이 정도도 모른다는 게 정말 부끄럽다. 공부 열심히 하자 진짜
'CS 공부 > 네트워크' 카테고리의 다른 글
보안 게이트웨이 (0) | 2023.07.09 |
---|---|
게이트웨이 (0) | 2023.07.05 |
NAT Gateway란 (0) | 2023.02.16 |
HTTPS 동작 방식 (0) | 2023.02.11 |
세션과 JWT (1) | 2023.01.11 |