주소 문자열과 요청 파라미터 다루기

웹 사이트에 접속하기 위한 사이트 주소 정보는 노드에서 URL 객체로 만들 수 있습니다.

https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js

NAVER 검색창에 'node.js'를 검색했을 때의 주소 정보입니다. 이렇게 만들어진 주소 문자열은 단순 문자열이므로 서버에서 이 정보를 받아 처리할 때에는 어디까지가 사이트 주소인지, 어떤 내용이 요청 파라미터인지 구별해야 합니다. 이 구별을 위해서 ? 기호를 기준으로 앞에 있는 문자열과 뒤에 있는 문자열을 분리하는 경우가 많습니다. 이 작업을 쉽게 할 수 있도록 노드에 만들어 둔 것이 URL 모듈입니다.

url 모듈을 이용하여 주소 문자열을 객체로 만들면 문자열 안에 있던 각각의 정보를 나누어 그 객체의 속성으로 보관합니다. 요청 프로토콜이 http인지 아니면 https인지를 구별하거나 요청 파라미터를 확인하고 싶다면 url 객체가 가지고 있는 속성 값을 확인하면 됩니다. 위의 주소는 아래와 같이 구분될 수 있습니다.

protocol : 'https'
host : 'search.naver.com/search.naver'
query : 'where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js'



주소 문자열을 URL 객체로 변환하기

url 모듈에서 문자열을 객체로 만들거나 객체를 문자열로 만들기 위해 사용하는 주요 메소드는 다음과 같습니다. 

  • parse() : 주소 문자열을 파싱하여 URL 객체를 만들어 줍니다.
  • format() : URL 객체를 주소 문자열로 변환합니다.


URL 모듈을 사용하는 예제 코드

var url = require('url');

// 주소 문자열을 URL 객체로 만들기
var curURL = url.parse('https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js');

// URL 객체를 주소 문자열로 만들기
var curStr = url.format(curURL);

console.log('주소 문자열 : %s', curStr)
console.dir(curURL);
주소 문자열 : https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js
Url {
  protocol: 'https:',
  slashes: true,
  auth: null,
  host: 'search.naver.com',
  port: null,
  hostname: 'search.naver.com',
  hash: null,
  search: '?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js',
  query: 'where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js',
  pathname: '/search.naver',
  path: '/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js',
  href: 'https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js' }



요청 파라미터 확인하기

URL 객체의 속성을 보면 주소 문자열의 여러 가지 정보가 포함되어 있습니다. 그중에서도 query 속성은 요청 파라미터 정보를 가지고 있는데 이 정보를 잘 살펴보면 여러 개의 요청 파라미터가 모두 들어 있습니다. 웹 서버에서는 클라이언트에서 요청한 요청 파라미터를 받아 처리할 때가 많으므로 이 query 속성에 들어 있는 문자열을 다시 각각의 요청 파라미터로 분리해야 합니다.

요청 파라미터는 &로 구분되는데 querystring 모듈을 활용하면 요청 파라미터를 쉽게 분리할 수 있습니다.


요청 파라미터 구분 예제 코드

var url = require('url');

// 주소 문자열을 URL 객체로 만들기
var curURL = url.parse('https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js');

// URL 객체를 주소 문자열로 만들기
var curStr = url.format(curURL);

// 요청 파라미터 구분하기
var querystring = require('querystring');
var param = querystring.parse(curURL.query);

console.log('요청 파라미터 중 query 값 : %s', param.query);
console.log('원본 요청 파라미터 : %s', querystring.stringify(param));
요청 파라미터 중 query 값 : node.js
원본 요청 파라미터 : where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=node.js

먼저 querystring 모듈을 사용하기 위해 require() 메소드를 사용했습니다. 불러온 모듈은 querystring 변수에 할당하고 그 객체의 parse() 메소드를 호출합니다. parse() 메소드는 요청 파라미터 문자열을 파싱하여 객체로 만들어 줍니다. 이 객체에는 각각의 요청 파라미터들이 속성으로 추가되어 있어 속성값을 참조하면 각각의 요청 파라미터를 사용할 수 있습니다. stringify() 메소드는 객체 안에 들어 있는 요청 파라미터를 다시 하나의 문자열로 바꿀 때 사용합니다.


References

  • Do it! Node.js 프로그래밍



+ Recent posts