SlideShare a Scribd company logo
1 of 24
Nodejs ํ”„๋กœ๊ทธ๋ž˜๋ฐ

6. ๊ฒฝ๋Ÿ‰ ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์ต์Šคํ”„๋ ˆ์Šค

               ์•„ํ‚คํ…ํŠธ๋ฅผ ๊ฟˆ๊พธ๋Š” ์‚ฌ๋žŒ๋“ค ์˜ค์ „๋ฐ˜ ์Šคํ„ฐ๋””

                                 ์ „ํšจ์„ฑ( itmentor@gmail.com )
                                                         1
์ด๋ฒˆ ๋ฐœํ‘œ์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ
1.   Express ํ”„๋กœ์ ํŠธ ์…‹ํŒ…
2.   app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
3.   Jade ๋ทฐ ํ…œํ”Œ๋ฆฟ ์—”์ง„
4.   ํผ ์ „์†ก ์›น์‚ฌ์ดํŠธ ์˜ˆ์ œ
5.   ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™
6.   ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ



                       2
1. Express ํ”„๋กœ์ ํŠธ ์…‹ํŒ…
์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
$ npm install express -g
$ express simpleweb
$ cd simpleweb
$ npm install
$ npm install express jade




                             3
Simpleweb ์›นํŽ˜์ด์ง€ server-side๊ตฌ์„ฑ
โ€ข   node_modules
     โ€“   ํ•ด๋‹น ์›นํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ๋“ค์ด ์œ„์น˜ํ•จ.
โ€ข   Public
     โ€“   ์ •์  ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ์ €์žฅ ( css, ์ด๋ฏธ์ง€ ๋“ฑ )
โ€ข   Route
     โ€“   url์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜๋ฅผ ๋ชจ์•„๋‘๋Š” ๋””๋ ‰ํ† ๋ฆฌ.
โ€ข   Views
     โ€“   ํด๋ผ์ด์–ธํŠธ์— ๋ณด์—ฌ์ค„ ํ™”๋ฉด์˜ ํ…œํ”Œ๋ฆฟ์ด ์œ„์น˜ํ•จ.
โ€ข   App.js
     โ€“   main()ํ•จ์ˆ˜ ๊ฐœ๋…
โ€ข   Package.json
     โ€“   npm์œผ๋กœ ์„ค์น˜ํ•˜๋ฉด ์—ฌ๊ธฐ์— ์„ค์น˜๋œ ๋ชจ๋“ˆ์˜ ์ •๋ณด( ๋ฒ„์ „ )๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค.




                                                  4
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// ๋ชจ๋“ˆ ์ข…์†์„ฑ
var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// configuration
app.configure( function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});



                                                                              5
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// ๋ชจ๋“ˆ ์ข…์†์„ฑ
var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();
                                            ํ˜„์žฌ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ
// configuration
app.configure( function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});



                                                                              6
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// ๋ชจ๋“ˆ ์ข…์†์„ฑ
var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// configuration
app.configure( function() {
  app.set('views', __dirname + '/views');           โ€ข View template์—”์ง„๊ณผ view tempalte์œ„์น˜ ์ง€์ •
  app.set('view engine', 'jade');                   โ€ข app.set() ๏ƒ  ํŠน์ • ํ‚ค์— ๊ฐ’์„ ์ง€์ •

  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});



                                                                                            7
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// ๋ชจ๋“ˆ ์ข…์†์„ฑ
var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// configuration
app.configure( function() {
  app.set('views', __dirname + '/views');       โ€ข View template์—”์ง„๊ณผ view tempalte์œ„์น˜ ์ง€์ •
  app.set('view engine', 'jade');               โ€ข app.set() ๏ƒ  ํŠน์ • ํ‚ค์— ๊ฐ’์„ ์ง€์ •

  app.use(express.bodyParser());                           โ€ข app.use() ๏ƒ  ์‚ฌ์šฉํ•  ๋ฏธ๋“ค์›จ์–ด ๊ฒฐ์ •
  app.use(express.methodOverride());                       โ€ข express.static ๏ƒ  ๋ฆฌ์†Œ์ŠคํŒŒ์ผ ์œ„์น˜ ์ง€์ •
  app.use(app.router);                                     โ€ข express.bodyParser() ๏ƒ  application/x-www-form-
  app.use(express.static(__dirname + '/public'));            urlencoded๋‚˜ application/json์˜ ๋ฐ”๋””๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ
});                                                          req.body๋ณ€์ˆ˜์— ํ• ๋‹น

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});



                                                                                                              8
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// ๋ชจ๋“ˆ ์ข…์†์„ฑ
var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// configuration
app.configure( function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  app.use(express.bodyParser());                           โ€ข app.router ๏ƒ  ์š”์ฒญ url์„ ๋ผ์šฐํŒ…ํ•œ๋‹ค.
  app.use(express.methodOverride());
  app.use(app.router);                                     ์˜ˆ, http://localhost:3000/id์— ๋”ฐ๋ผ ํŽ˜์ด์ง€๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ
  app.use(express.static(__dirname + '/public'));          ์„ ๊ฒฝ์šฐ
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});



                                                                                                             9
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// ๋ชจ๋“ˆ ์ข…์†์„ฑ
var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// configuration
app.configure( function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  app.use(express.bodyParser());                          โ€ข express.methodOverride()
  app.use(express.methodOverride());                      โ€ข <input>ํƒœ๊ทธ์˜ method๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €
  app.use(app.router);                                      ์—์„œ ์ง€์› ๋ชปํ•˜๋Š” PUT, DELETE๋ฅผ ์ฒ˜๋ฆฌ
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, HTTP๋ช…๋ น์–ด })); ํด๋ผ์ด์–ธํŠธ์˜ ์˜๋„
                                                       showStack: true
});
                                                     GET                            ์„œ๋ฒ„์—์„œ ์ •๋ณด๋ฅผ ์–ป์–ด์˜จ๋‹ค.
