DNS는 무엇인가?

불꽃남자·2022년 4월 2일
2

글을 쓰게 된 계기

이틀 전, lostark의 캐릭터 정보 API를 개발하다가 갑자기 오류가 나는 일이 있었다. 바로 어제까지만 해도 잘 되던 요청인데, 갑자기 요청이 안 되는 것이다.
원인은 바로 내 서버 도메인이 만료되었기 때문이다. 작년 21년 3월 31일에 freenom에서 1년짜리 무료 도메인을 구해서 서버 도메인으로 쓰고 있었는데, 까맣게 모른 채 연장 신청을 안 했고 영영 사라졌다.
다시 무료로 구매하면 그만이야~~~ 인 줄 알았는데 freenom은 이전에 한 번이라도 구매된 도메인은 사전적 의미가 깃든 도메인이라고 판단하는지 1년에 12000원을 내고 구입하라고 한다.

그냥 밑에 무료 도메인 쓰면 되는 일이지만, 서버 도메인 명을 바꾸면 나에게 귀찮은 일이 두 가지 생긴다.

  1. codebebop.tk 로 요청하는 코드가 포함된 프로젝트들을 싹 다 바꿔야 한다.
  2. Oracle Cloud DNS Zone을 다시 생성해야한다.

1번 같은 경우 프로젝트 파일을 하나하나 수정해서 깃허브에 올리고 배포하면 끝이다.
그러나 문제가 되는 건 2번의 경우다.

원래는 Oracle Cloud DNS를 도메인의 DNS 레코드와 어떻게 어떻게 해서 접속 가능하게 만들어 두었는데, 나는 그걸 원리도 모르고 인터넷 게시글을 보고 따라 한 것이다. 그 마저도 원활하지 못 해 3일정도 만지다가 겨우 됐었다.
그래서 내가 생각한 해결책은 Oracle Cloud DNS zone을 하나 더 만들어서 원래 쓰던 Oracle Cloud DNS zone 설정을 도메인 명만 변경해서 적용하는 것이었다. 하지만 그게 안 된다. 원래 Oracle Cloud DNS Service는 유료 등급의 계정만 사용할 수 있는 기능인데, 나는 무료 등급 계정이라서다.
내가 원래 쓰던 Oracle Cloud DNS zone을 만들 적에는 Oracle Cloud에 가입하고 30일이 지나기 전이라서 유료 서비스를 사용할 수 있었는데, 지금은 안 되는 것이다.
그래서 한 달만 유료 계정으로 업그레이드 하려고 했는데, Oracle Cloud의 계정 업그레이드 방식은 내가 느끼기에 상당히 불친절했다. 나같은 일반인이 주 고객층이 아니기 때문이니 당연한 일이다.

다른 DNS 서비스를 구매해야하나 찾아보려던 찰나...
문득 이런 생각이 든 것이다.

DNS가 뭐지?

대관절 나는 어째서 DNS가 뭔지도 모르고 이런 발버둥을 치고 있단 말인가? DNS랑 도메인이 무슨 차이지? 우선 DNS가 무엇인지 이해하고 나면 내가 뭘 해야하는지 명확하게 알 수 있고, 나중에 또 도메인을 구매해서 DNS 레코드 등의 설정을 할 때에도 혼자서 해결할 수 있을 것이다.

결과부터 말하자면 이 게시글을 읽고 문제를 해결했다.

DNS(Domain Name System)

요약컨대 DNS란 웹사이트의 IP주소와 도메인명을 연결시켜주는 환경/시스템 이다.

이 설명에서 Oracle Cloud DNS는 사용할 필요 없는 게 아닌가? 하는 생각이 들었다. 이것이 정말이라면 그냥 내 서버 IP랑 구매한 도메인을 이어놓기만 하면 되는 것이 아닌가.

아래는 내가 글을 읽고 이해한 DNS의 작동 방식을 그림으로 나타낸 것이다.

  1. 웹 브라우저에 WhatEver.com 이라는 도메인을 브라우저의 URL 창에 검색한다.
  2. 이 요청은 DNS로 전송된다.
    DNS 서버는 WhatEver.com 이라는 도메인의 DNS 레코드를 확인한다.
    DNS 레코드 중 A 레코드 타입의 값으로 123.456.7.89 라는 IP가 등록 된 것을 확인한다.
    웹 브라우저를 이 IP로 리다이렉트 시킨다.
  3. 웹 브라우저는 123.456.7.89로 리다이렉트 된다.
  4. 무사히 응답을 받게 된다.

허허... DNS 레코드는 또 뭐고 A 레코드 타입은 뭡니까?
이제부터 알아보자.

DNS 레코드

역시 간단히 요약하자면 DNS 레코드란 DNS 서버가 받은 요청을 어떻게 처리해야할지에 대한 정보가 담긴 곳 이다.
즉, DNS 서버는 어떤 도메인명에 대한 요청을 받을 때 마다 DNS 레코드를 참조하고, 해당 도메인명에 대한 정보를 찾아 요청을 처리한다. 대충 이해하겠는가?

그리고 이 DNS 레코드에는 여러게의 레코드 타입이 존재한다.
비록 영어이긴 하나 여기에 DNS 레코드 타입에 대한 설명이 매우 잘 되어 있다.

