Search

NestJS 구성파일

글의 목적

NestJS로 개발하다보면 package.json, tsconfig.json, tsconfig.build.json 같은 파일들이 자동 생성된다.
하지만 이 파일들이 하는 역할을 정확히 알지 못하고 사용해왔던 경우가 많았던 것 같다.
이 기회에 NestJS의 구성 파일에 대해 제대로 공부하고 앞으로는 알고 이해하고 쓰는 개발자가 되어야겠다.

NestJS의 디렉토리 구조 (모노레포 기준)

. ├── package.json ├── tsconfig.json ├── tsconfig.build.json ├── nest-cli.json ├── apps/ │ └── api/ │ └── gs-mall-be/ │ ├── tsconfig.json │ └── tsconfig.build.json
Plain Text
복사

NestJS의 구성파일 종류

package.json

Node.js 프로젝트의 설정, 의존성, 스크립트, 메타정보를 담은 JSON 파일이다.
프로젝트 루트나 각 앱 디렉토리의 루트에 위치하며 npm, yarn, pnpm패키지 매니저가 의존성을 관리하고 명령어 실행 시 참고하는 파일이다.
위치: 프로젝트 루트 or 각 앱 디렉토리
용도: 프로젝트 정보와 의존성, 실행 스크립트를 관리
주요 필드 설명
name : 패키지 이름, npm 등록 시 고유 식별자 역할
일반적으로 프로젝트 이름 또는 패키지 이름이다.
version : SemVer방식으로 버전을 관리한다. (major.minor.patch 형식 ex) 1.0.1)
description : 프로젝트 간략 설명
main: Node.js나 다른 모듈 시스템에서 require() 또는 import 할 때 기본으로 참조하는 파일 경로이다.
NestJS 앱은 보통 직접 실행하는 애플리케이션 구조이기 때문에 서비스 서버에서는 필수로 필요한 것은 아니다.
하지만 외부 라이브러리 등 다른 모듈이나 서버에서 해당 라이브러리를 가져와 사용할 때는 필수적으로 main필드로 진입점을 명시해줘야 한다.
scripts: 커맨드 스크립트 모음
“start”, “build”, “test” 등 명령어를 기입하는 필드
"scripts": { "start": "nest start", "start:dev": "nest start --watch", "build": "nest build", "test": "jest", "lint": "eslint '{src,test}/**/*.ts' --fix" }
TypeScript
복사
dependencies: 프로덕션 런타임에 필요한 패키지
NestJS 라이브러리들이 포함
npm install <패키지> —save 시 여기에 추가된다.
devDependencies
개발환경에서만 필요한 패키지
컴파일러, 타입 정의, 테스트 라이브러리, 린터 등
npm install <패키지> —save-dev 시 여기에 추가됨

tsconfig.json

