본문 바로가기

ExpressJS

Chapter2 - 프로젝트 구조

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와 매칭하여 동작하게끔 디자인합니다.

출처 : https://bcho.tistory.com/954

 

2) 에러처리 & Status 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