SlideShare a Scribd company logo
Node.js + Express + MongoDB
  를 활용한 웹애플리케이션 개발



          2013.3.18

         티몬 웹개발유닛
            박상국
Node.js
• Server-side (익숙한) Javascript
• is not Library or Framework
• But Google 자바스크립트 엔진 v8
• Purely Evented
• Non-blocking(비동기) I/O

• Event Loop & Callback Pattern
• Npm (Nodejs Package Manager)
Apache vs Nginx
Event Loop
그 동안 우리는 :

 puts("Enter your name: ");
 var name = gets();
 puts("Name: " + name);




앞으로 우리는 :

 puts("Enter your name: ");
 gets(function(name) {
          puts("Name: " + name);
 });
Example
Express
• Node.js 용 MVC Framework

• 고성능, 고품격(?) 웹app 개발

• 강력한 라우팅

• Restful

• 쉬운 기능확장

• 템플릿 엔진 Jade
Express 구조
• node_modules
 추가 확장 모듈이 저장되는 곳
• public
 이미지, js, css 등의 미디어 파일을 저장한다
• routes
 데이터 엑세스 및 서버사이드 작업 라우팅 (Controller)
• Views
  html 등의 템플릿 뷰. Jade 등의 템플릿엔진 사용 (View)
• app.js
  main 실행 파일
• package.json
  패키지 설정
Jade
Node Template Engine



 doctype 5                          <!DOCTYPE html>
 html(lang="en")                    <html lang="en">
  head                               <head>
   title= pageTitle                   <title>Jade</title>
                                      <script type="text/javascript">
   script(type='text/javascript')
                                        if (foo) {
     if (foo) {                                    bar()
        bar()                           }
     }                                </script>
  body                               </head>
   h1 Jade - node template engine    <body>
                                      <h1>Jade - node template engine</h1>
   #container
                                      <div id="container">
     if youAreUsingJade                 <p>You are amazing</p>
       p You are amazing              </div>
     else                            </body>
       p Get on it!                 </html>
Express 시작하기

$ express test
$ cd test && npm install

           -끝-
Example
MongoDB
• NoSQL 계의 김연아
• 대용량을 지향하는 문서기반의 데이터구조
• 기존 RDBMS 대비 월등한 속도 & 퍼포먼스
• (익숙한) Json 기반의 데이터
• No Schema – 관계성을 포기하고 확장성을 선택
• SQL Syntax 에 그나마 가장 근접
• Auto-sharding (아직은 미흡)
• Mongoose
SQL vs MongoDB
SQL Terms/Concepts                       MongoDB Terms/Concepts

database                                 database
table                                    collection
row                                      document or BSON document
column                                   field

primary key                              primary key
Specify any unique column or column co   In MongoDB, the primary key is automa
mbination as primary key.                tically set to the _id field.

CREATE TABLE users (
  id MEDIUMINT NOT NULL
                                         db.users.insert( {
     AUTO_INCREMENT,
                                           user_id: "abc123",
  user_id Varchar(30),
                                           age: 55,
  age Number,
                                           status: "A"
  status char(1),
                                         })
  PRIMARY KEY (id)
)
SQL Terms/Concepts                        MongoDB Terms/Concepts
                                          db.users.insert( {
INSERT INTO users(user_id, age, status)
                                              user_id: "bcd001", age: 45, status: "A"
VALUES ("bcd001", 45, "A")
                                          })

SELECT *
                                          db.users.find()
FROM users
SELECT * FROM users
                                          db.users.find({ status: "A" })
WHERE status = "A"
                                          db.users.find(
                                            { status: "A“, status: { $ne: “B" },
SELECT user_id, status FROM users
                                              age: { $gt: 25, $lte: 50 },
WHERE status = "A“ AND status != “B“
                                              user_id: /bc/
AND age > 25 AND age <= 50
                                            },
AND user_id like "%bc%"
                                            { user_id: 1, status: 1, _id: 0 }
                                          )
SELECT * FROM users
                                          db.users.find( { status: "A" } ).sort( { user_id: -
WHERE status = "A"
                                          1})
ORDER BY user_id DESC
SELECT COUNT(*)
FROM users                                db.users.count( { age: { $gt: 30 } } )
WHERE age > 30
SELECT *                                  db.users.findOne()
FROM users                                or
LIMIT 1                                   db.users.find().limit(1)
Example

More Related Content

What's hot (20)

PPTX
5-1. html5 graphics
JinKyoungHeo
 
PPTX
Hacosa jquery 1th
Seong Bong Ji
 
PPTX
4-3. jquery
JinKyoungHeo
 
PDF
Mymysql basic sql
Hoyoung Jung
 
PPTX
Hacosa j query 3th
Seong Bong Ji
 
PDF
Jquery핵심노토
jeong seok yang
 
PPTX
181215 MS SQL로 알아보는 데이터베이스
KWANGIL KIM
 
PDF
추억의 자바스크립트
욱진 양
 
PPTX
Java JPA
Yonghoon Ji
 
PDF
MongoDB 하루만에 끝내기
Seongkuk Park
 
PPT
First Step In Ajax Korean
Terry Cho
 
PPTX
Hacosa j query 4th
Seong Bong Ji
 
PPT
자바야 놀자 PPT
JinKyoungHeo
 
PDF
Ksug2015 jpa4 객체지향쿼리
Younghan Kim
 
PDF
DDD로 복잡함 다루기
beom kyun choi
 
