라우터 모듈화 koa-router
백엔드 프로젝트를 진행하다 보면 여러 종류의 라우터를 사용하게 됩니다.
이런 라우터들을 하나의 최상위 index 파일에 모두 작성해 두면 가독성도 떨어지고 유지보수성도 떨어지게 됩니다.
그래서 각 기능별로 라우터들을 별도의 파일에 작성하여 분리하고,
라우터 파일들은 하나의 디렉터리에 모아 관리합니다. 이러한 작업을 라우터 모듈화라고 합니다.
1. router 파일들을 모아두는 디렉터리 만들기
/src/routers
2. /src/routers/index.js 파일 만들어 내보내기
const Router = require('koa-router');
const routerModule = new Router();
routerModule.get('/[sub_pathname]', ctx => { ... });
module.exports = routerModule;
3. 최상위 index 파일에서 라우터 모듈 불러오기
/src/index.js
const Koa = require('koa');
const Router = require('koa-router');
const routerModule = require('./routers');
const server = new Koa();
const router = new Router();
router.use('/base_pathname', server.routes());
...
이렇게 설정하면 /base_pathname/sub_pathname에 /src/routers/index.js 내 { ... } 에 들어간 코드에서 구현한 것이 브라우저에 보이게 됩니다.
4. 기능별 디렉터리 세팅하기
/src/routers/feature/ 디렉터리를 만들고 index.js 파일을 만들어 해당 기능에서 구현해야 하는 라우터를 작성하고 그것은 export 해줍니다.
const Router = require('koa-router');
const featureRouter = new Router();
featureRouter.[get/post/ ...]('/pathname', ctx => { .. });
...
module.exports = featureRouter;
5. /src/routers/index.js 파일에서 기능별 라우터 불러오기
const Router = require('koa-router');
const featureRouter = require('./feature);
const routerModule = new Router();
routerModule.use('/featurepathname', featureRouter.router());
module.exports = routerModule;
이렇게 설정하면 해당 feature는 항상 /featurepathname/... 에서 동작하게 됩니다.
이렇게 하면 기능 상에는 큰 영향이 없지만 개발자든 사용자든 이 라우터가 어떤 기능이고, 어떻게 분리되는지 파악하기 쉽겠죠?
또는 각 기능의 라우터 처리 함수들이 길어지게 되면 가독성이 떨어질 수 있는데 이 경우에는 처리 함수들을 다른 파일로 분리하여 모아두는 컨트롤러 파일을 따로 작성하기도 합니다.
즉, 컨트롤러 파일에는 라우트 처리 함수만 모아놓는 것이죠. 이 부분에 대한 예시는 다음 글에 작성하도록 하겠습니다. 곧 퇴근이니까요~~!!!
References
- 리액트를 다루는 기술(김민준)
'웹 개발 > Node.js' 카테고리의 다른 글
내가 보려고 작성하는 [라우터 모듈화 summary] +dotenv, koa,koa-router (0) | 2021.03.03 |
---|---|
Node.js로 백엔드 프로젝트 시작하기 (+ Koa) (0) | 2021.02.25 |
nodemon 사용하기 (0) | 2021.02.24 |