app.configure('production', function(){
                                                     POST                           ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.
  app.use(express.errorHandler());
});                                                  PUT                            ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค.
                                                     DELETE                         ํŠน์ • ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•œ๋‹ค?!
                                                     โ€ข   ์ฐธ๊ณ  : http://code.google.com/intl/ko-KR/apis/gdata/docs/2.0/basics.html
                                                                                                                                  10
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// ๋ชจ๋“ˆ ์ข…์†์„ฑ
var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// configuration
app.configure( function() {
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));   ๊ฐœ๋ฐœ ์ค‘์ผ๋•Œ stack trace ์ถœ๋ ฅ
});

app.configure('production', function(){
  app.use(express.errorHandler());              ์‹ค ์„œ๋น„์Šค์‹œ error๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ
});



                                                                                                      11
2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ
// Routes โ€“ HTTP ๋ช…๋ น์–ด( get, put, post, delete )์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์—ฐ๊ฒฐ
app.get('/', routes.index);

// 3000๋ฒˆ ํฌํŠธ ์˜คํ”ˆ
app.listen(3000);

// ์„œ๋ฒ„ ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);




simpleweb/route/index.js
/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: 'Express' })
};
                                                                                                       12
3. Jade ๋ทฐ ํ…œํ”Œ๋ฆฟ ์—”์ง„




                   13
์ฑ„์ˆ˜์›๋‹˜ ๋ธ”๋กœ๊ทธ : http://blog.doortts.com/223   14
HTML ๏ƒ  Jade๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.




    http://html2jade.aaron-powell.com/   15
4. ํผ ์ „์†ก ์›น์‚ฌ์ดํŠธ ์˜ˆ์ œ
            app.js                               route/index.js
app.get('/', routes.index);
app.get('/join', routes.form);              exports.index = function(req, res){
app.post('/join', routes.join)                res.render('index', { title: 'Express' })
                                            };

                                            exports.form = function(req,res) {
                                              res.render('join-form', { title: 'Express' });
                                            };

                                            exports.join = function(req,res) {
                                                             res.render('join-result', {
                                                                           username: req.body.name,
                                                                           useremail: req.body.email,
                                                                           title: 'Express'
                                                             });
                                            };



                                  views./layout.jade




            views./index.jade    views./join-result.jade                 views./join-form.jade
                                                                                                        16
5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ - mysql
  ์„ค์น˜ ๋ฐ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
// install
$ npm install mysql

// TABLE์ƒ์„ฑ
CREATE TABLE members (name VARCHAR(20), email VARCHAR(30));




     route/index.js                                           repository.js
