Rev. 2.73

firejune.io 도메인을 구입했습니다. nic.io 도메인은 국가 도메인으로 영국령 인도양식민지의 공식 국가 도메인입니다. 국가 도메인을 구입할 수 있는 가비O에서 등록시 1년 유지비용이 22만원(VAT포함)으로 상당히 비싼편이긴 하지만 Node.JS의 모듈인 Socket.IO의 홈페이지를 보면서 네이밍 센스가 참 돋보인다는 감흥을 얻어 덜컥 구입하게 되었습니다. 말그대로 input/output을 의미하죠. 웹소켓서버에 참 어울리는 네이밍이라는 생각이 듭니다. 제가 구성한 서버는 앞단에 아파치를 올리고 각종 서브모듈들과 데몬들 설치하여 복합적으로 운영하려고 했습니다만 약 2주정도 지켜본 결과 무리가 있다는 결론을 얻었습니다. 그래서 서버단이 PHP로 만들어진 iRounte 프로젝트(iroute.mobi)는 이미 APM(Apache,PHP,MySQL) 호스팅을 받고있는 firejune.com으로 포워딩 했으며, 이번에 새로 영입한 가상서버는 Node.JS기반의 프로젝트만 적극 활용하기로 결정했습니다. 그래서 firejune.io 도메인이 필요했던거죠.

기존에는 아피치가 80포트를 점유하고 있어 아파치에서 프록시를 구현할 필요가 있었는데, 이게 상당히 비효율 적이었습니다. 이제는 Node.JS에서 node-http-proxy 모듈을 이용하여 80포트를 점유하도록 하고 프록시 서버를 다음과 같이 구성하였습니다. 서버단 코드가 자바스크립트라서 그런지 몰라도 생각했던대로 순순히 만들어져 주더군요.

node-http-proxy 설치:

# npm install http-proxy

프록시 서버 구동 파일 작성:

var http = require('http')
  , httpProxy = require('http-proxy');

var routeMaps = {
    //  'hummingbird.firejune.io': '127.0.0.1:82'
    , 'chat.firejune.io': '127.0.0.1:88'
    , 'wpilot.firejune.io': '127.0.0.1:89'
    , 'scrumblr.firejune.io': '127.0.0.1:83'
    //, 'smails.firejune.io': '127.0.0.1:100'
};

var proxy = new httpProxy.HttpProxy({router: routeMaps});
var server = http.createServer(function(req, res) {
  if (routeMaps[req.headers.host])
    return proxy.proxyRequest(req, res);

  if (req.headers.host.substr(0, 3) == 'www') {
    res.writeHead(301, {
        'Location': 'http://firejune.io'
      , 'Expires': (new Date).toGMTString()
    });
    return res.end();
  }

  ...

});

// server start listening
if (module === require.main) server.listen(80);
else module.exports  = server; 

프록시 서버를 구성한 이유는 한 서버에서 여러 서브 프로젝트를 돌리기 때문입니다. 해당 프로젝트로의 접근을 용이하게 하기 위한 구성이라는 것을 알수 있습니다. 그래서 프록시 테이블을 이용한 것이죠. 장점이라면 이 프로세스만 관리하면 유지/보수가 간단하다라는 것입니다. 그러나 단점은 비효율적이라는 측면입니다. 프로세스가 두개 도느냐 하나도느냐의 차이니까 당연한 거겠죠. 그래서 빈번한 통신이 발생하는 웹소켓은 listen한 곳을 그대로 사용하는 것이 좋습니다. views 없이 소켓만을 제공하는 프로젝트는 어차피 사용자가 주소를 직접 입력하고 접근할일은 없을테니까 말예요. 효율적으로 프록시를 구성하고 싶다면 http-proxy 모듈을 프로젝트마다 로드하여 라우팅하는 것이 좋습니다. 하지만 관리가 힘들겠죠?

Comments

Got something to add? You can just leave a comment.

Your Reaction Time!

captcha

avatar