References: Creating your first app




미티어 프레임워크에서 리액트를 사용해 봅시다.





1. 프로젝트 만들기



콘솔창에 다음과 같이 입력합니다: meteor create --react react-todoes


이후 cd react-todoes입력 후 meteor를 입력하면 알아서 필요한 작업을 진행 한 후 실행됩니다.





2. To-Do 리스트 만들기



본격적으로 소스를 수정해 보도록 하겠습니다.


/client/main.html


1
2
3
4
5
6
7
<head>
  <title>Todo List</title>
</head>
 
<body>
  <div id="render-target"></div>
</body>
cs


/client/main.jsx


1
2
3
4
5
6
7
8
9
10
import React from 'react';
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
 
import App from '../imports/ui/App';
 
Meteor.startup(() => {
  render(<App />document.getElementById('render-target'));
});
 
cs


/imports/ui/app.jsx


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
32
33
34
import React, { Component } from 'react';
 
import Task from './Task';
 
// App component - represents the whole app
export default class App extends Component {
  getTasks() {
    return [
      { _id: 1, text: 'This is task 1' },
      { _id: 2, text: 'This is task 2' },
      { _id: 3, text: 'This is task 3' },
    ];
  }
 
  renderTasks() {
    return this.getTasks().map((task) => (
      <Task key={task._id} task={task} />
    ));
  }
 
  render() {
    return (
      <div className="container">
        <header>
          <h1>Todo List</h1>
        </header>
 
        <ul>
          {this.renderTasks()}
        </ul>
      </div>
    );
  }
}
cs


/imports/ui/Task.jsx


1
2
3
4
5
6
7
8
9
10
import React, { Component } from 'react';
 
// Task component - represents a single todo item
export default class Task extends Component {
  render() {
    return (
      <li>{this.props.task.text}</li>
    );
  }
}
cs


/client/main.css