var repo = require( โ€˜../repositoryโ€™ );                   insertUser: function(user,res) {
                                                           ...
exports.index = function(req, res){                      }
โ€ฆ                                                        , hasNameAndEmail: function(user, res) {
                                                           client.query(
exports.join = function(req,res) {                           'SELECT * FROM ' + TABLE + 'WHERE name = ? OR email = ?'
  // repo.insertUser( req.body, res );                       , [user.name, user.email]
  repo. hasNameAndEmail( req.body, res );                    , function(err, results, fields) {
};                                                             if (err) {
                                                                 throw err;
                                                               }
                                                               if( results.length > 0 ) {
                                                                 res.render('join-fail', { title: 'Express' } );
                                                               } else {
                                                                 mysqlUtil.insertUser( user, res );
                                                               }
                                                           });
                                                         }                                                       17
5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ - mongodb
Repository.js




                       ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค
                          DB์ ‘๊ทผ ๋กœ์ง
                ์ฝ”๋“œ
                            ๊ฐ€์‹œํ™” ๋กœ์ง
                ๊ตฌ์กฐ




                ๋ทฐ ๋ Œ๋”๋ง / DB์ ‘๊ทผ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์ž.


                                         18
6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ

โ€ข ๋น„๋™๊ธฐ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค ๏ƒ  ์ˆ˜ํ–‰์‹œ์ ์„ ์•Œ ์ˆ˜ ์—†
  ๋‹ค.
โ€ข ํ•ด๋‹น ์‹œ์ ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ function
  parameter๋กœ ์ „๋‹ฌ


 var result = db.query(โ€˜SELECT โ€ฆโ€™ ); //๋™๊ธฐ ๋ฐฉ์‹ function call


 db.query(โ€˜SELECT โ€ฆ โ€˜, ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜) //๋น„๋™๊ธฐ ๋ฐฉ์‹ function call

                                                             19
6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ โ€“ ํ•ด๊ฒฐ์ฑ…

๋ฐฉ๋ฒ•1. callback์„ ์ด์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๋ถ„๋ฆฌ
// a.js
var b = require( './b' );
b.funcA( function( err, result1 ) {
  b.funcB( result1, function( err, result2 ) {
    //result๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ : ๋ Œ๋”๋ง ๋กœ์ง
  });
});

// b.js
var B = module.exports = {
  funcA: function( callback ) {
    db.query( 'SELECT ... ', callback );
  },
  funcB: function( callbck ) {
    db.query( 'SELECT ... ', callback );
  }
}


                                                 20
6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ โ€“ ํ•ด๊ฒฐ์ฑ…

๋ฐฉ๋ฒ•2. event๋ฅผ ์ด์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๋ถ„๋ฆฌ
// b.js                                                 // a.js
                                                        var b = require( './b' );
var EventEmitter = require('events').EventEmitter;      var resultA = b.funcA();
var B = module.exports = {
                                                        resultA.on( 'end', function( err, result ) {
  funcA: function() {
                                                          var resultB = b.funcB(result);
    var evt = new EventEmitter();
    db.query( 'SELECT ... ', function( err,result ) {     resultB.om( 'end', function( err, result ) {
      evt.emit('end', err, result );                        //result์‚ฌ์šฉํ•˜๋Š”์ฝ”๋“œ
    });                                                   });
    return evt;                                         });
  },
  funcA: function() {
    var evt = new EventEmitter();
    db.query( 'SELECT ... ', function( err,result ) {
      evt.emit('end', err, result );
    });
    return evt;
  }
}




                                                                                                         21
6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ โ€“ ํ•ด๊ฒฐ์ฑ…

๋น„๋™๊ธฐ ํ˜ธ์ถœ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•
func repeater(i)
{
  if( i < length )
  {
      requestAsyncWork ( function() {
         repeater(i+1)
      })
   }
}

repeater(0)




    โ€ข 0๋ฒˆ ์š”์ฒญ ๋ ๏ƒจ 1๋ฒˆ ์š”์ฒญ ๏ƒจ 1๋ฒˆ ์š”์ฒญ ๋ ๏ƒจ 2๋ฒˆ ์š”์ฒญ โ€ฆ
    โ€ข ๊ฒฐ๊ตญ ๋™๊ธฐ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์„ ๋น„๋™๊ธฐ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ.




                                            22
7. ์ •๋ฆฌ
โ€ข ์›น์„œ๋ฒ„ ์ƒ์„ฑ
 โ€“ express.createServer()
โ€ข ์„œ๋ฒ„ ์„ค์ •
 โ€“ express.createServer().configure( callback )
 โ€“ Callback์—์„œ express.createServer().set()๊ณผ
   express.createServer().use()์‚ฌ์šฉ
โ€ข GET/POST์˜ ๋ผ์šฐํŒ…
 โ€“ express.createServer().get()
 โ€“ express.createServer().post()
โ€ข HTML๋…ธ๊ฐ€๋‹ค ํ•˜์ง€ ๋ง๊ณ  jade๋กœ ์ž‘์„ฑํ•˜์ž.
 โ€“ ๋””์ž์ด๋„ˆ์™€ ์†Œํ†ต์ด ์–ด๋ ค์šธ์ˆ˜๋„ ์žˆ์Œ.
                                                  23
์งˆ๋ฌธ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค.


 Express์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•œ
 ๋‹ค.
http://firejune.io/express/guide๋ฅผ ์ฐธ์กฐ ํ•œ๋‹ค.




                                           24

More Related Content

What's hot

[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐ
[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐ[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐ
[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐNAVER Engineering
ย 
#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...
#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...
#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ
์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ
์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ์ˆ˜ํ™ ์ด
ย 
[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...
[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...
[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3
Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3
Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3์„ฑ์ผ ํ•œ
ย 
(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•
03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•
03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•Hankyo
ย 
แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4
แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4
แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4์„ฑ์ผ ํ•œ
ย 
02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)Hankyo
ย 
05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)
05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)
05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)Hankyo
ย 
02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)Hankyo
ย 
04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)Hankyo
ย 
#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)Hankyo
ย 
#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...ํƒ‘ํฌ๋ฆฌ์—๋“€(๊ตฌ๋กœ๋””์ง€ํ„ธ๋‹จ์ง€์—ญ3๋ฒˆ์ถœ๊ตฌ 2๋ถ„๊ฑฐ๋ฆฌ)
ย 
๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)
๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)
๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)์—ฐ์›… ์กฐ
ย 

What's hot (20)

