본문 바로가기

웹 개발/Node.js

라우터 모듈화 koa-router

라우터 모듈화 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

  • 리액트를 다루는 기술(김민준)