๐ŸŒณ๋ชฉํ‘œ

์ง€๊ธˆ๊นŒ์ง€ ๋งŒ๋“ค์—ˆ๋˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์›น ํ”„๋ ˆ์ž„์›์„ ์ด์šฉํ•ด์„œ ๋‹ค์‹œ ๋งŒ๋“ค์–ด ๋ด…๋‹ˆ๋‹ค.

Express.js๋กœ ๋‹ค์‹œ ๋งŒ๋“ค๊ธฐ

๋จผ์ € ์ง€๋‚œ ์‹œ๊ฐ„๊นŒ์ง€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋กœ ์ด๋™ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$ git checkout -f route/post-posts

์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋งŒ๋“ค์—ˆ๋˜ debug ๋ชจ๋“ˆ์„ ๊ธฐ์–ตํ•˜์‹œ๋‚˜์š”? ์ด์ œ๋Š” NPM์—์„œ ๋‹ค์šด๋ฐ›์•„ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ๊ฒƒ๊ณผ ๊ต์ฒดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

$ npm install debug 

๊ทธ๋ฆฌ๊ณ  ์›น ํ”„๋ ˆ์ž„์›์ธ Express.js๋„ NPM์—์„œ ๋‹ค์šด๋ฐ›์Šต๋‹ˆ๋‹ค.

$ npm install express

๋จผ์ € ์„œ๋ฒ„ ๊ตฌ๋™ํŒŒ์ผ์ธ bin.js๋ฅผ ์ˆ˜์ •ํ•˜์ง€์š”.

const debug = require('debug')('bin') // debug ๋ชจ๋“ˆ ๊ต์ฒด
// ...

๋‹ค์šด๋ฐ›์€ debug ๋ชจ๋“ˆ๋กœ ๊ต์ฒดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹œ์ž‘์ ์ธ app.js๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

const debug = require('debug')('app') // debug ๋ชจ๋“ˆ ๊ต์ฒด 
const express = require('express') // Application ๋ชจ๋“ˆ ๊ต์ฒด 
const app = express()

debug('App is initiated')

module.exports = app;

debug ๋ชจ๋“ˆ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Application ๋ชจ๋“ˆ๋„ ๋‹ค์šด๋ฐ›์€ express๋กœ ๋ฐ”๊พธ์—ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๊ณ  ์šฐ์„  ์„œ๋ฒ„๋ฅผ ๊ตฌ๋™ํ•ด ๋ณด์ฃ .

debug ๋ชจ๋“ˆ์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ DEBUG๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ํ•ด์•ผ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

$ DEBUG=* npm start 

๊ธฐ๋Œ€ํ•œ๊ฒƒ ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์€ ๋กœ๊ทธ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š”๋ฐ์š”? ์ด๊ฑด express ํ”„๋ ˆ์ž„์›๋„ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” debug๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•ž์— โ€œexpress:โ€๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋กœ๊ทธ๋Š” ์ต์Šคํ”„๋ ˆ์Šค์—์„œ ์ถœ๋ ฅํ•˜๋Š” ๋ฉ”์„ธ์ง€๋“ค์ด์ฃ . ๊ทธ ์•„๋ž˜ โ€œappโ€, โ€œbinโ€ ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š” ๋กœ๊ทธ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ „์—์„œ๋Š” โ€œapp_name:sub_nameโ€ ํ˜•์‹์œผ๋กœ ํƒœ๊น…ํ•ด์•ผ ๋กœ๊ทธ ํ•„ํ„ฐ๋งํ•˜๊ธฐ์— ์ˆ˜์›”ํ•˜๊ฒ ์ฃ ?

serve-static

๋‹ค์Œ์œผ๋กœ ์ •์ž‘ํŒŒ์ผ์„ ๋‹ค๋ฃฌ serve-staic ๋ชจ๋“ˆ์„ ๊ต์ฒดํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ์ต์Šคํ”„๋ ˆ์Šค ํ”„๋ ˆ์ž„์›์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. app.js์— ๋ฐ”๋กœ ์ฝ”๋”ฉํ•ด ๋ณผ๊นŒ์š”?

app.use(express.static('public'))

express.static() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐ”๋กœ ์ •์ ํŒŒ์ผ ์ œ๊ณต๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์–ด์š”.