[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐ
[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐ[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐ
[TECHCON 2019: MOBILE - Android]2.์˜ˆ์ œ์—์„œ๋Š” ์•Œ๋ ค์ฃผ์ง€ ์•Š๋Š” Model ์ด์•ผ๊ธฐ
ย 
#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...
#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...
#32.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ ๊ฐ•์ขŒ, ์žฌ์ง์žํ™˜๊ธ‰๊ต์œก,์‹ค์—…์ž๊ตญ๋น„์ง€์›...
ย 
(Spring Data JPA)๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ๋ณด๊ธฐ_์˜ค๋ผํด, ์Šคํ”„๋ง๋ถ€ํŠธ,ํŽ˜์ด์ง€๋‚˜๋ˆ„๊ธฐ
(Spring Data JPA)๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ๋ณด๊ธฐ_์˜ค๋ผํด, ์Šคํ”„๋ง๋ถ€ํŠธ,ํŽ˜์ด์ง€๋‚˜๋ˆ„๊ธฐ(Spring Data JPA)๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ๋ณด๊ธฐ_์˜ค๋ผํด, ์Šคํ”„๋ง๋ถ€ํŠธ,ํŽ˜์ด์ง€๋‚˜๋ˆ„๊ธฐ
(Spring Data JPA)๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ๋ณด๊ธฐ_์˜ค๋ผํด, ์Šคํ”„๋ง๋ถ€ํŠธ,ํŽ˜์ด์ง€๋‚˜๋ˆ„๊ธฐ
ย 
์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ
์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ
์‹ค์ „! ์Šคํ”„๋ง๊ณผ ํ•จ๊ป˜ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ด€๋ฆฌ ๋ณ€์ฒœ์‚ฌ ๋ฐœํ‘œ์ž๋ฃŒ
ย 
[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...
[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...
[์ž๋ฐ”ํ•™์›/์Šคํ”„๋ง๊ต์œกํ•™์›/๋งˆ์ด๋ฐ”ํ‹ฐ์Šคํ•™์›์ถ”์ฒœ/๊ตฌ๋กœITํ•™์›_ํƒ‘ํฌ๋ฆฌ์—๋“€]#7.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, M...
ย 
Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3
Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3
Laravel แ„…แ…ฉ แ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„‰แ…ฅแ„‡แ…ฅแ„‰แ…กแ„‹แ…ตแ„ƒแ…ณ #3
ย 
(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
(์ž๋ฐ”๊ต์œก/์Šคํ”„๋ง๊ต์œก/์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ๊ต์œก/๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๊ต์œก์ถ”์ฒœ)#2.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)
ย 
03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•
03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•
03.[์ฐธ๊ณ ]ํ‘œ์ค€ํ”„๋ ˆ์ž„์›Œํฌ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ๋ฐฉ๋ฒ•
ย 
(Spring Data JPA)์‹๋ณ„์ž(@Id, Primary Key) ์ž๋™ ์ƒ์„ฑ, @GeneratedValue์˜ strategy ์†์„ฑ,Ge...
(Spring Data JPA)์‹๋ณ„์ž(@Id, Primary Key) ์ž๋™ ์ƒ์„ฑ, @GeneratedValue์˜ strategy ์†์„ฑ,Ge...(Spring Data JPA)์‹๋ณ„์ž(@Id, Primary Key) ์ž๋™ ์ƒ์„ฑ, @GeneratedValue์˜ strategy ์†์„ฑ,Ge...
(Spring Data JPA)์‹๋ณ„์ž(@Id, Primary Key) ์ž๋™ ์ƒ์„ฑ, @GeneratedValue์˜ strategy ์†์„ฑ,Ge...
ย 
แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4
แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4
แ„Žแ…ฅแ„‹แ…ณแ†ทแ„‡แ…ขแ„‹แ…ฎแ„‚แ…ณแ†ซ แ„Œแ…กแ„‡แ…กแ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ธแ„แ…ณ, แ„Œแ…ฆแ„‹แ…ตแ„แ…ฏแ„…แ…ต #4
ย 
02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
ย 
05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)
05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)
05.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(์—…๋ฌด์ฒ˜๋ฆฌ,์—ฐ๊ณ„ํ†ตํ•ฉ)
ย 
(์Šคํ”„๋งJDBC์™€ Spring Data JPA๋น„๊ต)Spring JDBC์™€ JPA๋ฅผ ๊ฐ„๋‹จํ•œ CRUD ์˜ˆ์ œ๋กœ ๋งŒ๋“ค๋ฉด์„œ ๋น„๊ตํ•ด๋ณด์ž.
(์Šคํ”„๋งJDBC์™€ Spring Data JPA๋น„๊ต)Spring JDBC์™€ JPA๋ฅผ ๊ฐ„๋‹จํ•œ CRUD ์˜ˆ์ œ๋กœ  ๋งŒ๋“ค๋ฉด์„œ ๋น„๊ตํ•ด๋ณด์ž.(์Šคํ”„๋งJDBC์™€ Spring Data JPA๋น„๊ต)Spring JDBC์™€ JPA๋ฅผ ๊ฐ„๋‹จํ•œ CRUD ์˜ˆ์ œ๋กœ  ๋งŒ๋“ค๋ฉด์„œ ๋น„๊ตํ•ด๋ณด์ž.
(์Šคํ”„๋งJDBC์™€ Spring Data JPA๋น„๊ต)Spring JDBC์™€ JPA๋ฅผ ๊ฐ„๋‹จํ•œ CRUD ์˜ˆ์ œ๋กœ ๋งŒ๋“ค๋ฉด์„œ ๋น„๊ตํ•ด๋ณด์ž.
ย 
02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
02.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(๋ฐ์ดํ„ฐ์ฒ˜๋ฆฌ)
ย 
(์Šคํ”„๋ง ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ)์Šคํ”„๋ง DI๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜,์ž๋™์Šค์บ๋‹ ์ปดํฌ๋„ŒํŠธ(Spring Framework Auto-Scanning Component)
(์Šคํ”„๋ง ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ)์Šคํ”„๋ง DI๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜,์ž๋™์Šค์บ๋‹ ์ปดํฌ๋„ŒํŠธ(Spring Framework Auto-Scanning Component)(์Šคํ”„๋ง ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ)์Šคํ”„๋ง DI๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜,์ž๋™์Šค์บ๋‹ ์ปดํฌ๋„ŒํŠธ(Spring Framework Auto-Scanning Component)
(์Šคํ”„๋ง ์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ)์Šคํ”„๋ง DI๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜,์ž๋™์Šค์บ๋‹ ์ปดํฌ๋„ŒํŠธ(Spring Framework Auto-Scanning Component)
ย 
04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ์‹ค์Šต๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
ย 
#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#17.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
ย 
04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
04.์‹คํ–‰ํ™˜๊ฒฝ ๊ต์œก๊ต์žฌ(ํ™”๋ฉด์ฒ˜๋ฆฌ)
ย 
#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
#16.์Šคํ”„๋งํ”„๋ ˆ์ž„์›Œํฌ & ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค (Spring Framework, MyBatis)_๊ตญ๋น„์ง€์›ITํ•™์›/์‹ค์—…์ž/์žฌ์ง์žํ™˜๊ธ‰๊ต์œก/์ž๋ฐ”/์Šคํ”„๋ง/...
ย 
๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)
๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)
๋ง‰ํ•˜๋Š”์Šคํ„ฐ๋”” ๋‘๋ฒˆ์งธ๋งŒ๋‚จ Express(20151025)
ย 

Similar to Nodejs express

One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelabWebFrameworks
ย 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSCirculus
ย 
Node.js and react
Node.js and reactNode.js and react
Node.js and reactHyungKuIm
ย 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs๊ธฐ๋™ ์ด
ย 
Node.js ์‹ฌํ™”๊ณผ์ •
Node.js ์‹ฌํ™”๊ณผ์ •Node.js ์‹ฌํ™”๊ณผ์ •
Node.js ์‹ฌํ™”๊ณผ์ •Seokyou (Kevin) Hong
ย 
Mean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏ
Mean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏMean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏ
Mean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏJay Park
ย 
Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)
Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)
Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)LanarkSeung
ย 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jqueryJinKyoungHeo
ย 
overview of spring4
overview of spring4overview of spring4
overview of spring4Arawn Park
ย 
Nest js 101
Nest js 101Nest js 101
Nest js 101Daniel Lim
ย 
์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012
์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012
์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012Daum DNA
ย 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&httpDong Jun Kwon
ย 
Vue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptx
Vue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptxVue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptx
Vue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptxwonyong hwang
ย 
React ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐ
React ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐReact ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐ
React ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐ์ฒ ๋ฏผ ๋ฐฐ
ย 
Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)
Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)
Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)Sungjoon Yoon
ย 
์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]WSConf.
ย 
vine webdev
vine webdevvine webdev
vine webdevdcfc1997
ย 
Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜
Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜
Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜JeongHun Byeon
ย 
Node.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉ
Node.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉNode.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉ
Node.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉJin wook
ย 

