티스토리 뷰

코니79 입니다.
Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있습니다.

Node.js를 위한 빠르고 개방적인 간결한 웹 프레임워크
웹브라우저에서 동작하는 자바스크립트를 이용해서 PHP나 JSP의 역할을 대체할 수 있습니다. 하나의 언어로 웹에플리케이션 전체를 구현할 수 있게 됩니다. 
웹에 대한 전체적인 이해를 선행하시면 더욱 좋습니다. 아래 수업은 웹에플리케이션을 구성하는 구체적인 기술들과 전체적인 흐름을 다루고 있습니다. 이 수업을 먼저 볼 것을 추천드립니다. 이 수업은 서버 쪽 기술로 PHP를 다룹니다만 PHP는 태생이 웹을 위한 언어이기 때문에 배우기 쉽다는 장점이 있습니다. PHP를 통해서 서버 쪽 언어에 대한 개념을 파악하신 후에 PHP를 JavaScript로 대체하는 수업인 본 수업을 보시는 것도 좋은 접근입니다. 

기본적으로 node.js는 하나의 코어만 사용을 합니다. 
그러나 트래픽이 증가하고 처리할 데이터 양이 많아 짐에 따라 코어 수 많큼 프로세스를 
띄워 처리를 분산해야 한다. 
이때 코어 수 많큼 프로세스를 띄워주는게 cluster 이다. 

위 처럼 cluster 를 구성하게 되면 세션간 데이터가 공유되지 않는 문제가 생긴다. 
이를 해결하기 위한 방법이 redis 이다. 

redis 에는 node-redis 와 ioredis 를 가장 많이 사용한다. 
ioredis 가 조금 더 최근에 나온것이며 더 많은 기능을 지원한다고 한다. 

위에 대한 정보는 검색해 보고 적절한 것을 사용하면 될것 같다. 


참고 링크 1 : http://bcho.tistory.com/1099 
참고 링크 2 : http://www.maengis.com/studio/75 
참고 링크 3 : http://rocksea.tistory.com/190 
참고 링크 4 : http://mudchobo.tistory.com/539

관련 멀티 포트 지원 샘플정보입니다.

서버 정보에 포트 여러개 설정 

manifest.json에 포트 추가

manifest.json 파일에 port는 3001번에 label은 -api-인 포트를 추가한다.

{

  "static": {

    "port": "8983",

    "labels": ["web-ui"]

  }, "rest": {

    "port": "8984",

    "labels": ["api"]

  }

}

경로와 handler간 routing을 담당하는 route.js 새로운 mapping인 apiendpoints를 추가한다. 경로는 ‘/’로 동일하지만, 하나는 getentry handler, 다른 하나는 api handler로 맵핑된다.


var handler = require('./handlers');

exports.webendpoints = [

    { method: 'GET', path: '/', config: handler.getentry },

    { method: 'GET', path: '/{filename*}', config:handler.get}];

exports.apiendpoints = [

    { method: 'GET', path: '/', config: handler.api }];

handler를 위한 handlers.js

api handler를 추가한다. client폴더의 secapi.html을 읽어서 return하는 것이다.


exports.getentry = {

    handler: {

        file: function (request) {

            return '../client/html/' + 'fistapi.html';

        }

    }

};

exports.get = {

    handler: {

        file: function (request) {

            return '../client/html/' + request.params.filename;

        }

    }

};

exports.api = {

    handler: {

        file: function (request) {

            return '../client/html/' + 'secapi.html';

        }

    }

};

서버 구동을 담당하는 fistapi.js 서버 설정과 routing 설정을 읽어 hapi 서버 object에 등록한 후 서버를 구동한다. 여기서는 connection시 label에 따라 routing을 다르게 설정하도록 하였다. 이처럼 포트와 라우팅을 쉽게 변경할 수 있다.


var Hapi = require('hapi');

var Route = require('./route');

var config = require('./manifest.json');


var server= new Hsecapi.Server();


for(var i in config){

    server.connection(config[i]);

}


server.select("web-ui").route(Route.webendpoints);

server.select("api").route(Route.apiendpoints);


server.start(function() {

    console.log('Server started');

});

테스트

client\html 폴더에 secapi.html을 만든다. 내용은 간단히 아래와 같이 작성한다.


<!DOCTYPE html>

<html>

<head lang="en">

    <meta charset="UTF-8">

    <title></title>

</head>

<body>

API TEST

</body>

</html>

server 폴더에서 node . 명령을 통해 서버를 구동하고 크롬 브라우저에서 http://127.0.0.1:8983/ 주소와 http://127.0.0.1:8984/ 주소로 접근해 본다. 8983으로 접근하면 client폴더의 fistapi.html이 읽히고, 8984로 접근하면 secapi.html이 읽힌다.



댓글
댓글쓰기 폼
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
207,150
Today
1
Yesterday
74
링크
«   2022/01   »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
글 보관함