PPTX
Mongo DB로 진행하는 CRUD
Jin wook
 
PPTX
영속성 컨텍스트로 보는 JPA
경원 이
 
PDF
PHP를 이용한 간단한 방명록 만들기
Yoonwhan Lee
 
PDF
다시보는 Angular js
Jeado Ko
 
PDF
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
Jeado Ko
 
5-1. html5 graphics
JinKyoungHeo
 
Hacosa jquery 1th
Seong Bong Ji
 
4-3. jquery
JinKyoungHeo
 
Mymysql basic sql
Hoyoung Jung
 
Hacosa j query 3th
Seong Bong Ji
 
Jquery핵심노토
jeong seok yang
 
181215 MS SQL로 알아보는 데이터베이스
KWANGIL KIM
 
추억의 자바스크립트
욱진 양
 
Java JPA
Yonghoon Ji
 
MongoDB 하루만에 끝내기
Seongkuk Park
 
First Step In Ajax Korean
Terry Cho
 
Hacosa j query 4th
Seong Bong Ji
 
자바야 놀자 PPT
JinKyoungHeo
 
Ksug2015 jpa4 객체지향쿼리
Younghan Kim
 
DDD로 복잡함 다루기
beom kyun choi
 
Mongo DB로 진행하는 CRUD
Jin wook
 
영속성 컨텍스트로 보는 JPA
경원 이
 
PHP를 이용한 간단한 방명록 만들기
Yoonwhan Lee
 
다시보는 Angular js
Jeado Ko
 
[XECon+PHPFest 2014] jQuery 개발자에서 AngularJS 개발자 되기
Jeado Ko
 

Node.js + Express + MongoDB

  • 1. Node.js + Express + MongoDB 를 활용한 웹애플리케이션 개발 2013.3.18 티몬 웹개발유닛 박상국
  • 2. Node.js • Server-side (익숙한) Javascript • is not Library or Framework • But Google 자바스크립트 엔진 v8 • Purely Evented • Non-blocking(비동기) I/O • Event Loop & Callback Pattern • Npm (Nodejs Package Manager)
  • 4. Event Loop 그 동안 우리는 : puts("Enter your name: "); var name = gets(); puts("Name: " + name); 앞으로 우리는 : puts("Enter your name: "); gets(function(name) { puts("Name: " + name); });
  • 6. Express • Node.js 용 MVC Framework • 고성능, 고품격(?) 웹app 개발 • 강력한 라우팅 • Restful • 쉬운 기능확장 • 템플릿 엔진 Jade
  • 7. Express 구조 • node_modules 추가 확장 모듈이 저장되는 곳 • public 이미지, js, css 등의 미디어 파일을 저장한다 • routes 데이터 엑세스 및 서버사이드 작업 라우팅 (Controller) • Views html 등의 템플릿 뷰. Jade 등의 템플릿엔진 사용 (View) • app.js main 실행 파일 • package.json 패키지 설정
  • 8. Jade Node Template Engine doctype 5 <!DOCTYPE html> html(lang="en") <html lang="en"> head <head> title= pageTitle <title>Jade</title> <script type="text/javascript"> script(type='text/javascript') if (foo) { if (foo) { bar() bar() } } </script> body </head> h1 Jade - node template engine <body> <h1>Jade - node template engine</h1> #container <div id="container"> if youAreUsingJade <p>You are amazing</p> p You are amazing </div> else </body> p Get on it! </html>
  • 9. Express 시작하기 $ express test $ cd test && npm install -끝-
  • 11. MongoDB • NoSQL 계의 김연아 • 대용량을 지향하는 문서기반의 데이터구조 • 기존 RDBMS 대비 월등한 속도 & 퍼포먼스 • (익숙한) Json 기반의 데이터 • No Schema – 관계성을 포기하고 확장성을 선택 • SQL Syntax 에 그나마 가장 근접 • Auto-sharding (아직은 미흡) • Mongoose
  • 12. SQL vs MongoDB SQL Terms/Concepts MongoDB Terms/Concepts database database table collection row document or BSON document column field primary key primary key Specify any unique column or column co In MongoDB, the primary key is automa mbination as primary key. tically set to the _id field. CREATE TABLE users ( id MEDIUMINT NOT NULL db.users.insert( { AUTO_INCREMENT, user_id: "abc123", user_id Varchar(30), age: 55, age Number, status: "A" status char(1), }) PRIMARY KEY (id) )
  • 13. SQL Terms/Concepts MongoDB Terms/Concepts db.users.insert( { INSERT INTO users(user_id, age, status) user_id: "bcd001", age: 45, status: "A" VALUES ("bcd001", 45, "A") }) SELECT * db.users.find() FROM users SELECT * FROM users db.users.find({ status: "A" }) WHERE status = "A" db.users.find( { status: "A“, status: { $ne: “B" }, SELECT user_id, status FROM users age: { $gt: 25, $lte: 50 }, WHERE status = "A“ AND status != “B“ user_id: /bc/ AND age > 25 AND age <= 50 }, AND user_id like "%bc%" { user_id: 1, status: 1, _id: 0 } ) SELECT * FROM users db.users.find( { status: "A" } ).sort( { user_id: - WHERE status = "A" 1}) ORDER BY user_id DESC SELECT COUNT(*) FROM users db.users.count( { age: { $gt: 30 } } ) WHERE age > 30 SELECT * db.users.findOne() FROM users or LIMIT 1 db.users.find().limit(1)