Similar to Nodejs express (20)

One-day-codelab
One-day-codelabOne-day-codelab
One-day-codelab
ย 
Startup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JSStartup JavaScript 8 - NPM, Express.JS
Startup JavaScript 8 - NPM, Express.JS
ย 
Node.js and react
Node.js and reactNode.js and react
Node.js and react
ย 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
ย 
Node.js ์‹ฌํ™”๊ณผ์ •
Node.js ์‹ฌํ™”๊ณผ์ •Node.js ์‹ฌํ™”๊ณผ์ •
Node.js ์‹ฌํ™”๊ณผ์ •
ย 
Mean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏ
Mean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏMean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏ
Mean แ„‰แ…ณแ„แ…ขแ†จแ„‹แ…ณแ†ฏ แ„‰แ…กแ„‹แ…ญแ†ผแ„’แ…กแ†ซ IoT แ„€แ…ขแ„‡แ…กแ†ฏ
ย 
Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)
Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)
Create-React-App์œผ๋กœ SSR์„ ๊ตฌํ˜„ํ•˜๋ฉฐ ๋ฐฐ์šด ์  (feat. TypeScript)
ย 
4-3. jquery
4-3. jquery4-3. jquery
4-3. jquery
ย 
Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial
ย 
overview of spring4
overview of spring4overview of spring4
overview of spring4
ย 
Nest js 101
Nest js 101Nest js 101
Nest js 101
ย 
์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012
์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012
์บ ํ”„์•ฑ ๊ฐœ๋ฐœ ์‚ฌ๋ก€๋ฅผ ํ†ตํ•ด ๋ณธ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ์•ฑ ์–ด๋””๊นŒ์ง€ | Devon 2012
ย 
Angular2 router&http
Angular2 router&httpAngular2 router&http
Angular2 router&http
ย 
Vue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptx
Vue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptxVue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptx
Vue.js ๊ธฐ์ดˆ ์‹ค์Šต.pptx
ย 
React ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐ
React ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐReact ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐ
React ์‹ค๋ฌดํ™œ์šฉ ์ด์•ผ๊ธฐ
ย 
Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)
Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)
Ksug ์„ธ๋ฏธ๋‚˜ (์œค์„ฑ์ค€) (20121208)
ย 
์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
์กฐ์€ - AMP PWA 101 [WSConf.Seoul.2017. Vol.2]
ย 
vine webdev
vine webdevvine webdev
vine webdev
ย 
Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜
Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜
Front-end Development Process - ์–ด๋””๊นŒ์ง€ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‚˜
ย 
Node.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉ
Node.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉNode.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉ
Node.js์˜ ๋„์ž…๊ณผ ํ™œ์šฉ
ย 

