본문 바로가기
Programming & Platform/Node.js

Node.js 이상적인 프로젝트 폴더 구조

by 코드스니펫 2023. 12. 1.
반응형

Node.js 이상적인 프로젝트 폴더 구조

 

node.js logo

 

Node.js 프로젝트의 이상적인 폴더 구조에 대해 이야기하려 합니다. 프로젝트의 규모와 복잡성을 고려하여 가독성과 유지보수성을 최대한 강화하는 방향으로 폴더를 구성해보겠습니다.

 

 

가독성 높이는 프로젝트 폴더 구조

 

1. controllers: 로직의 중심

프로젝트의 핵심 로직을 담당하는 컨트롤러 폴더입니다. 각 파일은 특정 URL 라우트에 대한 요청을 처리하는데, 이를 통해 코드를 모듈화하고 유지보수를 용이하게 합니다.

// controllers/userController.js
class UserController {
  // 사용자 관련 로직
}

 

 

 

2. models: 데이터의 정수

데이터베이스 모델을 정의하는 폴더로, 테이블과 관계를 명확히 정의합니다.

// models/userModel.js
class UserModel {
  // 사용자 데이터 모델
}

 

 

3. routes: 라우팅의 정착지

애플리케이션의 라우트를 정의하는 폴더입니다. 각 라우트는 특정 URL에 대한 요청을 어떤 컨트롤러가 처리할지 지정합니다.

// routes/userRoutes.js
const express = require('express');
const router = express.Router();
const UserController = require('../controllers/userController');

// 사용자 라우트 정의
router.get('/users', UserController.getAllUsers);

module.exports = router;

 

 

Node.js Sequelize 모델에서 외래키 지정하는 방법

Node.js Sequelize 모델에서 외래키 지정하는 방법 Sequelize를 사용하여 데이터베이스 모델을 정의하고 관계를 설정할 때, 외래 키(Foreign Key)의 지정은 중요한 부분입니다. 이 외래 키를 정확하게 설정

lemonlog.tistory.com

 

4. public: 정적 자산의 보관함

클라이언트에 제공되는 정적 파일들을 담는 폴더입니다. CSS, JavaScript, 이미지 등이 여기에 위치합니다.

/public
  /css
  /js
  /images

 

 

5. views: 화면의 담당

애플리케이션의 템플릿 파일을 담는 폴더로, HTML 템플릿 등이 위치합니다.

/views
  /user
    profile.ejs
    dashboard.ejs

 

 

6. test: 코드의 견고한 방패

애플리케이션을 테스트하는 코드를 담는 폴더로, 각 컴포넌트가 예상대로 작동하는지 검증합니다.

// test/userController.test.js
const assert = require('assert');
const UserController = require('../controllers/userController');

// 테스트 코드 작성

 

 

7. middleware: 로직의 중간지점

애플리케이션의 미들웨어를 담는 폴더입니다. 요청과 응답 사이의 로직을 처리하며, 중복을 방지하고 코드를 깔끔하게 유지합니다.

// middleware/authMiddleware.js
function authenticate(req, res, next) {
  // 인증 로직
  next();
}

 

 

8. config: 설정의 정리함

애플리케이션의 설정 파일을 담는 폴더로, 데이터베이스 연결 정보, 키 값 등을 보관합니다.

// config/databaseConfig.js
module.exports = {
  // 데이터베이스 설정
};

 

 

9. app.js: 진입점의 관문

애플리케이션의 진입점을 정의하는 파일로, 설정과 서버 시작 등이 이루어집니다.

const express = require('express');
const app = express();
const userRoutes = require('./routes/userRoutes');

// 미들웨어 및 라우트 설정
app.use('/users', userRoutes);

// 서버 시작
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

 

 

10. package.json: 의존성의 도서관

애플리케이션의 의존성과 스크립트를 정의하는 파일입니다. npm을 통해 필요한 패키지를 설치할 때 사용됩니다.

{
  "dependencies": {
    "express": "^4.17.1",
    // 기타 의존성
  },
  "scripts": {
    "start": "node app.js"
    // 기타 스크립트
  }
}

 

 

원활한 협업을 위한 작업

 

이상적인 폴더 구조는 프로젝트의 복잡성을 낮추고 가독성을 향상시킵니다. 각각의 역할과 책임이 분명한 구조는 개발자들이 협업하거나 새로운 기능을 추가할 때 효율적으로 작업할 수 있도록 돕습니다. 프로젝트를 시작할 때마다 이러한 구조를 참고하여 진행하시길 권장합니다.

 

▼ 아래 글도 읽어보세요! ▼

 

 

Git, 실수로 삭제한 파일 복구하는 방법

Git, 실수로 삭제한 파일 복구하는 방법 Git은 협업과 버전 관리를 위한 강력한 도구입니다. 그러나 가끔 실수로 파일을 삭제하거나 잘못된 pull로 인해 문제가 발생할 수 있습니다. 이런 상황에서

lemonlog.tistory.com

 

 

GitHub Readme 마크다운 사용법 (체크리스트, 이모티콘, 코드블럭, 폰트, 링크)

GitHub Readme 마크다운 사용법 (체크리스트, 이모티콘, 코드블럭, 폰트, 링크) GitHub에서의 마크다운 작성법을 익히면 문서를 보다 간편하게 편집할 수 있습니다. 체크리스트, 이모티콘, 코드 블록,

lemonlog.tistory.com

 

 

JavaScript 배열 메소드 filter() 쉽게 배우기 - 예시 코드 제공

JavaScript 배열 메소드 filter() 쉽게 배우기 - 예시 코드 제공 JavaScript에서 배열을 조작하고 원하는 조건을 충족하는 요소만 추출하는 데 사용하는 강력한 배열 메소드 중 하나가 filter()입니다. 이

lemonlog.tistory.com