타입스크립트로 작성된 코드들을 자바스크립트로 변환 시키는 컴파일 설정 관련 파일이다.
즉, TypeScript에서 컴파일러의 동작을 제어하는 설정파일이다.
예시
{ "compilerOptions": { "lib": ["ESNext", "DOM"], // 컴파일에 사용하 ㄹ라이브러리 "module": "commonjs", // 모듈 시스템 "declaration": true, // .d.ts 타입 선언 파일 생성 여부 "removeComments": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, "allowSyntheticDefaultImports": true, "target": "es6", // 어떤 javascript로 트랜스파일할지 "sourceMap": true, "outDir": "./dist", // 컴파일된 .js파일이 저장될 디렉토리 "baseUrl": "./", "incremental": true, "skipLibCheck": true, "strictNullChecks": false, "noImplicitAny": false, "strictBindCallApply": false, "forceConsistentCasingInFileNames": false, "noFallthroughCasesInSwitch": false, "paths": { "@/*": ["./src/*"] // 경로 별칭 설정 } }, // 컴파일할 파일들을 지정하는 속성 (와일드 카드 패턴으로 묶어 표현) "include": [ "src/**/*.ts" ], // 컴파일 대상에서 제외할 파일들을 지정하는 속성 "exclude": [ "node_modules", "**/*.test.ts" ], }
TypeScript
복사

tsconfig.build.json

위치: 각 Nest 앱 내부
역할 : Nest CLI가 nest build 시 사용하는 설정
tsconfig.build.json 파일은 NestJS나 TypeScript 기반 프로젝트에서 프로덕션 빌드를 위한 전용 TypeScript 설정 파일이다.
NestJS에서 nest build 명령어가 기본적으로 tsconfig.build.json을 사용해 프로덕션 소스만 컴파일한다.
주로 tsconfig.build.json은 tsconfig.json 파일을 extend해서 사용하고 따로 설정할 옵션값만 명시하여 작성한다.
{ "extends": "./tsconfig.json", "exclude": ["node_modules", "test", "dist", "**/*.spec.ts"] }
TypeScript
복사
위 파일은 exclude 옵션만 제외하고 tsconfig.json 파일에 위 파일에 명시된 exclude옵션을 사용하는 것이다
**주의! : exclude같이 명시한 옵션은 merge, 덮어쓰기가 아닌 그냥 위 파일에 명시된 옵션값만 동작한다. (새로 다시 쓰기와 동일)

tsconfig.json과 tsconfig.build.json의 차이는?

tsconfig.json: 개발용 설정 (테스트 코드 포함)
tsconfig.build.json: 빌드 전용 설정 (테스트 코드 제외, noEmit false 등)

nest-cli.json 파일

nest-cli.json은 NestJS 프로젝트에서 Nest CLI(@nestjs/cli) 의 동작을 제어하는 설정 파일이다.
이 파일을 통해 코드 생성 명령어의 기본 경로, 빌드 대상, Webpack 사용 여부 등 다양한 Nest CLI 관련 옵션을 설정할 수 있다.
{ "collection": "@nestjs/schematics", // Nest CLI가 사용할 schematics 패키지를 지정 "sourceRoot": "src", "compilerOptions": { "deleteOutDir": true, "webpack": false, "tsConfigPath": "tsconfig.build.json" } }
TypeScript
복사
collection
Nest CLI가 사용할 schematics 패키지 지정
스캐매틱(Schematics) : 코드 생성 도구 템플릿 시스템
예를 들어 nest g service users 명령어를 입력하면 users.service.ts 파일이 생성된다.
이러한 것들을 정하는것이 스캐매틱이다.
"@nestjs/schematics"는 기본값
sourceRoot
Nest CLI가 소스 루트로 간주할 디렉토리
nest g module, nest g service 등으로 생성한 파일이 이 디렉토리 내부에 생성됨
보통 “src”
tsConfigPath
사용할 TypeScript 설정 파일 지정 (tsconfig.build.json 등)
Nest CLI가 nest build 할 때 이 설정 기준으로 컴파일
package.json ↓ tsconfig.json ↓ tsconfig.build.json (← Nest CLI가 주로 사용하는 파일)
Plain Text
복사
파일명
역할 및 설명
위치 / 사용처
nest-cli.json
Nest CLI 설정. 모노레포에서 프로젝트별 경로, 빌드 옵션 지정
루트
pnpm-workspace.yaml (또는 yarn.workspaces, lerna.json)
워크스페이스 패키지 범위 지정 (모노레포용)
루트
.eslintrc.js / .eslintrc.json
코드 스타일과 린팅 규칙 설정
루트 또는 각 앱별
.prettierrc / prettier.config.js
코드 포맷팅 규칙 설정
루트 또는 각 앱별
.env / .env.example
환경 변수 관리용 파일 (개발, 테스트, 배포 환경별 별도 관리 가능)
루트 또는 각 앱별
jest.config.js
유닛 테스트 설정 (NestJS는 Jest 기본 지원)
루트 또는 각 앱별
ormconfig.json / ormconfig.js (또는 TypeORM 설정 파일)
데이터베이스 ORM 설정 (TypeORM 등 사용하는 경우)
루트 또는 각 앱별
README.md
프로젝트 및 각 앱 설명 문서
루트 및 각 앱별