반응형
매번 신규 프로젝트를 구성할 때 마다 프로젝트 구조를 어떻게 잡는 것이 좋을까 고민이 됩니다.
보통 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를 활용한 경로 설정 방법을 알아보겠습니다.
반응형
'Nodejs' 카테고리의 다른 글
TypeScript tsconfig-paths 톺아보기 (0) | 2023.07.19 |
---|---|
Typescript tsconfig.json 옵션들 톺아보기 (0) | 2023.07.19 |
async / await 와 Promise (async 안에서 promise 처리) (0) | 2018.06.29 |
[NODEJS 입문]14.(pbkdf2-password) 비밀번호 암호화 (0) | 2018.06.12 |
[NODEJS 입문]13.(사용자 DELETE) 사용자 삭제 (0) | 2018.06.11 |