Gorilla-Kim/Project

[MEMO APP] Back-end/์„œ๋ฒ„๊ตฌ์ถ• (2), ๋ผ์šฐํŒ… (1)

Kim_gorilla 2020. 3. 13. 18:19

 

๐Ÿ‘จ‍๐Ÿ’ป Git ignore ์„ค์ •/ Router ์„ค์ •

 

๐Ÿ“Œ Git ignore ์„ค์ •

node๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด Django๋‚˜ Railsํ˜น์€ Spring๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋‹จ์ ์ด์ž ์žฅ์ ์ธ ํŠน์ง•์ด ํ•œ๊ฐ€์ง€ ๋ฐœ๊ฒฌ๋˜์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•ด์ค˜์•ผํ•˜๋Š” module๋“ค์ด ๋งŽ์•„์ง„๋‹ค๋Š” ๊ฒƒ์ธ๋ฐ์š”.

 

์™œ ์žฅ์ ์ด๊ณ  ๋‹จ์ ์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

Django์™€ ๋น„๊ตํ•˜์—ฌ ์„ค๋ช…ํ•ด๋ณด๋„๋ก ํ•˜์ฃ !  

์žฅ๊ณ ๋Š” python์„์ด์šฉํ•ด ์›น์•ฑ์„ ๋งŒ๋“œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. Django๋Š” ์„ค์น˜ํ•˜๋Š” ๊ทธ ์ž์ฒด๋กœ ์›น ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ์œ„ํ•œ ๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋“ค์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

( ๋ญ์•ผ.. ๊ฐœ์‚ฌ๊ธฐ์ž๋‚˜... )

 

ํ•˜์ง€๋งŒ ์žฅ์ ๋„ ์žˆ์ง€๋งŒ ๋‹จ์ ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๊ธฐ์ดˆ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ๋“ค์ด ์›Œ๋‚™ ๋งŽ๊ธฐ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ฐพ์•„ ์ตํ˜€์•ผ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋˜, ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์—๋„ ์šฐ๋ฆฌ์˜ ์ €์žฅ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•œ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

(๋ณ„๊ฐœ๋กœ ์žฅ๊ณ ๋Š” ํŠน์„ฑ์ž์ฒด๋กœ๋Š” ๋น„๋™๊ธฐ๋ฅผ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ใ…Žใ…Ž.. ์ด๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค๋Š” ์ด์•ผ๊ธฐ๋„ ์žˆ๋”๊ตฐ์š”)

 

๊ทธ์—๋น„ํ•ด node๋ฅผ ์ด์šฉํ•˜๋Š” express ๋งˆ์ดํฌ๋กœ ์ฆ‰ ์›น์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋”ํ•ด์„œ koa๋Š” ๋”์šฑ๋” ์ ์€ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•ด์ฃผ๊ตฌ์š”! ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์„ ์šฐ๋ฆฌ๊ฐ€ ๋”ฑ๋”ฑ ์„ค์น˜ํ•˜๋ฉด๋˜๊ธฐ ๋•Œ๋ฌธ์— Custom์ด ์ž์œ ๋กœ์šด ํŽธ์ž…๋‹ˆ๋‹ค.

(๋Œ€์‹ ์— ๊ฐœ๋ฐœ๊ธฐ๊ฐ„์ด ๊ธธ๋‹ค๋Š” ๋‹จ์ ์ด... ์ฃผ๋ฅต)

 

๊ทธ๋Ÿผ ์ด ์ด์•ผ๊ธฐ๋ฅผ ์™œ ํ•˜์˜€๋Š”๊ฐ€... ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ ์„ค์น˜ํ•˜๋Š” ํ•˜๋‚˜ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์€ ์†”์งํžˆ ๊ทธ๋ ‡๊ฒŒ ํฐ ์šฉ๋Ÿ‰์„ ์ฐจ์ง€ํ•˜๋Š”๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ฆด๋•Œ๋Š” ํฌ๊ฒŒ ๋Š๊ปด์ง€๊ณค ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณดํ†ต node๋กœ ๊ฐœ๋ฐœํ• ๋•Œ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ๋“ค์„ ๊ฐ™์ด ๊นƒํ—™์— ์˜ฌ๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ด์œ ์ฆ‰์Šจ, package.json์— ์šฐ๋ฆฌ๊ฐ€ ์„ค์น˜ํ•œ ๋ชจ๋“ˆ๋“ค์ด ๊ธฐ๋ก์ด ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํŒŒ์ผ๋งŒ ์žˆ๋‹ค๋ฉด npm install ํ˜น์€ yarn add ๋กœ ๊ด€๋ จ ๋ชจ๋“ˆ๋“ค์„ ํ•œ๋ฒˆ์— ์„ค์น˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ github์— addํ• ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์„ค์น˜ํ•œ ๋ชจ๋“ˆ๋“ค๊นŒ์ง€ ์ธ์‹ํ•˜์ง€ ์•Š๋„๋ก ๋ช‡๊ฐ€์ง€ ์„ค์ •์„ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ์š”, ๊ทธ๊ฒƒ์„ ํ•ด์ฃผ๋Š”๊ฒƒ์ด ๋ฐ”๋กœ gitignore์ž…๋‹ˆ๋‹ค.

 

๋ฐฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

ํ”„๋กœ์ ํŠธ ์ตœ์ƒ๋‹จ ๊ฒฝ๋กœ์— .gitignore ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”. .env ํŒŒ์ผ๋•Œ์ฒ˜๋Ÿผ ํŒŒ์ผ๋ช… ์•ž์— . ์„ ๋ถ™์ด๋Š”๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹œ๊ธธ๋ฐ”๋ž๋‹ˆ๋‹ค ใ…Žใ…Ž

 

