본문 바로가기

Programming/Node.js

4. Node 기능 살펴보기 (4) - 노드 내장 모듈 5 [url 1/2]

node js logo image

 

 

 

 

○ url

 

url은, 예상했다시피 인터넷 주소 사용을 도와주는 모듈입니다. url 처리 방식도 여러 가지가 있는데, 현재는 노드 7에서 추가된 WHATWG(단체명) 방식의 url을 사용합니다. 이전부터 사용하던 방식도 존재하지만, 현재는 WHATWG 방식만을 사용한다고 생각하시면 됩니다. 이는 브라우저에서도 사용하는 방식이어서 호환성 이슈도 없습니다. 

 

일단, 아래 그림과 같이 WHATWG와 노드의 주소 체계 구조를 살펴보겠습니다. 우리가 흔히 알고 있는 url 주소가 WHATWG에서 어떤 범위로 구분되는지를 이해하면 됩니다. 

 

 

 

조금 복잡해보이긴 합니다. 그럼 아래와 같이 코드 상에서 이 URL 객체를 출력해 보도록 하겠습니다. 참고로 아래 코드에서 URL은 노드 내장 객체이기 때문에 require가 필수적인 사항은 아닙니다. 

 

const url = require('url');   // 생략 가능

const { URL } = url;  // 생략 가능
const myURL = new URL('http://www.example.co.kr/audio/movieList.aspx?sercate1=001001000#anchor');
console.log('new URL():', myURL);
console.log('url.format():', url.format(myURL));

/* 출력
new URL(): URL {
  href: 'http://www.example.co.kr/audio/movieList.aspx?sercate1=001001000#anchor',
  origin: 'http://www.example.co.kr',
  protocol: 'http:',
  username: '',
  password: '',
  host: 'www.example.co.kr',
  hostname: 'www.example.co.kr',
  port: '',
  pathname: '/audio/movieList.aspx',
  search: '?sercate1=001001000',
  searchParams: URLSearchParams { 'sercate1' => '001001000' },
  hash: '#anchor'
}
url.format(): http://www.example.co.kr/audio/movieList.aspx?sercate1=001001000#anchor
*/

 

 

위와 같이 new URL 생성자에 특정 주소를 전달할 경우, 주소가 부분별로 나뉘어 정리되는데, 이것이 WHATWG의 url이라고 기억하시면 됩니다. username, password, origin, searchParams와 같은 속성이 존재하는 것을 알 수 있습니다. 참고로 url.format(객체)이라는 함수는 분해된 url 객체를 다시 원상태로 되돌리는 함수입니다. 

 

 


 

 

조금 더 깊이 살펴보겠습니다. 위 속성 중에서 host가 우리가 아는 일반적인 도메인 주소인 것을 알 수 있습니다. 그런데 서버 작업 중에 host 영역 없이 pathname만 있는 경우가 생깁니다. /audio/movieList.aspx 처럼 말이죠. 그럴 때 WHATWG 방식은 이 주소만으로 처리가 불가합니다. 물론 간단하게 생성자 사용 시 new URL('/audio/movieList.aspx', 'https://www.example.co.kr') 처럼 host를 인수로 추가해야 합니다.