일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- typescript
- component
- scrapping
- docker
- javascript animation
- go
- 웹팩
- styled-component
- route
- Redux
- CDN
- graphql
- Recoil
- 정규표현식
- cicd
- react
- express
- sequelize
- 성능최적화
- socket.io
- 반응형웹
- 포트포워딩
- 회고
- npx
- 웹크롤링
- Modal
- AWS
- Today
- Total
프로그래밍 공부하기
깊은 라우팅 본문
스크랩모듈을 만든 후 이를 서버형태로 제공하여 공식적으로 제공하는 REST API처럼 만들고 싶었다. 그러다 보니 평소보다 더 깊은 단계의 라우팅이 필요해졌다.
https://songnumberbook.ga:5000/v1/search/title
스크랩 서버에 title 검색을 요청하고 싶다면 위의 주소로 get 요청을 보내야 하도록 만들고 싶었다. 이를 위해선 v1, search에 2가지 라우터가 필요하다. 이는 다음과 같이 만들 수 있다.
//scrap-server/index.js
const express = require('express');
const v1Router = require('./routes/v1/index');
const app = express();
app.use('/v1', v1Router);
//...생략
먼저 /v1경로는 v1라우터를 만들어 연결시킨다.
//scrap-server/routes/v1/index.js
const express = require('express');
const searchRouter = require('./search');
const router = express.Router();
router.use('/search', searchRouter);
module.exports = router;
v1라우터에서 다시 라우터를 만들고 이를 또다른 라우터와 위와 같이 연결시킨다.
//scrap-server/routes/v1/search.js
const express = require('express');
const searchController = require('../../contollers/search');
const router = express.Router();
router.get('/title', searchController.getSongsByTitle);
router.get('/singer', searchController.getSongsBySinger);
module.exports = router;
search에서 드디어 endpoint에 도달하였으므로 path에 따라 적절한 컨트롤러와 메소드에 연결시키면 끝이다!
사실 스크랩 서버는 결과 조회만 하는 서버이므로 v1라우터에서 search라우터를 거치지 않고 바로 '/v1/search' 경로로 라우팅시켜도 되었을 것이다. 그러나 이달의 신곡이나 노래방인기차트 등도 제공할 수 있도록 프로젝트가 확장된다면 그들은 /v1/search 경로에서 처리하는 것이 아니라 다른 경로로 보내는 것이 직관적일 것이다.
비슷한 이유로 /v1 경로도 사실 당장은 필요없어 보이지만 스크랩서버에 큰 변동이 있어 버전 2를 새롭게 만들어야하는 상황이 온다면 원본을 바꾸기 보단 v2로 분기하는 것이 더 좋아 보인다. 왜냐하면 기존 버전의 API를 이미 쓰고 있는 다른 클라이언트가 있을 수 있고, 기존 버전을 더 선호하는 클라이언트도 있을 수 있기 때문이다. 따라서 경로를 통해 API의 버전관리를 굳이 만들어 놓은 것이다.
'Web > [JS] BackEnd' 카테고리의 다른 글
Middle ware (0) | 2021.08.29 |
---|---|
multer (0) | 2021.05.12 |
포트포워딩과 DDNS(KT) (0) | 2021.05.03 |
Docker (0) | 2021.05.03 |
Sequelize Join (0) | 2021.03.27 |