Vert.x 를 이용한 실시간 웹 어플리케이션 (3)
순서
1. Vert.x 설치 및 Hello world !!
2. 간단히 Vert.x 다루어보기
3..Vert.x 와 MongoDB 연결
4. 실시간 통신
5. 모듈개발
6. 배포
먼저 MongoDB 를 설치해봅시다. (윈도우에)
1. https://www.mongodb.org/downloads 요기서 MSI 파일 다운로드후 설치 (더블클릭후 ㄱㄱ 씽)
2. 아무데나 폴더하나 만듭니다. ( 예: D:\mongodb\DATA)
3. mongod --dbpath d:\mongodb\DATA 치면 DB 가 실행됩니다.
4. mongo 치면 가지고 놀수있게 됩니다. (mongod 는 실행파일 / mongo 는 클라이언트)
1. app.js 를 다음과 같이 바꾸어봅니다.
var container = require("vertx/container");
container.deployModule("io.vertx~mod-web-server~2.0.0-final", {
port: 8080,
host: "localhost",
bridge: true,
inbound_permitted: [
{ address: 'mindMaps.list' },
{ address: 'mindMaps.save' },
{ address: 'mindMaps.delete' }
]
});
container.deployModule("io.vertx~mod-mongo-persistor~2.0.0-final", { // mongo 모듈이 추가되었네요 !
address: "mindMaps.persistor", // 모듈을 위한 이벤트 버스 주소
db_name: "mind_maps" // 이 퍼시스터가 사용할 데이타베이스 이름
});
container.deployVerticle('mindmaps.js');
2. mindmaps.js 를 다음과 같이 실제 db 연결로 바꾸어줍니다. (이전에는 메모리상의 객체를 사용했지요)
var eventBus = require('vertx/event_bus');
var console = require('vertx/console');
function sendPersistorEvent(command, callback) {
eventBus.send('mindMaps.persistor', command, function(reply) { // mongo 퍼시스터에 명령을 보내고
if (reply.status === "ok") { // 응답을 받은후에 핸들러 호출
callback(reply);
} else {
console.log(reply.message);
}
});
};
eventBus.registerHandler('mindMaps.list', function(args, responder) {
sendPersistorEvent(
{action: "find", collection: "mindMaps", matcher: {}}, // mindMaps 에서 모든것을 가져와서 응답~
function(reply) {
responder({mindMaps: reply.results});
}
);
});
eventBus.registerHandler('mindMaps.find', function(args, responder) {
sendPersistorEvent(
{action: "findone", collection: "mindMaps", matcher: {_id: args._id}}, // id 에 대당하는것을 리턴~
function(reply) {
responder({mindMap: reply.result});
}
);
});
eventBus.registerHandler('mindMaps.save', function(mindMap, responder) {
sendPersistorEvent(
{action: "save", collection: "mindMaps", document: mindMap}, // 새 mindMap 을 저장
function(reply) {
mindMap._id = reply._id;
responder(mindMap);
}
);
});
eventBus.registerHandler('mindMaps.delete', function(args, responder) {
sendPersistorEvent(
{action: "delete", collection: "mindMaps", matcher: {_id: args.id}},// id 를 가진 mindMap 객체 삭제 function(reply) {
responder({});
}
);
});