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. 결과 확인


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



반응형

NodeJS 개발을 시작하기 위해 설치해야 할 것들.





1. NodeJs 설치하기


https://nodejs.org/ko/download/ 에서 플랫폼에 맞는 NodeJs버전을 다운 받은 후 설치합니다.



2. NPM 설치하기


사실 NodeJS를 설치하며 Next만 눌렀으면 알아서 설치됩니다.




3. 설치 확인하기


CMD를 열어 다음 명령어를 입력해 봅니다.

    • node -v
    • npm -v

다음 화면과 같이 버전이 출력되면 정상적으로 설치된 것 입니다.



반응형

References: Convert css width string to regular number




Source


var numWidth = parseInt( $("#myClass").css("width"), 10 );

반응형


스플래시 액티비티를 추가하는 방법을 설명합니다.





1. 액티비티를 추가합니다.


* 액티비티 생성시 Launcher Activity로 생성하지 않은 경우 AdriodMenifest.xml 파일을 수정해 줍니다.

<activity android:name=".SplashActivity">
<!-- 시작 액티비티를 스플래시로 변경. -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>



2. 스플래시 액티비티의 동작을 수정합니다.


* 스플래시 화면을 표시할 시간을 설정합니다.

* 메인 액티비티가 시작되면 스플래시 액티비티는 스택에서 제거합니다.

* 스플래시 액티비티 상태에서 뒤로가기 버튼의 기능을 제거합니다.


public class SplashActivity extends AppCompatActivity {
/* 스플래시 화면이 표시되는 시간을 설정(ms) */
private final int SPLASH_DISPLAY_TIME = 3000;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);

Handler handler = new Handler();
handler.postDelayed(new Runnable(){
@Override
public void run(){
startActivity(new Intent(getApplication(), MainActivity.class));
/* 스플래시 액티비티를 스택에서 제거. */
SplashActivity.this.finish();
}
}, SPLASH_DISPLAY_TIME);
}

@Override
public void onBackPressed() {
/* 스플래시 화면에서 뒤로가기 기능 제거. */
}
}


반응형

+ Recent posts