본문 바로가기

Nodejs

Node.js 백엔드 디렉토리 구조

반응형

매번 신규 프로젝트를 구성할 때 마다 프로젝트 구조를 어떻게 잡는 것이 좋을까 고민이 됩니다.

보통 2가지 방법으로 구성하는 것 같아요.

  1. 기능 중심으로 구성하기
  2. 도메인 중심으로 구성하기

뭐가 좋다 라고 하기보다는 편한방식 또는 익숙한 방식으로 구성하는 것 같습니다.
대략적인 Node.js 백엔드 디렉토리 구조에 대한 설명과 구조를 살펴보겠습니다.

디렉토리 폴더 설명

  • @types/: 타입 정의 파일을 포함하는 디렉토리입니다. 주로 외부 라이브러리의 타입 선언 파일이 위치합니다.
  • config/: 설정 파일을 포함하는 디렉토리입니다. 주로 환경 변수나 애플리케이션 설정과 관련된 파일들이 위치합니다.
  • logs/: 로그 파일을 저장하는 디렉토리입니다. 애플리케이션 로그 또는 서버 로그와 관련된 파일들이 위치할 수 있습니다.
  • node_modules/: 프로젝트의 종속성인 Node.js 모듈이 설치되는 디렉토리입니다. 일반적으로 패키지 매니저가 이 디렉토리에 모듈을 설치합니다.
  • public/: 정적 파일(이미지, CSS, JavaScript 등)이 위치하는 디렉토리입니다. 웹 서버에서 정적 파일을 제공할 때 사용될 수 있습니다.
  • src/: 소스 코드를 포함하는 주요 디렉토리입니다.
    • constants/: 애플리케이션에서 사용되는 상수값을 정의하는 디렉토리입니다.
    • controllers/: 라우트에서 요청을 처리하는 컨트롤러 함수를 포함하는 디렉토리입니다.
    • models/: 데이터베이스 모델과 관련된 스키마를 정의하는 디렉토리입니다.
    • routes/: 애플리케이션의 API 엔드포인트와 관련된 라우트를 정의하는 디렉토리입니다.
    • repository/: 데이터베이스 작업을 처리하는 리포지토리 파일을 포함하는 디렉토리입니다. 일부 프로젝트에서는 models/와 통합될 수도 있습니다.
    • services/: 비즈니스 로직이나 데이터 처리와 관련된 서비스 계층을 포함하는 디렉토리입니다.
    • middlewares/: 라우트 핸들러에 적용되는 미들웨어 함수를 포함하는 디렉토리입니다. 인증, 로깅 등과 같은 공통 기능을 구현할 수 있습니다.
    • utils/: 재사용 가능한 유틸리티 함수, 헬퍼 함수 등을 포함하는 디렉토리입니다.
    • helper/: 특정 기능을 수행하기 위한 도우미 함수를 포함하는 디렉토리입니다.
    • app.ts: 애플리케이션의 진입점 파일입니다. 서버를 설정하고 필요한 미들웨어와 라우트를 등록하는 역할을 합니다.
  • views/: 서버 측 렌더링을 위한 뷰 템플릿 파일이 위치하는 디렉토리입니다. 예를 들어, Express.js에서는 이 디렉토리에 ejs, pug와 같은 뷰 엔진 템플릿 파일을 저장합니다.
  • .env: 환경 변수를 설정하는 파일입니다. 애플리케이션에 필요한 환경 변수들을 지정할 수 있습니다.

이 외에도, test, eslint, ecosystem.config.json(pm2), nodemon.json, package.json, tsconfig.json, yarn.lock 등이 있습니다.

기능별로 디렉토리 구조

기능별로 디렉토리를 구성한 예시 입니다.

project/
  ├── @types/
  ├── config/
  ├── logs/
  ├── node_modules/
  ├── public/
  ├── src/
  |    ├── constants/
  |    ├── controllers/
  |    ├── models/
  |    ├── routes/
  |    ├── repository/
  |    ├── services/
  |    ├── middlewares/
  |    ├── utils/
  |    ├── helper/
  |    └── app.ts 
  ├── views/
  └── .env

도메인 중심 디렉토리 구조

다음은 도메인 중심으로 구성한 디렉토리 구조 입니다.

project/
  ├── @types/
  ├── config/
  ├── logs/
  ├── public/
  ├── src/
   |    ├── api/
   |    |    ├── user/
   |    |    |   ├── controller/
   |    |    |   ├── entity/
   |    |    |   ├── repository/
   |    |    |   └── service/
   |    |    └── post/
   |    |
  |    ├── routes/
  |    ├── middlewares/
  |    ├── utils/
  |    └── app.ts (또는 server.ts)
 ├── views/
 └── .env

디렉토리가 정답이 있는 것은 아니고, 각자 편한대로 구성하는 것 같습니다.

그리고 경로가 길어질 때, tsconfig.paths 롤 사용해서 경로를 표기하기도 합니다.

다음에는 tsconfig.paths를 활용한 경로 설정 방법을 알아보겠습니다.

 

 

반응형