[MEMO APP] Back-end/ λΌμ°ν (2)
π¨π» λΌμ°ν (2)
π λΌμ°ν (2)
μ λ² ν¬μ€ν κΉμ§ λ΄μ©μ κ°λ¨ν μμ½ν΄λ³΄κ² μ΅λλ€.
- κΉνλΈμ μ λ‘λλ₯Ό μννκ²(+보μλ΄μ©μ κ°λ¦¬κΈ°) μν΄μ gitignoreμ μ€μ ν΄ μ£Όμμ΅λλ€.
- Koa-routerλ₯Ό μ΄μ©ν΄μ '/' κ²½λ‘λ‘ μ κ·Όμ νΉμ λ©μμ§κ° 보μ΄κ² νμμ΅λλ€.
μ΄λ²μλ μ λ²μ νλ routingμμ μ λ§μ μλ£νλλ‘ ν κ»λ°μ. κ·Έ μ μ μ°λ¦¬κ° μμμΌν νλ€μ΄ μμ΅λλ€.
μ λΏλ§μ μλκ² μ§λ§ κ°λ°μ νλ€λ³΄λ©΄, ν΄λ νΉμ νμΌμ λ¦¬κ° μ λ§μ΄μ§ μ€μνκ² λκ»΄μ§λλ€.
λΉμ·ν μν μνλ νμΌλ€μ νλμ ν΄λμ λ¬Άλλ€κ±°λ μ¬λ¬κ°μ§ μν μ νλ μμ€μ½λ λ©μ΄λ¦¬λ€μ κ°κ°μ μν μ μννλ μ¬λ¬κ°μ μμ€μ½λλ‘ λΆλ¦¬μμΌ λ³λμ νμΌλ‘ λ§λλ μμ μ μννκ° λμ΄μμ΄μΌ λμ€μ νλ‘μ νΈ κ·λͺ¨κ° μ»€μ Έκ°λ κ·Έλλ§.. κ·Έ!λ!λ§! μ μ§λ³΄μλ₯Ό μ‘°κΈ νΈνκ² λ§λ€μ΄μ€λλ€.
(μ μ΄κ±΄ μ¬λλ°μ΄ μ¬λ κ·Έλ¦¬κ³ μ€λ ₯λ°μ΄ μ€λ ₯μΈκ² κ°μμ. μ μ½λλ μ μ§λ³΄μκ° μ΄λ ΅κ²λ§ λκ»΄μ§λ건... )
routingμμ μ ν λμλ μ΄ κ²½λ‘λ₯Ό μ ꡬλΆμ§μ΄ μμ νλκ² λν! κ°μ λ§₯λ½μΌλ‘ μ€μν©λλ€.
μμΌλ‘ μ°λ¦¬λ REST API μλ²λ₯Ό λ§λ€κΊΌκΈ° λλ¬Έμ λ€μμ μ μνλ©° λ§λ€μ΄μΌ ν©λλ€.
-
API λ²μ λ³ κ΄λ¦¬
-
λΉμ·ν μν μ μννλ κΈ°λ₯λΌλ¦¬ κ΄λ¦¬
-
κ° κ²½λ‘λ³ μννλ ν¨μλ€(Controller) κ΄λ¦¬
μ 첫λ²μ§Έ 쑰건λΆν° ν΄λ¦¬μ΄ νκΈ°μ μ λΌμ°ν κ²½λ‘λ₯Ό μν ν΄λλ₯Ό λ§λ€μ΄ κ·Έκ³³μμλ§ λΌμ°ν μμ μ μ²λ¦¬νλλ‘ apiλΌλ μλ‘μ΄ ν΄λλ₯Ό μμ±ν΄ λ³΄κ² μ΅λλ€.
( κ²½λ‘λ src ν΄λ μμ λ§λ€μ΄μ£ΌμΈμ )
μ΄μ 첫λ²μ§Έ 쑰건μ ν΄λ¦¬μ΄ ν΄λ³΄κ² μ΅λλ€.
λ²μ λ³ κ΄λ¦¬λ₯Ό νκΈ°μν΄ κ° λ²μ λ§λ€ ν΄λλ₯Ό νλ λ§λ€μ΄μ£Όκ² μ΅λλ€. ν΄λ μ΄λ¦μ v1.0μΌλ‘ ν κ²μ.
(μ²μ λ§λλ λ²μ μ΄κΈ°μ v1.0μΌλ‘ ν©λλ€. κ²½λ‘λ api ν΄λ μμ λ§λ€μ΄μ£ΌμΈμ.)
κ·Έλ¦¬κ³ κ° λ²μ λ³ ν΄λλ€μ κ΄λ¦¬ν΄μ€ μ μλλ‘ μμ€μ½λλ₯Ό μμ±ν΄μΌ ν¨μΌλ‘ api ν΄λμμ index.js νμΌλ κ°μ΄ μμ±ν΄ μ£Όλλ‘ νκ² μ΅λλ€.
( μ΄κ³³μμ κ° λ²μ Όλ³ λΌμ°ν μ°κ²°μ ν΄μ€κ±°μμ )
μ μλ°λΌμμ΅λλ€. κ·Όλ° μ¬κΈ°μ μ°λ¦¬κ° λΉ λ¨λ¦°κ² νλ μμ΄μ. κ·Έκ² λ¬΄μμ΄λλ©΄ μ΄ api ν΄λλ₯Ό μ ννλ apiν΄λ μμ μλ νμΌλ€μ routing ν΄μ€ api/index.js λ₯Ό μ°λ¦¬κ° λ§λ μλ²νμΌ src/index.js μ μ°κ²°μ ν΄μ£Όμ΄μΌ ν©λλ€.
λ€μ μμ μΌλ‘ λμ΄κ°κΈ°μ μ μ΄ μμ μ λ¨Όμ ν΄μ£Όκ³ κ°λλ‘ νκ² μ΅λλ€.
src/index.js νμΌμ μ΄μ΄μ£ΌμΈμ.
μ°λ¦¬κ° μ΄μ μλ routerκ°μ²΄ λ΄μ₯ λ©μλλ₯Ό μ¬μ©ν λ getλ§ μ¬μ©ν΄ 보μλλ°μ. μ΄ routerκ°μ²΄μλ appκ°μ²΄μ λ―Έλ€μ¨μ΄λ₯Ό μ°κ²°νλκ²μ²λΌ λλ€λ₯Έ routerκ°μ²΄λ₯Ό μ°κ²°νλκ²μ΄ κ°λ₯ν©λλ€.
( appκ°μ²΄μμμ κ°μ΄ use λ©μλλ₯Ό μ¬μ©ν©λλ€. ex/ routes.use('/api ', api.routes()) )
λ°λ‘ use λ©μλλ₯Ό μ¬μ©νκΈ°μ μ μ°λ¦¬κ° λ§λ api/index.jsνμΌμ λ¨Όμ src/index.js μλ¨μ λΆλ¬μμ£Όλλ‘ νκ² μ΅λλ€.
μ΄μ api μμ index.jsλ₯Ό λΆλ¬μμΌλ μ°κ²°μ ν΄λ΄μΌκ² μ£ ?
μ¬μ©λ²μ κ°λ¨ν©λλ€. μλμ μμ€μ½λμ²λΌ μμ±μ ν΄μ£Όλ©΄ λ©λλ€.
// about routing
const router = new Router();
router.use('/api', api.routes());
router.get('/', (ctx) => {
ctx.body = 'ν';
});
μ¬κΈ°μ api λ€μ routesμ λνμ¬ μμ보λλ‘ νκ² μ΅λλ€.
( μ¬μ§μ 보면μ μμλ³Όκ²μ. )
μ°λ¦¬λ μ΄μ ν¬μ€ν μμ koa-router κ°μ²΄λ₯Ό appμ μ μ©ν λ νλ² routesλ₯Ό μ¬μ©νμλλ°μ.
routesλ μ°λ¦¬κ° λ§λ koa-router κ°μ²΄ (μμ κ·Έλ¦Όμμ routerκ° λκ² λ€μ) μ μ°κ²°ν λͺ¨λ κ²½λ‘λ€μ μλ―Έν©λλ€. μ¦ μ°λ¦¬λ getμ μ΄μ©ν '/'μ κ²½λ‘λ§ μμκ² μ£ ?
λ€μ λμμμ router.use()μ κ΄νΈμμ λλΌλ₯Έ routerκ°μ²΄μ routesλ₯Ό μ§μ΄ λ£λκ²μ νΉμ κ²½λ‘(μ¬κΈ°μ '/api')λ‘ λ€μ΄μμλ λͺ¨λ μλ‘κ² μ§μ΄λ£μ rotuerκ°μ²΄λ‘ μ°κ²°ν¨μ μλ―Έν©λλ€.
λ μ΄λ°λͺ¨μ΅μΌκΉμ?
μμ μ¬μ§μμ μλ‘λ€μ΄ '/auth' κ²½λ‘λ μμ '/api 'κ²½λ‘μ ν©μ³μ Έμ '/api/auth' κ° λμ΄μ§κ² λ€μ.
μ΄λ κ² μΈλΆμμ λΌμ°ν μμ μ νκ³ λ©μΈμΌλ‘ μ¬μ©νλ λΌμ°ν κ°μ²΄μ ν©μΉλ κ²μ΄ κ°λ₯ν΄μ§λλ€.
μΌλ¨ μ°λ¦¬κ° μ²μμΌλ‘ λ§λ€ λΌμ°ν μ REST APIλ₯Ό μν κ²μμΌλ‘ apiλΌλ κ²½λ‘λ‘ λ§λ€μμ΅λλ€.
λ°λΌμ κ°μ΄ μ½λ©μμ μ κ³μ μ΄μ΄λκ° λ³Όκ²μ.
μ΄λ κ² μ°κ²°μ νμ§λ§... μ¬μ€ μ°λ¦¬λ api/index.jsμ μ무 μμ€μ½λλ λ£μ§ μμμ΅λλ€ γ γ
μμ κ°μ΄ μμ±νκΈ° μν΄μ api λ₯Ό router κ°μ²΄λ‘ λ§λ€μ΄μ£Όμ΄μΌ κ² μ£ ?
κ·ΈλΌ λ€μ api/index.js νμΌλ‘ κ°μ μμ μ μ§νν΄ λ³΄κ² μ΅λλ€.
src/index.jsμ apiλ₯Ό router κ°μ²΄λ‘ λ§λ€μ΄μ€λ€λ κ²μ api/index.jsμμ routerκ°μ²΄λ₯Ό λ°μΌλ‘ λ΄λ³΄μ€λ€λκ²μ μλ―Έν©λλ€. κ³ λ‘ μ΄κ³³μμλ router κ°μ²΄λ₯Ό μλ‘κ² λ§λ€μ΄μ£Όλλ‘ ν κ²μ.
const Router = require('koa-router');
const ver1 = require('./v1.0');
const api = new Router();
/* /api/... */
api.use('/v1.0', ver1.routes());
module.exports = api;
( μ¬κΈ°μ λ°μΌλ‘ λ΄λ³΄λ΄μ£Όλ μμ€μ½λλ module.exports μ λλ€. )
μλ§ μμ λ΄μ©μ μ΄ν΄νμ ¨λ€λ©΄ λμΉμ±μ ¨μ κ²λλ€. μ¬κΈ°μλ λ²μ λ³ κ΄λ¦¬λ₯Ό νκΈ°λλ¬Έμ μ°λ¦¬κ° 미리 μμ±ν ver1κ³Ό api λΌλ μ΄λ¦μ router κ°μ²΄μ λ μ°κ²°μ ν΄μ£Όμμ΅λλ€. μ΄λ°μμΌλ‘ κ³μΈ΅νμμΌλ‘ μ°κ²°μ ν΄μ£Όμ΄ κ΄λ¦¬λ₯Ό ν΄μ£Όλ©΄ λμ€μ νΉμ λΌμ°ν°μμ μ€λ₯κ° λλ μ½κ² μ°Ύμκ° μ€λ₯λ₯Ό μμ ν μ μμ΅λλ€.
κ·Όλ° velopertλ κ°μ’λ₯Ό 보λκΉ λ²μ κ΄λ¦¬ μ μ§λ³΄μλ₯Ό μν΄μ ver1λ³μμ²λΌ μ°μ§ μκ³ λ°°μ΄μ λ§λ€μ΄μ κ΄λ¦¬λ₯Ό νλκ΅°μ. μ°λ¦¬λ κ³ μλμ κ°λ₯΄μΉ¨μ μμ€μ½λμ μ μ©μμΌ λ³΄κ² μ΅λλ€.
const Router = require('koa-router');
// Version κ΄λ¦¬ 1.0
const versions = {
'v1.0': require('./v1.0')
};
const api = new Router();
/* /api/... */
api.use('/v1.0', versions['v1.0'].routes());
module.exports = api;
4λ²μ§Έ μ€μμ μ€λ₯κ° λλ€κ³ κ±±μ νμ§λ§μΈμ. : ) μ€λ₯κ° λλ μ΄μ λ μ°λ¦¬κ° μμ€μ½λλ₯Ό μμ±νμ§ μμκΈ° λλ¬Έμ λλ€ ^^
ν... μ΄μ μΌ μ²«λ²μ§Έ 쑰건μ ν΄λ¦¬μ΄ νμ΅λλ€. μ΄μ λλ²μ§Έ 쑰건μ ν΄λ¦¬μ΄ν΄μ€κ»λλ€.
λλ²μ§Έ 쑰건μ λΉμ·ν κΈ°λ₯λΌλ¦¬ λ¬Άμ΄μ£Όλκ² μ΄μμ΅λλ€.
μ΄λ₯Ό μν΄μ κ° κΈ°λ₯λ³ κ²½λ‘λ₯Ό κ΄λ¦¬ν΄μ£Όλ v1.0/index.js νμΌμ μμ±ν΄ λ΄λΆ μμ€μ½λλ₯Ό μμ±ν΄ 보λλ‘ νκ² μ΅λλ€.
μ€λͺ μ μμ κ°μμΌλ‘ μ€λͺ μμ΄ μμ€μ½λ μμ±μ μ΄μ΄κ°κ²μ.
νμ¬κΉμ§μ ν΄λꡬμ±μ 곡μ ν©λλ€.
v1.0/index.js μμ μμ€λ 곡μ λ릴κ²μ.
const Router = require('koa-router');
const api = new Router();
/* /api/v1.0/... */
module.exports = api;
μ΄μ 2λ²μ§Έ 쑰건λ ν΄λ¦¬μ΄ νμ΅λλ€. μμΌλ‘ μλ‘μ΄ apiμμ²μ λν κΈ°λ₯μ λ§λ€λ κΈ°λ₯λ³λ‘ v1.0ν΄λμμ μλ‘μ΄ ν΄λλ₯Ό λ§λ€μ΄ κ·Έ μμμ router κ²½λ‘λ₯Ό κ΄λ¦¬νκ³ μμ μ¬μ§6λ²μ§Έ μ€μμ use λ©μλλ₯Ό ν΅ν΄ μ°κ²°λ§ ν΄μ£Όλ©΄ λ©λλ€.
λ§μΉ μλμ κ°μ μ¬μ§μ²λΌ λ§μ΄μ£ .
( 곡λΆμ€μΈ κ°μΈ νλ‘μ νΈ μ¬μ§μ
λλ€. )
μ€λ ν¬μ€ν μ μ¬κΈ°κΉμ§ μμ±ν ν λ°μ, μ¬μ€ λΌμ°ν μμ μ μΌλ¦ λλ§μΉκ³ DB μ°κ²°κΉμ§ ν¬μ€ν ν μμ μ΄μμ§λ§... μκ°λ³΄λ€ μ΄λΆλΆμ λν λ΄μ©μ΄ λ§μ ν¬μ€ν κΈμ΄ κΈΈμ΄μ§κ² λμμ΅λλ€.
κ·Έλμ λ€μ ν¬μ€ν μμ λΌμ°ν μμ μμ½ νκ³ DB μ°κ²°μ ν΄μ£Όλλ‘ νκ² μ΅λλ€.
TodoList
- λΌμ°ν μμ½νκΈ°
- DB μ°κ²°νκΈ° ( MongoDB )
'Gorilla-Kim > Project' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[MEMO APP] Back-end/ DBμ°κ²° (2) (0) | 2020.03.17 |
---|---|
[MEMO APP] Back-end/ DBμ°κ²° (1) (0) | 2020.03.16 |
[MEMO APP] Back-end/μλ²κ΅¬μΆ (2), λΌμ°ν (1) (0) | 2020.03.13 |
[MEMO APP] Back-end/μλ²κ΅¬μΆ (1) (0) | 2020.03.13 |
[MEMO APP] Back-end/νκ²½μ€μ (2) (0) | 2020.03.12 |