[Node] Node.js 백엔드 폴더 구조

728x90

진행 중인 프로젝트가 Node.js로 백엔드 API를 만들고 있습니다. 현재 프로젝트에서는 기본적인 RestAPI와 소켓통신도 해야하고 약 3가지 정도의 Open API를 사용할 예정입니다. 백엔드 개발은 자바로 해봤긴 했는데 자세하게 알고 있는 것은 아니기 때문에 자주 접하려고 합니다! 그래서 오늘은 프로젝트를 진행할 때 기본적으로 알아야 하는 백엔드 폴더 구조에 대해서 알아보겠습니다. 폴더구조를 알아보면서 바로 프로젝트에 적용해보도록 하겠습니다.


 Node.js 백엔드 API 폴더 구조(feat.챗GPT)

project-root/
│
├── src/                     # 소스 코드 폴더
│   ├── controllers/         # 라우트 핸들러 로직 (비즈니스 로직)
│   │   └── userController.js
│   │
│   ├── routes/              # API 라우트 정의
│   │   └── userRoutes.js
│   │
│   ├── models/              # 데이터 모델 정의
│   │   └── userModel.js
│   │
│   ├── middlewares/         # 공통 미들웨어
│   │   └── errorHandler.js
│   │
│   ├── services/            # 서비스 계층 (비즈니스 로직 분리)
│   │   └── userService.js
│   │
│   ├── utils/               # 유틸리티 함수 모음
│   │   └── logger.js
│   │
│   ├── config/              # 환경 변수 및 설정 파일
│   │   └── default.js
│   │
│   └── app.js               # Express 앱 초기화
│
├── tests/                   # 테스트 코드
│   └── userController.test.js
│
├── public/                  # 정적 파일 (HTML, CSS, JS 등)
│   └── index.html
│
├── .env                     # 환경 변수 파일
├── .gitignore               # Git 제외 파일 설정
├── package.json             # 프로젝트 메타데이터 및 의존성
└── README.md                # 프로젝트 설명 문서
  • controllers :요청을 처리하는 함수(컨트롤러)를 정의합니다.
  • routes : URL 경로와 컨트롤러를 매핑하는 라우트 파일을 정의합니다.
  • models : 데이터베이스의 구조(스키마)를 정의하거나 데이터 작업을 수행합니다.
  • middlewares : 요청/응답 흐름 중간에 실행되는 로직(예: 인증, 에러 처리 등)을 정의합니다.
  • services : 컨트롤러와 데이터베이스 간의 중간 계층 역할을 합니다. 비즈니스 로직을 분리하는 데 유용합니다.
  • utils : 프로젝트 전반에서 재사용 가능한 유틸리티 함수나 모듈을 모아놓습니다.
  • config : 환경 설정 파일을 관리합니다. 예를 들어, 데이터베이스 URL이나 포트 번호 같은 설정을 저장합니다.
  • tests :  유닛 테스트나 통합 테스트 코드를 작성합니다. Jest 또는 Mocha와 같은 테스트 프레임워크를 사용할 수 있습니다.

 

java에서 사용하는 MVC 패턴

https://junhyu nny.github.io/information/design-pattern/mvc-pattern/

우리가 잘 알고 있는 MVC 패턴과 같네요. 위 사진에서 보여주는 View는 React로 보시면 될 것 같습니다. 만약 다른 프레임워크로 프론트엔드 작업을 하신다면 view가 되겠네요. 

저는 프론트엔드로 React, 백엔드로 Node를 사용할 생각입니다. 그리고 만약 백엔드 개발에서 좀 큰 서버를 만들어야 한다면 Java로도 생각중입니다! (또한 Open API 연동할 때도 Node나 Java 중 하나 사용할 생각입니다)

 

 

728x90