1. 프로젝트 구조에 대한 고찰
- 해당 고찰은 NodeJS Best Practices를 기반으로 작성되었습니다.
- 우리는 일반적으로 nodejs서버의 프로젝트 구조를 아래와 같이 MVC 모델에 맞추어 개발해 왔습니다
- 하지만 NodeJS Best Practice에서는 높은 의존성으로 인해 확장과 분리가 어려워 해당 구조를 권장하지 않고 있습니다.
- 이를 해결 하기위해 아래와 같은 '모듈화'구조를 권장하고 있습니다.
- 물론 저도 이러한 구조가 정말로 정답에 가까운 구조인지, 장점이 뚜렷하게 느껴지는 구조인지 확답할 수는 없습니다.
- 또한 해당 프로젝트의 규모가 커지는 것에는 한계가 있기 때문에 그 장점을 입증하기에는 다소 어려울 수 있습니다.
- 하지만 우선은 위와 같은 구조로 프로젝트를 구성해보려고 합니다.
2. 구현
- 우선 아래와 같이 디렉토리를 구성하였습니다.
main-server/
|-- app.js
|-- Users/
| |-- userController.js
|-- Boards/
| |-- boardController.js
|-- package.json
- userController.js는 아래와 같이 작성하였습니다.
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
res.send('hello, userRoute!');
});
module.exports = router;
- 그리고 app.js를 아래와 같이 수정했습니다.
const express = require('express')
const app = express()
const port = process.env.PORT || 3000;
app.use('/users', require('./Users/userController'));
app.use('/boards', require('./Boards/boardController'));
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
- 서버를 실행해보면, 또또 반가운 페이지가 저희를 반겨줍니다
3. RESTful API 디자인 패턴
- "RESTful API는 HTTP 프로토콜을 기반으로 자원을 표현하고 상태를 관리하는 웹 서비스 디자인 패턴입니다."라는 내용은 정말 많이 들어왔습니다.
- 하지만 저는 개념에서 벗어나 실제로 어떻게 사용하는 것이 올바른 방법인지 궁금하여 찾아보았고 해당 내용을 아래와 같이 정리해 보았습니다.
1) Method의 활용
- RESTfulAPI에서 사용하고 있는 4개의 매서드 GET, POST, PUT(PATCH), DELETE를 각각 Read, Create, Update, Delete와 매칭하여 동작하게끔 디자인합니다.
2) 에러처리 & Status code
- 에러처리의 기본은 HTTP Response Code를 사용한 후, Response body에 error detail을 서술하는 것이 좋습니다.
- https://developer.mozilla.org/en-US/docs/Web/HTTP/Status에서 HTTP Response Code를 어떻게 사용하는지 확인 할 수 있습니다.
3) API 버전 관리
- 이미 배포된 API에서 계속해서 서비스를 제공하면서,새로운 기능이 들어간 새로운 API를 배포할때는 하위 호환성을 보장하면서 서비스를 제공해야 하기 때문에, 같은 API라도 버전에 따라서 다른 기능을 제공하도록 하는 것이 필요합니다.
- API의 버전을 정의하는 방법에는 여러가지가 있지만, 일반적으로는 {servicename}/{version}/{REST URL}와 같은 형태를 사용합니다.
- 위의 패턴을 이용해 아래와 같이 프로젝트에 적용해보았습니다.
'ExpressJS' 카테고리의 다른 글
Chapter5 - Session & JWT (0) | 2024.01.28 |
---|---|
Chapter4 - Redis (0) | 2023.11.20 |
Chapter3 - DB연결 (0) | 2023.09.19 |
Chapter1. 프로젝트 생성 (0) | 2023.09.01 |