ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 노드 url, dns, searchParams
    노드 2023. 4. 11. 18:14

    url

    인터넷 주소를 쉽게 조작하도록 도와주는 모듈이다. 

    url처리에는 크게 두 가지 방식이 있다

    1. WHATWG(웹 표준을 정하는 단체의 이름) 방식의 url
    2. 예전부터 노드에서 사용하던 방식의 url

    요즘은 1번 방식만 사용한다. 그리고 브라우저에서도 WHATWG 방식을 사용한다.

     

    WHATWG와 노드의 주소 체계는 다음과 같다

    //url.js
    const url = require('url');
    
    const {URL} = url;
    const myURL = new URL ('http://www.gilbut.co.kr/book/bookList.aspx?sercate1=001001000#anchor');
    console.log('new URL():', myURL);
    console.log('url.format():', url.format(myURL));

    이 방식이 WHATWG의 url이다. 

    • username
    • password
    • origin
    • searchParams

    등의 속성이 존재한다.

    searchParams

    만약에

    http://www.gilbut.co.kr/?page=3&limit=10&category=nodejs&category=javascript

    이런 url이 있다고 하면 search 부분(쿼리스트링)은 다음과 같다.

    ?page=3&limit=10&category=nodejs&category=javascript

     

    search부분은 보통 주소를 통해 데이터를 전달할 때 사용된다. 

    search는 물음표로 시작하고 그 뒤에 키=값 형식으로 데이터를 전달한다. 또한 여러 키가 있을 경우 &로 구분한다.

    search 부분을 다루기 위해 searchParams라는 특수한 객체가 생성된다. 

    search 부분이 객체화 되었기 때문에 다양한 핸들링이 가능해진다. 

    //searchParams.js
    const myURL = new URL('http://www.gilbut.co.kr/?page=3&limit=10&category=nodejs&category=javascript');
    console.log('searchParams:', myURL.searchParams);
    console.log('searchParams.getAll():', myURL.searchParams.getAll('category'));
    console.log('searchParams.get():', myURL.searchParams.get('limit'));
    console.log('searchParams.has():', myURL.searchParams.has('page'));
    
    console.log('searchParams.keys():', myURL.searchParams.keys());
    console.log('searchParams.values():', myURL.searchParams.values());
    
    myURL.searchParams.append('filter', 'es3');
    myURL.searchParams.append('filter', 'es5');
    console.log(myURL.searchParams.getAll('filter'));
    
    myURL.searchParams.set('filter', 'es6');
    console.log(myURL.searchParams.getAll('filter'));
    
    myURL.searchParams.delete('filter');
    console.log(myURL.searchParams.getAll('filter'));
    
    console.log('searchParams.toString():', myURL.searchParams.toString());
    myURL.search = myURL.searchParams.toString();

    • getAll(키) : 키에 해당하는 모든 값을 가져온다. category 키에는 nodejs와 javascript라는 두 가지 값이 들어 있다.
    • get(키) : 키에 해당하는 첫 번째 값만 가져온다.
    • has(키) : 해당 키가 있는지 없는지를 검사한다.
    • keys() : searchParams의 모든 키를 반복기(iterator) 객체로 가져온다.
    • values() : searchParams의 모든 값을 반복기 객체로 가져온다.
    • append(키, 값) : 해당 키를 추가한다. 같은 키의 값이 있다면 유지하고 하나 더 추가한다.
    • set(키, 값) : append와 비슷하지만 같은 키의 값들을 모두 지우고 새로 추가한다.
    • delete(키) : 해당 키를 제거한다.
    • toString() : 조작한 searchParams 객체를 다시 문자열로 만든다. 이 문자열을 search에 대입하면 주소 객체에 반영된다. 

    dns

    DNS를 다룰 때 사용하는 모듈이다. 주로 도메인을 통해 IP나 기타 NDS 정보를 얻고자 할 때 사용한다.

    //dns.mjs
    import dns from 'dns/promises';
    
    const ip = await dns.lookup('gilbut.co.kr');
    console.log('IP', ip);
    
    const a = await dns.resolve('gilbut.co.kr', 'A');
    console.log('A', a);
    
    const mx = await dns.resolve('gilbut.co.kr', 'MX');
    console.log('MX', mx);
    
    const Cname = await dns.resolve('www.gilbut.co.kr', 'CNAME');
    console.log('CNAME', cname);
    
    const any = await dns.resolve('gilbut.co.kr', 'ANY');
    console.log('ANY', any);

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

    '노드' 카테고리의 다른 글

    노드 worker_threads  (0) 2023.04.12
    노드 crypto 와 util  (0) 2023.04.12
    노드 os와 path  (0) 2023.04.11
    노드 process  (0) 2023.04.11
    노드 내장 객체 global, console, 타이머  (0) 2023.04.11
Designed by Tistory.