/* CSS declarations go here */
body {
font-family: sans-serif;
background-color: #315481;
background-image: linear-gradient(to bottom, #315481, #918e82 100%);
background-attachment: fixed;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 0;
margin: 0;
font-size: 14px;
}
.container {
max-width: 600px;
margin: 0 auto;
min-height: 100%;
background: white;
}
header {
background: #d2edf4;
background-image: linear-gradient(to bottom, #d0edf5, #e1e5f0 100%);
padding: 20px 15px 15px 15px;
position: relative;
}
#login-buttons {
display: block;
}
h1 {
font-size: 1.5em;
margin: 0;
margin-bottom: 10px;
display: inline-block;
margin-right: 1em;
}
form {
margin-top: 10px;
margin-bottom: -10px;
position: relative;
}
.new-task input {
box-sizing: border-box;
padding: 10px 0;
background: transparent;
border: none;
width: 100%;
padding-right: 80px;
font-size: 1em;
}
.new-task input:focus{
outline: 0;
}
ul {
margin: 0;
padding: 0;
background: white;
}
.delete {
float: right;
font-weight: bold;
background: none;
font-size: 1em;
border: none;
position: relative;
}
li {
position: relative;
list-style: none;
padding: 15px;
border-bottom: #eee solid 1px;
}
li .text {
margin-left: 10px;
}
li.checked {
color: #888;
}
li.checked .text {
text-decoration: line-through;
}
li.private {
background: #eee;
border-color: #ddd;
}
header .hide-completed {
float: right;
}
.toggle-private {
margin-left: 5px;
}
@media (max-width: 600px) {
li {
padding: 12px 15px;
}
.search {
width: 150px;
clear: both;
}
.new-task input {
padding-bottom: 5px;
}
}


위와 같이 코드를 수정하면 다음과 같은 화면을 확인할 수 있습니다.





3. 몽고DB에 데이터 저장하기.



할일 정보를 몽고디비에 저장합니다.


리액트 컴포넌트에서 미티어의 컬렉션 데이터를 사용하려면 react-meteor-data 패키지를 설치해야 합니다.


콘솔에 다음을 입력합니다: meteor add react-meteor-data

** 확인해보니 제 프로젝트에는 자동으로 깔려 있더군요 


이후 소스코드를 아래와 같이 수정합니다.


/imports/ui/app.js


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
32
33
import React, { Component } from 'react';
import { withTracker } from 'meteor/react-meteor-data';
 
import { Tasks } from '../api/tasks.js';
 
import Task from './Task';
 
// App component - represents the whole app
class App extends Component {
  renderTasks() {
    return this.props.tasks.map((task) => (
      <Task key={task._id} task={task} />
    ));
  }
  render() {
    return (
      <div className="container">
        <header>
          <h1>Todo List</h1>
        </header>
        <ul>
          {this.renderTasks()}
        </ul>
      </div>
    );
  }
}
 
export default withTracker(() => {
  return {
    tasks: Tasks.find({}).fetch(),
  };
})(App);
cs


/imports/api/tasks.js


1
2
3
import { Mongo } from 'meteor/mongo';
 
export const Tasks = new Mongo.Collection('tasks');
cs


/server/main.js


1
2
3
4
5
6
import { Meteor } from 'meteor/meteor';
 
import '../imports/api/tasks.js';
 
Meteor.startup(() => { });
 
cs


여기까지 수정하셨으면 화면이 다음과 같이 바뀔 것 입니다.



이제 몽고디비에 데이터를 넣은 후 어떻게 보이는지 확인하겠습니다.


콘솔을 열고 다음을 입력해 주세요.

meteor mongo

db.tasks.insert({ text: "Hello world!", createdAt: new Date() });


그리고 화면을 확인해 봅시다.





반응형

References: What's Going On With Blaze, React, and Meteor?


** 해당 글은 미티어 프레임워크가 리액트를 공식 지원할 쯤에 작성된 글입니다.

** 필요에 의해 직접 번역하였습니다. 의역 오역이 많으니 원문을 보시면 더 잘 이해 할 수 있습니다.





What's Going On With Blaze, React, and Meteor?


최근 미티어에서 리액트, 블레이즈 그리고 프론트엔드 렌더링에 대해 많은 토론이 있습니다.

좀더 명확히하기 위해 여기 QnA형식의 빠른 입문서가 있습니다. 그리고 이건 제 의견을 표현한 것으로 MDG(Meteor Developer Group)에 의하여 보증되지 않습니다.



So What’s The Big Deal?


요약하자면 다음과 같습니다. 미티어는 2012년 출시된 이후로 항상 프론트엔드 렌더링 라이브러리로 최신판의 블레이즈를 보유하고 있습니다. 

블레이즈의 역할은 기본적으로 앱의 로우 데이터와 로직을 가져와서 브라우저가 이해할 수 있도록(HTML 코드와 같이) 만드는것 입니다. 당신이 상상할수 있는것과 같이 이것은 꽤 큰 작업이고 블레이즈를 개발하고 유지하는것에 꽤 심각한 MDG의 자원이 사용됩니다.

리액트는 블레이즈와 거의 같은 역할을 수행합니다. 리엑트는 페이스북에 의해 개발되었으며 복잡한 웹 앱을 빌드하는 모든 이들에게 주요한 옵션으로 빠르게 자리 잡았습다.

질문을 요약하자면 다음과 같습니다: 미티어는 커뮤니티를 방해하는 것을 피하기 위해 자체 개발 프레임워크를 지켜야 하나요? 아니면 리액트를 수용하고 자원을 할당해야 할까요?



How Are Blaze And React Different?


인기와 자원적인 측면 외에도 블레이즈와 리액트는 몇 가지 주요 요소에서 서로 다릅니다.

우선 리액트는 블레이즈의 Spacebars와 같은 템플릿 구문을 갖고 있지 않습니다만 대신 JSX포맷 덕분에 자바스크립트와 HTML을 같은 파일에 섞을 수 있습니다. 

리액트에는 Spacebars의 {{#if}} 나 {{#each}} 같은 게 없는 대신 {{#if}} 나 {{#each}}블록 내부에 있는 것이 무엇이든 간에 렌더링 하는 함수를 정의할 수 있고 그걸 자바스크립트의 if나 map 내에서 호출할 수 있습니다.

실제로 이건 더 복잡한 코드를 만들지만 코드를 컴포넌트화 하는데 이점을 줍니다.(리액트는 컴포넌트에 큰 관심을 가집니다.)

또 다른 주요한 차이는 블레이즈와 다르게 리액트는 엄격한 데이터 통제 메커니즘을 강요하는 것 입니다. 세부적인 내용을 제외하고 블레이즈는 템플릿간 데이터를 전달할 수 있습니다만 리액트는 훨씬 독선적이고 모범 사례를 따르도록 안내 하려고 합니다.

미티어 유저 Brent Anderson의 지적에 따르면

블레이즈는 지역 / 내부 상태를 처리 할 때 부족한 반면 리액트는 속성과 중첩 된 구성 요소 계층을 구성하고 상위 구성 요소에서 하위 구성 요소로 데이터가 이동하면서 매우 정확하게 처리됩니다.

이것은 리액트의 러닝커브가 훨씬 높다고 해석되지만 코드베이스의 효율성과 유지 보수 측면에서 확실한 이점이 됩니다.

마지막으로 블레이즈는 미티어의 반응 시스템인 Tracker하고 더 타이트하게 통합되어 있습니다. Discover Meteor의 Tom Coleman은 다음과 같이 말합니다.

블레이즈에서 리액트로 포팅하는데 있어서 진짜 문제는 문법을 변경하는 것이 아니라 반응이 동작하는 정신적인 모델의 변화이다. .getMeteorData()의 모든 반응 의존성을 준비한 다음 다른 곳의 컴포넌트에 반응하지 않도록 해야 합니다.



So Which One Is Better?


이 문제에 대한 명쾌한 해답이 있으면 좋았을 겁니다. 앞서 언급했듯이 두 프레임워크 모두 장단점이 있습니다.

블레이즈는 배우기 쉽고(몇시간 vs 몇일) 유용하며 복잡하지 않은 템플릿 언어이며 미티어 프레임워크와 잘 통합되어 있습니다(뛰어난 반응성 동작). 

반면에 리액트는 주어진 작업에 대해 올바른 방향이 무엇인지 명확하게 만드는 가이드와 규칙을 지키도록 하기 때문에 좀 더 성숙한 느낌이 듭니다. 그리고 미티어와 아직은 긴밀하게 통합되어 있는 건 아니지만 훨씬 더 큰 전체적인 생태계를 갖고 있으며 또한 블레이즈가 하지 않는 몇 가지 추가적인 주요 기능을 제공한다(서버 측 렌더링과 같은).

그러므로 모두 다 합쳐보자면 리액트가 좀 더 강력하긴 하지만 블레이즈가 배우고 사용하긴 쉽습니다.



What’s The Big News?


두 달전 릴리즈된 미티어 1.2가 리액트와 앵귤러를 정식 지원합니다.

그런 다음 지난 주 Geoff Schmidt는 Meteor 포럼에서 블레이즈에 대한 MDG의 계획을 세웠습니다.

그래서 우리가 계획하고 있는 것은 React 위에 템플릿을 만들고 Blaze 사용자들에게 그것을 업그레이드하도록 장려하는 겁니다(또는 선호하는 사람들은 React JSX를 사용하십시오.).

다른 말로 블레이즈는 리액트 앞의 얇은 레이어가 되어 미티어의 반응성과 함께 잘 통합되도록 하는 템플릿 언어를 제공하며 리액트의 다른 모든 이점을 유지하면서 전반적으로 더 가깝게 하도록 할 것 입니다.

이건 두 프레임워크의 최고의 측면을 지키는 꽤 멋진 방식입니다.



Why Are Some People Unhappy?


만약 가까운 미래에 미티어 생태계에 뛰어들 계획이 있다면 이건 좋은 소식이지만, 이미 블레이즈에 큰 투자를 한 사람들에겐 몇 가지 문제를 제기합니다.

슬프게도 블레이즈에서 블레이즈 2.0으로의 전환은 아마 meteor update만 타이핑하는 정도의 문제가 아닐 것 입니다. 이러한 급진적인 변화는 아마 적어도 당신의 템플릿의 마크업과 로직을 다시 써야할 수도 있다.

이것은 다른 많은 것들 중에서 "useraccount" 또는 "Blaze components"와 같이 블레이즈 위에 구축된 Atmosphere projects가 어떻게 될 지에 대한 질문을 제기합니다.



What Should I Do Right Now?


MDG의 개발에 대한 느리고 섬세한 접근을 알고 있다면 이 새로운 블레이즈 2.0은 아마 6개월에서 1년은 빛을 보지 못할 것 입니다. 그러면 그때까진 뭘 해야 할까요?

가능하다면 리액트를 사용하세요. 리액트를 통달하는 것은 미티어 생태계를 뛰어넘는 즉각적인 혜택이 있을 것이며 리액트앱은 블레이즈 2.0이 출시될 때 어떠한 마이그레이션도 요구하지 않을 겁니다(블레이즈 2.0이 리액트 위에서 작동하기 때문에).

MDG의 Sashko는 다음과 같이 덧붙입니다.

내 생각에 100%확실한 방법은 지금 리액트를 시작하는 것이다. 블레이즈2는 리액트와 JSX 구문에 대해 세부적인 것을 다루고 싶지 않은 사람들을 위한 것이지만 만약 그게 네게 효과가 있다면 난 그게 갈 길이라고 말할 것이다.

그러나 물론 리액트를 사용하는 게 별로 실용적이지 못하다는 많은 이유가 있다. 레거시 블레이즈 코드를 갖고 있거나 리액트를 배울 수 있는 시간이 없거나 그냥 리액트를 좋아하지 않거나. 이 경우엔 블레이즈를 계속 사용해도 무방하다.

결국 블레이즈 2.0의 업그레이드 경로가 완전히 투명하지는 않겠지만 난 여전히 잘 관리 될 것이라고 믿는다.







반응형


references: Meteor.js 시작하기 by 박승현




미티어 프레임워크의 디비 구조는 서버측의 몽고DB와 클라이언트 측의 미니몽고로 이원화 되어 있다.



클라이언트에선 서버측의 몽고디비에서 데이터를 가져오는것이 아니라 미니몽고에서 데이터를 가져온다.


그러나 생각해보면 저번 구현에선 서버측에 데이터를 넣어 놨는데 아무런 문제 없이 데이터를 가져 올 수 있었다.


미티어 프레임워크는 기본패키지로 AutoPublish를 제공하는데 몽고디비랑 미니몽고를 자동으로 싱크해준다.


물론 이는 위험하다.


실제로 Meteor Developer에선 Security Checklist 1번에 명시되어 있을정도



AutoPublish를 제거하면 별도로 Publish/Subscribe를 구현해주어야 한다.



** 아래의 예시는 이전 코드에서 이어집니다.


  • Autopublish 삭제하기.

프로젝트 폴더에서 콘솔을 열고 meteor list를 입력하면 설치된 패키지 리스트가 출력 됩니다.



Autopublish가 가장 위에 있네요. 설명에도 프로토타입에만 사용하라고 되어있습니다.


콘솔에 meteor remove autopublish를 입력해 autopublish 패키지를 삭제합니다.



그리고 localhost:3000/에 들어가보면 보이던 친구목록이 사라진 걸 확인할 수 있습니다.





  • Publish/Subscribe 구현하기
이제 서버에서 데이터를 발행하는 코드를 작성해봅시다.

발행은 서버에서 동작합니다. .\server\publish.js를 추가합니다.

.\server\publish.js

1
2
3
4
Meteor.publish("friendsList",function(obj){
    var condition = obj || {};
    return Friends.find(condition);
});
cs


추가된 publish.js를 서버측 main.js에 추가합니다.


.\server\main.js


1
2
3
4
5
6
7
8
9
import { Meteor } from 'meteor/meteor';
 
import '../lib/collections.js';
import './publish.js';
 
Meteor.startup(() => {
  // code to run on server at startup
});
 
cs


클라이언트 측에서 서버에서 발행한 friendsList를 구독하는 코드를 작성합니다.


구독은 friendList 템플릿이 생성되는 시점에 이루어져야 하므로 다음과 같이 작성합니다.


.\client\firendsList.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { Template } from 'meteor/templating';
 
Template.friendsList.helpers({
    listName : function(){
        return "나의 친구들 목록";
    },
    list : function(){
        Friends = new Mongo.Collection("friends");
        return Friends.find();
    }
});
 
Template.friendsList.onCreated(function () {
    this.subscribe("friendsList",{});
});
 
cs


 이제 화면에 다시 데이터가 출력 되는 것을 확인할 수 있습니다.











반응형

references: Meteor.js 시작하기 by 박승현




미티어 프레임워크를 설치해봤으니 이제 한번 사용해 보겠습니다.



  • 프로젝트 생성하기
워크 스페이스 폴더에서 CMD 혹은 PowerShell을 실행 후 meteor create {{{프로젝트 이름}}을 실행해 줍니다.




  • 프로젝트 실행하기
프로젝트 폴더로 이동 후 meteor을 실행해 줍니다.




  • 결과 확인
localhost:3000을 확인해 봅시다.


또한 미티어 프레임워크는 자동으로 3001번 포트에 몽고디비를 실행시켜 줍니다.





  • UI 수정 해보기
소스를 한번 건드려 봅시다. 미티어 프레임워크는 Blaze를 기본으로 사용합니다.
** 불행히도 블레이즈는 이번 포스팅에서만 사용할 생각입니다. 
** 앞으론 React를 사용할 예정이며 이에 대한 내용은 추후에 포스팅 하겠습니다.

.\client.\main.html : 우리가 본 메인 페이지 입니다. 디폴트로 hello와 info 템플릿이 구현되어 있습니다.
.\client.\main.js : 메인 페이지에 대한 자바스크립트 입니다. hello 템플릿에 대한 헬퍼가 구현되어 있습니다.

client 폴더 안에 friendsList.htmlfriendsList.js파일을 만들어 줍니다.

friendsList.html

1
2
3
4
5
6
7
8
9
10
11
12
<template name="friendsList">
     {{listName}} 
    <table>
         {{#each list}} 
        <tr>
            <td>{{no}}</td>
            <td>{{name}}</td>
            <td>{{department}}</td>
        </tr>
         {{/each}} 
    </table>
</template>
cs

firendsList.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { Template } from 'meteor/templating';
 
Template.friendsList.helpers({
    listName : function(){
        return "나의 친구들 목록";
    },
    list : function(){
        var arr = [
             {no:1,name:"라이언",department:"카카오"}
            ,{no:2,name:"무지",department:"카카오"}
            ,{no:3,name:"코니",department:"라인"}
            ,{no:4,name:"브라운",department:"라인"}
        ];
        return arr;
    }
});
cs

이후 main.html과 main.js를 다음과 같이 수정해 줍니다.


main.js


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
import { Template } from 'meteor/templating';
import { ReactiveVar } from 'meteor/reactive-var';
 
import './main.html';
import './friendsList.html';
import './friendsList.js';
 
Template.hello.onCreated(function helloOnCreated() {
  // counter starts at 0
  this.counter = new ReactiveVar(0);
});
 
Template.hello.helpers({
  counter() {
    return Template.instance().counter.get();
  },
});
 
Template.hello.events({
  'click button'(event, instance) {
    // increment the counter when button is clicked
    instance.counter.set(instance.counter.get() + 1);
  },
});
 
cs


main.html


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<head>
  <title>proj</title>
</head>
 
<body>
  <h1>Welcome to Meteor!</h1>
 
   <!--{{> hello}} -->
  {{>friendsList}}
</body>
 
<template name="hello">
  <button>Click Me</button>
  <p>You've pressed the button {{counter}} times.</p>
</template>
 
 
cs


이후 localhost:3000/을 확인해 보면 다음과 같습니다.




  • 몽고DB 사용해보기
이번엔 내장 몽고디비를 사용해 봅시다.

lib폴더를 만든 후 그 안에 collections.js 파일을 생성합니다.

.\lib\collections.js

1
2
3
4
5
6
7
8
9
10
11
12
Friends = new Mongo.Collection("friends");
 
if(Meteor.isServer){ 
        Meteor.startup(function(){
        if( Friends.find().count() == 0 ) {
            Friends.insert({no: 1name"라이언", department: "카카오"});
            Friends.insert({no: 2name"무지", department: "카카오"});
            Friends.insert({no: 3name"코니", department: "라인"});
            Friends.insert({no: 4name"브라운", department: "라인"});
        }
    });
}
cs

해당 코드는 미티어 서버가 처음 실행 될 때 한번만 수행됩니다.

이제 서버측 js파일에 앞서만든 파일을 등록합니다.

.\server\main.js

1
2
3
4
5
6
7
8
import { Meteor } from 'meteor/meteor';
 
import '../lib/collections.js';
 
Meteor.startup(() => {
  // code to run on server at startup
});
 
cs

이제 프로젝트 폴더에서 새 콘솔을 연 후 meteor mongo를 실행해봅시다.


db.friends.find() 쿼리를 날려 봅니다



정상적으로 등록이 되었습니다. 이제 이 데이터를 불러와 보겠습니다.


.\client\friendsList.js 파일을 다음과 같이 수정합니다


1
2
3
4
5
6
7
8
9
10
11
import { Template } from 'meteor/templating';
 
Template.friendsList.helpers({
    listName : function(){
        return "나의 친구들 목록";
    },
    list : function(){
        Friends = new Mongo.Collection("friends");
        return Friends.find();
    }
});
cs

정상적으로 동작함을 확인 할 수 있습니다.








반응형


** 해당 글은 Widow 10 - 64bit를 기준으로 작성되었습니다.



Meteor 프레임워크는 Express에 비하면 사전에 준비할게 좀 있습니다.


우선 chocolatey를 설치합니다.

  1. 관리자 권한으로 CMD를 실행합니다.
  2. 다음을 붙여넣고 실행합니다. @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
  3. 설치 완료후 cmd에 choco를 입력해봅시다.
  4. 아래 사진과 같이 버전이 확인되면 설치 성공입니다.



이제 Meteor 프레임워크를 설치해봅시다. CMD에 choco install meteor를 입력합니다.



위의 사진처럼 보이면 설치가 완료된겁니다. 생각보다 오래 걸립니다.



설치가 제대로 되었는지 버전을 한번 확인해 봅시다. 아래의 사진처럼 나오면 제대로 설치가 된겁니다.

meteor --version



워크스페이스로 가서 meteor create proj 를 실행해 줍시다.



성공적으로 설치되었습니다.


이제 미티어 프레임워크를 사용할 준비가 다 되었습니다.



반응형

References

Node.js Frameworks Comparison for Your Back-end Solution

Best of 2018: 5 Best Node.js Frameworks to Know




  • NodeJS 프레임워크의 구분
MVC frameworks.
      • 이름이 모든것을 말해줍니다.
      • 이 프레임워크는 추가요소 없이 자유롭고 유연한 개발을 제공합니다.
      • Model-View-Controller 패턴을 기반으로 합니다.

Full-stack MVC frameworks. 
      • 일반적으로 유연하지 못합니다.
      • 라이브러리, 통합, 탬플릿 엔진, 스캐폴딩 및 엔지니어가 작업을 자동화 하는데 사용할 수 있는 기능을 함께 번들로 제공합니다.

REST API frameworks. 
      • REST API 서버개발에 유용합니다.
      • 다른 프레임워크 그룹과 함께 사용될 수 있습니다.

Others. 
      • 미들웨어, 라이브러리와 기타 특정 솔루션이 프레임워크로 간주될 수 있습니다.



  • 인기 있는 NodeJS의 프레임워크
Express: 빠르고 간단하며 유연하다.
      • NodeJS의 클래식.
      • 최소한과 간결함을 철학으로 삼는다.
      • 개발자에게 많은 자유를 제공한다.
      • 주요 특징: 자유, 고성능, 대규모 커뮤니티
      • ** 참고 MEAN Stack

Meteor: 범용적이며 풀스택으로 시간을 절약할 수 있다.
      • 표준화와 즉시 사용가능함을 철학으로 삼는다.
      • 서버, 모바일, 웹, 데스크톱 응용프로그램을 구축하는데 필요한 통합 도구를 제공한다.
      • Angular 또는 React와 통합되어 백 엔드와 프론트 엔드의 응용프로그램을 연결한다.
      • 엔지니어에게 많은 자유를 쥐어주지 않지만 많은 기초 작업을 간소화한다.
      • 주요 특징: 데이터 동기화, 즉시 사용 가능한 통합, 빌드 자동화

Loopback: 복잡한 기능을 통합할 수 있다.
      • REST API 프레임워크의 대표.
      • 확장성이 뛰어난 모듈러 프레임워크.
      • API를 쉽고 빠르게 작성할 수 있도록 고안됨.
      • 사용자 인증 및 권한 작성에 적합.
      • 주요 특징: REST API생성, API 탐색




자세한 내용은 원문을 참고해 주시기 바랍니다.

반응형

NodeJs에서 마리아 DB를 사용해보자.



1. 마리아DB 설치


마리아DB 홈페이지에서 마리아DB를 설치합니다.




2. DB 및 테이블 생성


테스트 DB와 테이블을 생성한 후 샘플데이터를 Insert합니다.


1
2
3
4
5
6
7
8
9
10
11
12
DROP DATABASE IF EXISTS nodejs_test;
CREATE DATABASE nodejs_test;
DROP USER IF EXISTS nodejs_admin;
CREATE USER nodejs_admin@'%' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nodejs_test.* to nodejs_admin@'%';
USE nodejs_test;
DROP TABLE IF EXISTS users;
CREATE TABLE users (
    user_key INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    user_id VARCHAR(128UNIQUE NOT NULL
);
INSERT INTO users(user_id) VALUES('TEST01');
cs



3. Nodejs 프로젝트 생성


CMD 혹은 powershell을 실행 후 workspace로 이동합니다.


npm init을 실행합니다.



프로젝트 관련 여러 사항을 묻습니다. 적당히 입력하고 넘어갑시다.


해당 작업을 수행하면 package.json 파일이 입력된 값에 의해 자동으로 생성됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
{
  "name""mariadb-test",
  "version""1.0.0",
  "description""mariadb connection testing project.",
  "main""index.js",
  "scripts"{
    "test""echo \"Error: no test specified\" && exit 1"
  },
  "author""smoh",
  "license""ISC"
}
 
cs




4. 커넥터 설치하기


npm install --save mariadb 를 수행하여 마리아DB 커넥터를 설치합니다.


--save를 입력하면 설치한 모듈정보가 자동으로 입력됩니다.





5. NodeJs를 통해 MariaDB 사용하는 코드 작성


커넥터를 사용하는 소스를 작성합니다.


mariaDBConn.js


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
const mariadb = require('mariadb');
const vals = require('./consts.js');
 
const pool = mariadb.createPool({
    host: vals.DBHost, port:vals.DBPort,
    user: vals.DBUser, password: vals.DBPass,
    connectionLimit: 5
});
 
async function GetUserList(){
    let conn, rows;
    try{
        conn = await pool.getConnection();
        conn.query('USE nodejs_test');
        rows = await conn.query('SELECT * FROM users');
    }
    catch(err){
        throw err;
    }
    finally{
        if (conn) conn.end();
        return rows[0];
    }
}
 
module.exports = {
    getUserList: GetUserList
}
cs


** 접속정보는 별도 모듈에 저장해뒀습니다. 실제 사용시 pool내의 정보를 변경해 주시기 바랍니다.




6. MariaDB 커넥터 모듈을 사용해 유저 리스트를 가져오는 코드 작성


DB에 있는 정보를 가져와 봅시다.


index.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const mdbConn = require('./mariaDBConn.js')
const express = require('express');
const app = express();
 
mdbConn.getUserList()
  .then((rows) => {
    console.log(rows);
  })
  .catch((errMsg) => {
    console.log(errMsg);
  });
 
const port = process.env.PORT || 3000;
app.listen(port, () => {
  console.log(`listening on ${port}`);
});
cs


** express 프레임워크를 사용했습니다. 실행전에 express 프레임워크를 설치해 주시기 바랍니다.




7. 실행 및 결과 확인.


실행 결과는 다음과 같습니다.




반응형

모듈을 직접 만들어 사용해봅시다.



1. Workspace 생성




2. 커스텀 모듈 작성


간단한 사칙연산을 수행하는 모듈을 작성해 봅시다.


cal.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
function plus(a,b){
    return a+b;
}
 
function minus(a,b){
    return a-b;
}
 
function multiplication(a,b){
    return a*b;
}
 
function division(a,b){
    return a/b;
}
 
module.exports = {
    plus: plus,
    minus: minus,
    mult: multiplication,
    divi: division
}
cs


module.exprots = {} : 현재 소스를 모듈로 export 합니다


... divi: division ... : division의 이름을 가진 함수를 divi의 이름으로 export합니다.




3. 모듈 사용하기


모듈을 사용하는 소스코드를 작성합니다.


useModule.js


1
2
3
4
5
6
7
8
var cal = require('./cal');
 
console.log(cal.plus(42));
console.log(cal.minus(42));
console.log(cal.mult(42));
console.log(cal.divi(42));
 
 
cs


require('.\cal'); : 현재 실행하는 폴더내에 cal.js 모듈을 사용합니다


** 확장자를 입력하지 않으면 다음과 같은 동작을 합니다.

      1. 경로내에 cal.js를 우선 탐색합니다.
      2. cal.js파일이 없으면 cal 폴더를 탐색합니다. 
      3. 해당 폴더가 있으면 index.js 모듈을 사용합니다.




4. 실행 및 결과 확인


node useModule.js 를 통해 실행 후 다음과 같은 결과를 확인합니다.





반응형

NodeJs의 프레임워크 중에서 Express 프레임워크를 사용해봅시다.



1. Workspace 생성



2. Express framework 설치


cmd 혹은 powershell을 실행 후 workspace 폴더로 이동합니다.


npm install express 를 실행합니다.


수행 후 다음과 같은 메시지와 node_modules폴더, package-lock.json파일이 생성됨을 확인 할 수 있습니다.




3. hello-express.js작성


Express 프레임워크를 사용할 NodeJs코드를 작성합니다.


1
2
3
4
5
6
7
8
9
10
var express = require('express');
var app = express();
 
app.get('/'function(req, res) {
  res.send('Hello World!');
});
 
app.listen(3000function() {
  console.log('Example app listening on port 3000!');
});
cs


4. hello-express.js 실행


cmd 혹은 powershell로 node hello-express.js 를 실행합니다.



5. 결과 확인.


다음과 같은 결과를 확인합니다.



반응형

References: Express/Node introduction





NodeJs를 정상적으로 설치하였으면 간단한 코드로 NodeJs를 실행시켜 보겠습니다.




1. Workspace 생성


적당한 위치에 폴더를 하나 생성해 주세요.


e.g.  



2. js 파일 생성



NodeJs를 통해 Hello World를 출력하는 코드를 작성해 줍니다.


e.g) hello.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Load HTTP module
var http = require("http");
 
// Create HTTP server and listen on port 8000 for requests
http.createServer(function(request, response) {
 
   // Set the response HTTP header with HTTP status and Content type
   response.writeHead(200, {'Content-Type''text/plain'});
   
   // Send the response body "Hello World"
   response.end('Hello World\n');
}).listen(8000);
 
// Print URL for accessing server
console.log('Server running at http://127.0.0.1:8000/');
cs


3. 소스 실행.


CMD 또는 PowerShell을 실행후 workspace 폴더로 위치를 변경합니다.


node hello.js 를 입력합니다.




4. 결과 확인


다음과 같은 결과를 확인합니다.



반응형

+ Recent posts