์ƒ์„ฑ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ํ•ด๋‹น ํŒŒ์ผ์„ ์—ด์–ด ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ์ฑ„์›Œ์ฃผ๋„๋ก ํ• ๊ฒŒ์š”. ์•„๋ž˜์˜ ๋‚ด์šฉ์€ google์— gitignore ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋‚˜์˜ค๋Š”๊ฒƒ์„ ๋ฐœ์ทŒํ•œ๊ฒƒ์ด๋ž๋‹ˆ๋‹ค. ๋ณดํ†ต default๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•ด์š”!

 

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*

 

์ž ์ด๋ ‡๊ฒŒ ์•ž์œผ๋กœ ๊นƒ์— ์˜ฌ๋ฆด๋•Œ๋Š” ๋ชจ๋“ˆ์„ ์˜ฌ๋ฆฌ์ง€ ์•Š์œผ๋‹ˆ ๋นจ๋ฆฌ๋นจ๋ฆฌ ์—…๋กœ๋“œ๊ฐ€ ๋˜๊ฒ ๋„ค์š” ๐Ÿ˜‰

 

๐Ÿ“Œ Router ์„ค์ •ํ•˜๊ธฐ

 

์ผ๋‹จ ์•ž์„  ํ™˜๊ฒฝ์„ค์ •์—์„œ koa๋ฅผ ์„ค์น˜ํ• ๋•Œ koa-router๋„ ๊ฐ™์ด ์„ค์น˜๋ฅผ ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฒˆ์—๋Š” koa-router๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ฒฝ๋กœ๋ฅผ ํด๋”๋‹จ์œ„๋กœ ์ •๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ๊ฐ™์ด ํƒ๊ตฌํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ผ๋‹จ ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋ณด๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

https://openbase.io/js/koa-router

 

koa-router
express routing

์œ„์— ์ฒซ๋ฒˆ์งธ ์บก์ณ๋Š” koa-router document์—์„œ ๋ฐœ์ทŒํ•œ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ์•„๋ž˜๋Š” express routingํ•˜๋Š” ์†Œ์Šค๋ฅผ ๋ฐœ์ทŒํ•œ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ express์™€ koa ๋‘˜์„ ๋‘๊ณ  ๋ณด์•˜์„๋•Œ ํฌ๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‹ค๋ฅด์ง€๋Š” ์•Š์€๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ์ ์ด๋ผ๋ฉด express๋Š” ์ž์ฒด์— routing๊ด€๋ จ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‚ด์žฅ๋˜์–ด์žˆ๋Š” ํ•œํŽธ, koa๋Š” ์›ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์„ค์น˜ํ•ด ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ? 

(์—ฌ๊ธฐ๋งŒ ๋ดค์„๋•, ์†Œ์Šค์ฝ”๋“œ ์ž‘์„ฑํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ž…์žฅ์—์„œ๋Š” koa๊ฐ€ ์ข€๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ž…๋ง›๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ •๋„?)

 

์ผ๋‹จ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ๊ธฐ์กด์— ์‚ฌ์šฉํ–ˆ๋˜ test ์‘๋‹ต์šฉ ์†Œ์Šค๋Š” ๊ณผ๊ฐํžˆ ์ง€์›Œ์ฃผ์‹œ๊ณ , routing ์ž‘์—…์„ํ•˜์—ฌ '/'๊ฒฝ๋กœ๋กœ ์ ‘์†ํ–ˆ์„ ๋•Œ, hello world๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ณด์ด๋„๋ก ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ฑ„์›Œ ๋„ฃ์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

// about routing
// ctx๋Š” express๋กœ ์น˜๋ฉด res,rep๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” ๊ฐ์ฒด๋ผ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.
// next๋Š” ๋‹ค์Œ ๋ฏธ๋“ค์›จ์–ด๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

const router = new Router();

router.get('/', (ctx, next) => {
  ctx.body = 'ํ™ˆ';
});

app.use(router.routes());
app.use(router.allowedMethods());

์—ฌ๊ธฐ์„œ next parameter๋Š” ์•„์ง ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ๋•Œ๋ฌธ์— ์ƒ๋žตํ•˜์…”๋‘ ๋ฉ๋‹ˆ๋‹ค.  (ctx, next) --> (ctx)  

์—ฌ๊ธฐ๊นŒ์ง€ํ•˜๊ณ  ํ•œ๋ฒˆ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋„๋ก ํ• ๊นŒ์š”?

์œ„์™€๊ฐ™์ด ๋‚˜์˜ค์…จ๋‹ค๋ฉด, routing ๊ธฐ์ดˆ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ถ•ํ•˜๋“œ๋ ค์š” ^^

 

์ด๋ฒˆํฌ์ŠคํŒ…์€ ์—ฌ๊ธฐ๊นŒ์ง€ ์ž‘์„ฑํ•˜๊ธฐ๋กœ ํ•˜๊ณ , ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” REST API๋ฅผ ์œ„ํ•œ Routing ์ž‘์—…์„ ์ง„ํ–‰ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์›๋ž˜๋Š” DB๋ฅผ ๋จผ์ € ์—ฐ๊ฒฐํ•˜๊ธฐ๋กœ ํ•˜์˜€๋Š”๋ฐ ํฌ์ŠคํŒ… ํ•˜๋Š” ์‚ฌ๋žŒ์˜ ์ˆœ์„œ ์ฐฉ๊ฐ๊ด€๊ณ„๋กœ ๊ผฌ์—ฌ๋ฒ„๋ฆฐ DB์—ฐ๊ฒฐ๊นŒ์ง€ ๋งˆ๋ฌด๋ฆฌ ์ง€์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‰

 

TodoList

* REST API ๊ตฌ์„ฑ

* Mongo DB ์—ฐ๊ฒฐํ•˜๊ธฐ