DNS 레코드 타입은 적어도 20개는 존재하는 것 같다. 정확히 몇 개인지는 모르겠다.

여기 내가 도메인을 구입한 hosting.kr의 DNS 레코드 설정 창이다.

여기서는 5가지의 레코드 타입에 대한 설정을 지원하고 있다. 사진에도 설명이 간략하게 나와있지만 좀 더 자세히 설명해보겠다.

A 레코드 타입

IP 주소와 도메인 주소를 매핑 할 때 사용되는 레코드이다. 하나의 도메인 주소에 여러 개의 IP 주소를 매핑할 수도 있다.

정확히는 도메인 주소와 IPv4(123.456.7.89 같은 형태)를 매핑할 수 있다. IPv6(ACDD:BA98:3654:3210:ADBF:BBFF:2922:FFFF 같은 형태)를 매핑할 수 있는 AAAA 레코드 타입이 따로 있기 때문이다.

즉 이것이 내가 찾던 것이다. 이 도메인명과 내 서버 IP를 매핑하면 된다는 것 아닌가? 저기 저 IP주소 칸에 내 서버의 IP만 입력하면 되는 것이다.

MX 레코드 타입

메일서버 레코드이다. 해당 도메인명과 연결되어 있는 메일서버를 확인할 때에 사용된다.

예를 들어 누군가 'myID@WhatEver.com' 으로 인터넷 메일을 발신했다. 인터넷 메일 요청도 DNS 서버로 향하게 되는 모양이다. DNS 서버는 해당 도메인명의 DNS 레코드 중 MX 레코드 타입이 있는지 확인하고, 해당 IP주소 혹은 레코드로 리다이렉트 시킨다.

TXT 레코드 타입

이름대로 텍스트를 입력할 수 있는 레코드이며, 주로 메모를 남기기 위해 사용된다.

메모라니? 무슨 메모? 누가 굳이 여기에 메모를 남긴단 말인가?
찾아본 결과 보통 어떤 사이트에서 제공하는 서비스를 이용하기 위해 그 가이드에 맞게 TXT 레코드를 설정한다.

예를 들면 'myID@WhatEver.com' 에서 'myID@gmail.com' 으로 인터넷 메일을 발신했다고 치자. gmail 서버는 WhatEver.com 이 신뢰할만한 도메인인지 아닌지 판단하기 위해 WhatEver.com 의 DNS 레코드 중 TXT 레코드 타입에 Gmail 가이드 라인에 명시된 보안 코드가 서식에 맞게 포함되어 있는지 확인한다. 있다면 받은 메일함에 도착할 것이고, 없다면 스팸 메일함에 도착할 것이다.

물론 이것은 하나의 사용례에 불과하고 TXT 레코드는 무궁무진한 활용 가능성이 있다.

CNAME 레코드 타입

하나의 도메인명을 다른 도메인명으로 매핑시키는 레코드 타입이다.

간단히 이야기 하자면 어떤 도메인을 다른 도메인으로 리다이렉션 하는 역할을 하는 것이다.

'WhatEver.com' 도메인이 CNAME 레코드의 값으로 'SomeDomain.com' 을 가지고 있다고 가정하자. 웹 브라우저가 WhatEver.com 를 검색하면 DNS 서버는 WhatEver.com의 DNS 레코드를 확인하다가 CNAME 레코드를 발견할 것이고, SomeDomain.com의 DNS 레코드를 확인한다.
SomeDomain.com의 DNS 레코드에서 A 레코드를 발견하면 그 IP로 리다이렉트 하고, 또 다른 CNAME 레코드가 있다면 다시 해당 CNAME 레코드의 도메인의 DNS 레코드를 확인하고... 같은 흐름이 이어질 것이다.

SRV 레코드 타입

이메일, HTTP 통신 등 여러 서비스를 이용하기 위해 필요한 레코드 타입이다. DNS가 서비스의 위치(포트, 혹은 호스트 이름 등)을 저장하기 위해 필요한 레코드 타입이다.

이라고는 하나 사실 정확히 이해하지 못 했다. 처음듣는 단어가 많고, 그러다보니 설명이 추상적으로 다가온다. 현재 나로써는 이에 대해서 자세히 설명할 수가 없다.

결말

DNS에 대해 대략 이해하고서 내가 뭘 해야하는 지 알게 되었다. 내가 구입한 도메인의 DNS 레코드에 내 서버 IP를 A 레코드 타입으로 매핑하면 되는 것이다. 그리고 생각대로 잘 작동했다.

이전에 내가 Oracle Cloud DNS로 도메인을 연결한 것은 어떻게 된 것일까?
내가 구입한 도메인의 CNAME 레코드로 만들어 둔 Oracle Cloud DNS Zone을 매핑했고, Oracle Cloud DNS Zone은 A 레코드로 내 서버의 IP를 매핑한 것이다.

나는 Oracle Cloud DNS의 기능을 이용하지도 않았으니, 이제 와서 보면 무지함이 낳은 삽질이었다.

이제 서버도 잘 작동하니 다시 개발을 해야지.

profile
프론트엔드 꿈나무, 탐구자.

1개의 댓글

comment-user-thumbnail
2022년 10월 10일

감사합니다 유료로 전환하려던 찰나에 이 글을 발견했어요! 감사해서 벨로그 가입하고 댓글 남깁니다 ㅋㅋ

답글 달기