본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (4) - 노드 내장 모듈 6 [dns]

node js logo image

 

 

 

 

이번 아티클에서는 dns 모듈에 대해서 살펴보겠습니다. 말 그대로 DNS를 다루는 경우에 사용하는데요, 주로 도메인 정보를 이용해 IP 혹은 DNS 정보를 얻고자 할 때 사용합니다. 아래 예제에서는 async/await가 다시 등장하니, 해당 개념도 참고 삼아 리뷰하고 오시기 바랍니다. 

 

 

 

2. Javascript ES2015 (7) - async/awiat [1/2]

async/await는 노드 7.6 버전부터(ES2017) 추가된 기능입니다. 노드와 같이 비동기 중심의 코드를 작성하는 데 있어서 코드를 간소화하는데 큰 도움을 주는 문법이죠. 우선은 기본적으로 프로미스를

nozeroslope.tistory.com

 

 

import dns from 'dns/promises';

const ip = await dns.lookup('tistory.com');
console.log('IP', ip);

const a = await dns.resolve('tistory.com', 'A');
console.log('A', a);

const mx = await dns.resolve('tistory.com', 'MX');
console.log('MX', mx);

const cname = await dns.resolve('wwww.tistory.com', 'CNAME');
console.log('CNAME', cname);

const any = await dns.resolve('tistory.com', 'ANY');
console.log('ANY', any);



/* 출력
IP { address: '121.53.105.234', family: 4 }
A [ '211.249.221.185', '121.53.105.234' ]
MX [
  { exchange: 'aspmx.daum.net', priority: 10 },
  { exchange: 'alt.aspmx.daum.net', priority: 20 }
]
PS D:\XXX\Javascript> node example.mjs
IP { address: '121.53.105.234', family: 4 }
A [ '211.249.221.185', '121.53.105.234' ]
MX [
  { exchange: 'aspmx.daum.net', priority: 10 },
  { exchange: 'alt.aspmx.daum.net', priority: 20 }
]
CNAME [ 'wildcard-tistory-fz0x1pwf.kgslb.com' ]
PS D:\XXX\Javascript> node example.mjs
IP { address: '121.53.105.234', family: 4 }
A [ '121.53.105.234', '211.249.221.185' ]
MX [
  { exchange: 'aspmx.daum.net', priority: 10 },
  { exchange: 'alt.aspmx.daum.net', priority: 20 }
]
CNAME [ 'wildcard-tistory-fz0x1pwf.kgslb.com' ]
ANY [
  { address: '211.249.221.185', ttl: 600, type: 'A' },
  { address: '121.53.105.234', ttl: 600, type: 'A' },
  { exchange: 'alt.aspmx.daum.net', priority: 20, type: 'MX' },
  { exchange: 'aspmx.daum.net', priority: 10, type: 'MX' },
  { value: 'ns2.daum.net', type: 'NS' },
  { value: 'ns1.daum.net', type: 'NS' },
  { entries: [ 'v=spf1 include:_spf.daum.net ~all' ], type: 'TXT' },
  {
    entries: [
      'google-site-verification=qNAtkd6vDGFuD_z9X42LfkhSbHBZqnUZOTfnFn1jUNc'
    ],
    type: 'TXT'
  },
  {
    entries: [
      'google-site-verification=m453ZX5HCNg7vFtbRv_mAt5GxIJsj4VJw_LFvFKkifI'
    ],
    type: 'TXT'
  },
  {
    entries: [
      'google-site-verification=Djy29naX64H0z8fGEOEOd-k40Sp65VRnz1sm_thWPhw'
    ],
    type: 'TXT'
  },
  {
    nsname: 'ns.kakaocorp.com',
    hostmaster: 'root.kakaocorp.com',
    serial: 1668574737,
    refresh: 1800,
    retry: 600,
    expire: 2419200,
    minttl: 300,
    type: 'SOA'
  }
]
*/

 

 

ip주소는 기본적으로 dns.look이나 dns.resolve(도메인)으로 얻을 수 있습니다. A(ipv4 주소), AAAA(ipv6 주소), NS(네임 서버), SOA(도메인 정보), CNAME(별칭, 주로 www가 붙은 주소는 별칭일 경우가 많음), MX(메일서버) 등은 레코드라고 부르는데 해당 레코드에 대한 정보는 dns.resolve(도메인, 레코드 이름)으로 조회합니다.