More from Hyosung Jeon

windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. JobHyosung Jeon
ย 
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„Hyosung Jeon
ย 
Mongo db ๋ณต์ œ(Replication)
Mongo db ๋ณต์ œ(Replication)Mongo db ๋ณต์ œ(Replication)
Mongo db ๋ณต์ œ(Replication)Hyosung Jeon
ย 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
ย 
Map reduce
Map reduceMap reduce
Map reduceHyosung Jeon
ย 
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™Hyosung Jeon
ย 

More from Hyosung Jeon (7)

windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. Job
ย 
WebGL
WebGLWebGL
WebGL
ย 
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
9์žฅ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„
ย 
Mongo db ๋ณต์ œ(Replication)
Mongo db ๋ณต์ œ(Replication)Mongo db ๋ณต์ œ(Replication)
Mongo db ๋ณต์ œ(Replication)
ย 
xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
ย 
Map reduce
Map reduceMap reduce
Map reduce
ย 
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™
๋ชฉ์ ์ด ๋ถ€์—ฌ๋œ ์—์ด์ „ํŠธ ํ–‰๋™
ย 

Nodejs express

  • 1. Nodejs ํ”„๋กœ๊ทธ๋ž˜๋ฐ 6. ๊ฒฝ๋Ÿ‰ ์›น ํ”„๋ ˆ์ž„์›Œํฌ ์ต์Šคํ”„๋ ˆ์Šค ์•„ํ‚คํ…ํŠธ๋ฅผ ๊ฟˆ๊พธ๋Š” ์‚ฌ๋žŒ๋“ค ์˜ค์ „๋ฐ˜ ์Šคํ„ฐ๋”” ์ „ํšจ์„ฑ( itmentor@gmail.com ) 1
  • 2. ์ด๋ฒˆ ๋ฐœํ‘œ์—์„œ ๋‹ค๋ฃฐ ๋‚ด์šฉ 1. Express ํ”„๋กœ์ ํŠธ ์…‹ํŒ… 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ 3. Jade ๋ทฐ ํ…œํ”Œ๋ฆฟ ์—”์ง„ 4. ํผ ์ „์†ก ์›น์‚ฌ์ดํŠธ ์˜ˆ์ œ 5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ 6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ 2
  • 3. 1. Express ํ”„๋กœ์ ํŠธ ์…‹ํŒ… ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. $ npm install express -g $ express simpleweb $ cd simpleweb $ npm install $ npm install express jade 3
  • 4. Simpleweb ์›นํŽ˜์ด์ง€ server-side๊ตฌ์„ฑ โ€ข node_modules โ€“ ํ•ด๋‹น ์›นํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ๋“ค์ด ์œ„์น˜ํ•จ. โ€ข Public โ€“ ์ •์  ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ์ €์žฅ ( css, ์ด๋ฏธ์ง€ ๋“ฑ ) โ€ข Route โ€“ url์— ๋”ฐ๋ผ ํ˜ธ์ถœ๋  ํ•จ์ˆ˜๋ฅผ ๋ชจ์•„๋‘๋Š” ๋””๋ ‰ํ† ๋ฆฌ. โ€ข Views โ€“ ํด๋ผ์ด์–ธํŠธ์— ๋ณด์—ฌ์ค„ ํ™”๋ฉด์˜ ํ…œํ”Œ๋ฆฟ์ด ์œ„์น˜ํ•จ. โ€ข App.js โ€“ main()ํ•จ์ˆ˜ ๊ฐœ๋… โ€ข Package.json โ€“ npm์œผ๋กœ ์„ค์น˜ํ•˜๋ฉด ์—ฌ๊ธฐ์— ์„ค์น˜๋œ ๋ชจ๋“ˆ์˜ ์ •๋ณด( ๋ฒ„์ „ )๊ฐ€ ๋“ค์–ด๊ฐ„๋‹ค. 4
  • 5. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // ๋ชจ๋“ˆ ์ข…์†์„ฑ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); // configuration app.configure( function() { app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); 5
  • 6. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // ๋ชจ๋“ˆ ์ข…์†์„ฑ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); ํ˜„์žฌ ํŒŒ์ผ์˜ ์ ˆ๋Œ€ ๊ฒฝ๋กœ // configuration app.configure( function() { app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); 6
  • 7. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // ๋ชจ๋“ˆ ์ข…์†์„ฑ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); // configuration app.configure( function() { app.set('views', __dirname + '/views'); โ€ข View template์—”์ง„๊ณผ view tempalte์œ„์น˜ ์ง€์ • app.set('view engine', 'jade'); โ€ข app.set() ๏ƒ  ํŠน์ • ํ‚ค์— ๊ฐ’์„ ์ง€์ • app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); 7
  • 8. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // ๋ชจ๋“ˆ ์ข…์†์„ฑ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); // configuration app.configure( function() { app.set('views', __dirname + '/views'); โ€ข View template์—”์ง„๊ณผ view tempalte์œ„์น˜ ์ง€์ • app.set('view engine', 'jade'); โ€ข app.set() ๏ƒ  ํŠน์ • ํ‚ค์— ๊ฐ’์„ ์ง€์ • app.use(express.bodyParser()); โ€ข app.use() ๏ƒ  ์‚ฌ์šฉํ•  ๋ฏธ๋“ค์›จ์–ด ๊ฒฐ์ • app.use(express.methodOverride()); โ€ข express.static ๏ƒ  ๋ฆฌ์†Œ์ŠคํŒŒ์ผ ์œ„์น˜ ์ง€์ • app.use(app.router); โ€ข express.bodyParser() ๏ƒ  application/x-www-form- app.use(express.static(__dirname + '/public')); urlencoded๋‚˜ application/json์˜ ๋ฐ”๋””๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ }); req.body๋ณ€์ˆ˜์— ํ• ๋‹น app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); 8
  • 9. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // ๋ชจ๋“ˆ ์ข…์†์„ฑ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); // configuration app.configure( function() { app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); โ€ข app.router ๏ƒ  ์š”์ฒญ url์„ ๋ผ์šฐํŒ…ํ•œ๋‹ค. app.use(express.methodOverride()); app.use(app.router); ์˜ˆ, http://localhost:3000/id์— ๋”ฐ๋ผ ํŽ˜์ด์ง€๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ app.use(express.static(__dirname + '/public')); ์„ ๊ฒฝ์šฐ }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function(){ app.use(express.errorHandler()); }); 9
  • 10. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // ๋ชจ๋“ˆ ์ข…์†์„ฑ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); // configuration app.configure( function() { app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); โ€ข express.methodOverride() app.use(express.methodOverride()); โ€ข <input>ํƒœ๊ทธ์˜ method๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ € app.use(app.router); ์—์„œ ์ง€์› ๋ชปํ•˜๋Š” PUT, DELETE๋ฅผ ์ฒ˜๋ฆฌ app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, HTTP๋ช…๋ น์–ด })); ํด๋ผ์ด์–ธํŠธ์˜ ์˜๋„ showStack: true }); GET ์„œ๋ฒ„์—์„œ ์ •๋ณด๋ฅผ ์–ป์–ด์˜จ๋‹ค. app.configure('production', function(){ POST ์ •๋ณด๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค. app.use(express.errorHandler()); }); PUT ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. DELETE ํŠน์ • ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•œ๋‹ค?! โ€ข ์ฐธ๊ณ  : http://code.google.com/intl/ko-KR/apis/gdata/docs/2.0/basics.html 10
  • 11. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // ๋ชจ๋“ˆ ์ข…์†์„ฑ var express = require('express') , routes = require('./routes'); var app = module.exports = express.createServer(); // configuration app.configure( function() { app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); }); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); ๊ฐœ๋ฐœ ์ค‘์ผ๋•Œ stack trace ์ถœ๋ ฅ }); app.configure('production', function(){ app.use(express.errorHandler()); ์‹ค ์„œ๋น„์Šค์‹œ error๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š์Œ }); 11
  • 12. 2. app.js ์†Œ์Šค ์‚ดํŽด๋ณด๊ธฐ // Routes โ€“ HTTP ๋ช…๋ น์–ด( get, put, post, delete )์— ๋Œ€ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์—ฐ๊ฒฐ app.get('/', routes.index); // 3000๋ฒˆ ํฌํŠธ ์˜คํ”ˆ app.listen(3000); // ์„œ๋ฒ„ ์ฝ˜์†”์— ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env); simpleweb/route/index.js /* * GET home page. */ exports.index = function(req, res){ res.render('index', { title: 'Express' }) }; 12
  • 13. 3. Jade ๋ทฐ ํ…œํ”Œ๋ฆฟ ์—”์ง„ 13
  • 15. HTML ๏ƒ  Jade๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. http://html2jade.aaron-powell.com/ 15
  • 16. 4. ํผ ์ „์†ก ์›น์‚ฌ์ดํŠธ ์˜ˆ์ œ app.js route/index.js app.get('/', routes.index); app.get('/join', routes.form); exports.index = function(req, res){ app.post('/join', routes.join) res.render('index', { title: 'Express' }) }; exports.form = function(req,res) { res.render('join-form', { title: 'Express' }); }; exports.join = function(req,res) { res.render('join-result', { username: req.body.name, useremail: req.body.email, title: 'Express' }); }; views./layout.jade views./index.jade views./join-result.jade views./join-form.jade 16
  • 17. 5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ - mysql ์„ค์น˜ ๋ฐ ํ…Œ์ด๋ธ” ์ƒ์„ฑ // install $ npm install mysql // TABLE์ƒ์„ฑ CREATE TABLE members (name VARCHAR(20), email VARCHAR(30)); route/index.js repository.js var repo = require( โ€˜../repositoryโ€™ ); insertUser: function(user,res) { ... exports.index = function(req, res){ } โ€ฆ , hasNameAndEmail: function(user, res) { client.query( exports.join = function(req,res) { 'SELECT * FROM ' + TABLE + 'WHERE name = ? OR email = ?' // repo.insertUser( req.body, res ); , [user.name, user.email] repo. hasNameAndEmail( req.body, res ); , function(err, results, fields) { }; if (err) { throw err; } if( results.length > 0 ) { res.render('join-fail', { title: 'Express' } ); } else { mysqlUtil.insertUser( user, res ); } }); } 17
  • 18. 5. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ - mongodb Repository.js ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค DB์ ‘๊ทผ ๋กœ์ง ์ฝ”๋“œ ๊ฐ€์‹œํ™” ๋กœ์ง ๊ตฌ์กฐ ๋ทฐ ๋ Œ๋”๋ง / DB์ ‘๊ทผ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์ž. 18
  • 19. 6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ โ€ข ๋น„๋™๊ธฐ๋กœ ์ˆ˜ํ–‰๋œ๋‹ค ๏ƒ  ์ˆ˜ํ–‰์‹œ์ ์„ ์•Œ ์ˆ˜ ์—† ๋‹ค. โ€ข ํ•ด๋‹น ์‹œ์ ์— ์‹คํ–‰๋  ํ•จ์ˆ˜๋ฅผ function parameter๋กœ ์ „๋‹ฌ var result = db.query(โ€˜SELECT โ€ฆโ€™ ); //๋™๊ธฐ ๋ฐฉ์‹ function call db.query(โ€˜SELECT โ€ฆ โ€˜, ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜) //๋น„๋™๊ธฐ ๋ฐฉ์‹ function call 19
  • 20. 6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ โ€“ ํ•ด๊ฒฐ์ฑ… ๋ฐฉ๋ฒ•1. callback์„ ์ด์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๋ถ„๋ฆฌ // a.js var b = require( './b' ); b.funcA( function( err, result1 ) { b.funcB( result1, function( err, result2 ) { //result๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ : ๋ Œ๋”๋ง ๋กœ์ง }); }); // b.js var B = module.exports = { funcA: function( callback ) { db.query( 'SELECT ... ', callback ); }, funcB: function( callbck ) { db.query( 'SELECT ... ', callback ); } } 20
  • 21. 6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ โ€“ ํ•ด๊ฒฐ์ฑ… ๋ฐฉ๋ฒ•2. event๋ฅผ ์ด์šฉํ•˜์—ฌ ์˜์กด์„ฑ ๋ถ„๋ฆฌ // b.js // a.js var b = require( './b' ); var EventEmitter = require('events').EventEmitter; var resultA = b.funcA(); var B = module.exports = { resultA.on( 'end', function( err, result ) { funcA: function() { var resultB = b.funcB(result); var evt = new EventEmitter(); db.query( 'SELECT ... ', function( err,result ) { resultB.om( 'end', function( err, result ) { evt.emit('end', err, result ); //result์‚ฌ์šฉํ•˜๋Š”์ฝ”๋“œ }); }); return evt; }); }, funcA: function() { var evt = new EventEmitter(); db.query( 'SELECT ... ', function( err,result ) { evt.emit('end', err, result ); }); return evt; } } 21
  • 22. 6. ๋น„๋™๊ธฐ ํŒจํ„ด์˜ ์˜์กด์„ฑ ๋ฌธ์ œ โ€“ ํ•ด๊ฒฐ์ฑ… ๋น„๋™๊ธฐ ํ˜ธ์ถœ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• func repeater(i) { if( i < length ) { requestAsyncWork ( function() { repeater(i+1) }) } } repeater(0) โ€ข 0๋ฒˆ ์š”์ฒญ ๋ ๏ƒจ 1๋ฒˆ ์š”์ฒญ ๏ƒจ 1๋ฒˆ ์š”์ฒญ ๋ ๏ƒจ 2๋ฒˆ ์š”์ฒญ โ€ฆ โ€ข ๊ฒฐ๊ตญ ๋™๊ธฐ์™€ ๋™์ผํ•œ ๋ฐฉ์‹์„ ๋น„๋™๊ธฐ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ. 22
  • 23. 7. ์ •๋ฆฌ โ€ข ์›น์„œ๋ฒ„ ์ƒ์„ฑ โ€“ express.createServer() โ€ข ์„œ๋ฒ„ ์„ค์ • โ€“ express.createServer().configure( callback ) โ€“ Callback์—์„œ express.createServer().set()๊ณผ express.createServer().use()์‚ฌ์šฉ โ€ข GET/POST์˜ ๋ผ์šฐํŒ… โ€“ express.createServer().get() โ€“ express.createServer().post() โ€ข HTML๋…ธ๊ฐ€๋‹ค ํ•˜์ง€ ๋ง๊ณ  jade๋กœ ์ž‘์„ฑํ•˜์ž. โ€“ ๋””์ž์ด๋„ˆ์™€ ์†Œํ†ต์ด ์–ด๋ ค์šธ์ˆ˜๋„ ์žˆ์Œ. 23
  • 24. ์งˆ๋ฌธ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค. Express์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•œ ๋‹ค. http://firejune.io/express/guide๋ฅผ ์ฐธ์กฐ ํ•œ๋‹ค. 24