์ธ์ž๋กœ โ€œpublicโ€ ๋ฌธ์ž์—ด์„ ์ „๋‹ฌํ–ˆ๋Š”๋ฐ ์ด๊ฑด ์ •์ ํŒŒ์ผ์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ตœ ์ƒ๋‹จ ํด๋”๋ฅผ ์ง€์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ์•ˆ์—์„œ ํ•˜๋“œ์ฝ”๋”ฉ์œผ๋กœ ๋ฐ•์•„ ๋†“์•˜๋˜ ์šฐ๋ฆฌ ์ฝ”๋“œ๋ณด๋‹ค ๋” ํ™•์žฅํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ์ฃ ?

morgan

HTTP ์š”์ฒญ ๊ธฐ๋ก์„ ๋กœ๊น…ํ•˜๋Š” looger ๋ชจ๋“ˆ๋„ ๋ฐ”๊ฟ”๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

NPM์—๋Š” ์ด๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” morgan์ด๋ผ๋Š” ๋ชจ๋“ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

$ npm install morgan

์ด๊ฒƒ๋„ ๋ฏธ๋“ค์›จ์–ด๋‹ˆ๊น app.js์—์„œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

const logger = require('morgan')

app.use(logger('dev'))

โ€œdevโ€ ์ธ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š”๋ฐ์š” ์ด๊ฒƒ์€ ๋กœ๊น… ํ˜•์‹์„ ์ง€์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. โ€œcombinedโ€, โ€œcommonโ€ ์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ํ˜•์‹ ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ๋กœ๊ทธ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ง• ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŽธ์˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. (๋ฌธ์„œ ์ฐธ๊ณ )

ํฌ์ŠคํŠธ ์กฐํšŒ

GET ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•œ ํฌ์ŠคํŠธ ์กฐํšŒ API๋ฅผ express ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐ”๊ฟ”๋ณด์ง€์š”.

๋ผ์šฐํŠธ ๋“ฑ๋ก์„ ์œ„ํ•ด app.js๋กœ ๊ฐ‘๋‹ˆ๋‹ค.

const apiPost = require('./routes/api/post')

app.get('/api/posts', apiPost.index())

์ต์Šคํ”„๋ ˆ์Šค ๊ฐ์ฒด์ธ app๋„ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ ๊ฒƒ ์ฒ˜๋Ÿผ get() ๋ฉ”์†Œ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ๋„ ๋˜‘๊ฐ™์•„์š”. ๋ฟ๋งŒ์•„๋‹ˆ๋ผ HTTP ๋ฉ”์˜๋“œ ์ด๋ฆ„์— ๋”ฐ๋ผ post(), put(), delete() ๋ฉ”์†Œ๋“œ๊นŒ์ง€ ์ œ๊ณตํ•œ๋‹ต๋‹ˆ๋‹ค.

body-parser

์ „ ์‹œ๊ฐ„์— ๋งŒ๋“ค์—ˆ๋˜ body-parser ๋ชจ๋“ˆ๋„ ๊ต์ฒดํ•ด ๋ณด์ฃ .

NPM์—์„œ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๋ชจ๋“ˆ์„ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ npm install body-parser

์—ญ์‹œ ๋ฏธ๋“ค์›จ์–ด ํ•จ์ˆ˜์ด๋ฏ€๋กœ app.js์—์„œ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

์ต์Šคํ”„๋ ˆ์Šค ๋ฌธ์„œ์— ๋”ฐ๋ผ urlencoded()์™€ json() ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํฌ์ŠคํŠธ ์ƒ์„ฑ

๋งˆ์ง€๋ง‰์œผ๋กœ ํฌ์ŠคํŠธ ์ƒ์„ฑ API๋ฅผ ์ต์Šคํ”„๋ ˆ์Šค ๊ธฐ๋Šฅ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ๋ผ์šฐํŠธ ๋“ฑ๋ก์„ ์œ„ํ•ด app.js์— ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

app.post('/api/posts', apiPost.create())

์ด์ƒ์œผ๋กœ express๋ฅผ ์ด์šฉํ•ด์„œ ๊ธฐ๋Šฅ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ๋Œ€์ฒดํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค๊ฐ€์š”? ์›น ํ”„๋ ˆ์ž„์›๊ณผ ๋ช‡ ๊ฐ€์ง€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ๊น ๋„ˆ๋ฌด ์‰ฝ๊ฒŒ ๋๋‚˜ ๋ฒ„๋ ธ์ฃ ?

์ •๋ฆฌ

  • ์ต์Šคํ”„๋ ˆ์ŠคJS๋ฅผ ์ด์šฉํ•ด ๊ธฐ์กด ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ ๋ฐ”๋กœ๊ฐ€๊ธฐ