Skip to content

Folder Structure

White_DeepDive edited this page Jul 24, 2026 · 2 revisions

Folder Structure

도메인별 모듈 구조를 따릅니다. 각 도메인은 src/ 바로 아래에 독립된 폴더로 배치합니다.

디렉토리 구조

src/
├── main.ts                    # 애플리케이션 진입점
├── app.module.ts              # 루트 모듈
│
├── common/                    # 공통 모듈 (2개 이상 도메인에서 사용)
│   ├── filters/               # 예외 필터
│   ├── interceptors/          # 인터셉터
│   ├── guards/                # 가드
│   ├── decorators/            # 커스텀 데코레이터
│   └── pipes/                 # 파이프
│
├── config/                    # 환경 설정
│
└── user/                      # 도메인 모듈 (예시)
    ├── user.module.ts         # 도메인 모듈 정의
    ├── user.controller.ts     # HTTP 요청 처리
    ├── user.service.ts        # 비즈니스 로직
    ├── user.service.spec.ts   # 테스트 (소스 파일 옆에 위치)
    ├── dto/                   # Data Transfer Object
    │   ├── create-user.dto.ts
    │   └── update-user.dto.ts
    └── entities/              # 엔티티
        └── user.entity.ts

디렉토리별 책임

디렉토리 책임
common/ 여러 도메인에서 공통으로 사용하는 코드. 2개 이상의 도메인에서 사용될 때만 여기에 배치
config/ 환경 변수, 데이터베이스, 외부 서비스 등 설정 관련 코드
{domain}/ 하나의 도메인에 관련된 모든 코드 (controller, service, dto, entity 등)
{domain}/dto/ 요청/응답 데이터 형식 정의
{domain}/entities/ 데이터베이스 엔티티 정의

규칙

모듈 생성

# NestJS CLI로 도메인 리소스 생성 (권장)
nest g resource user

파일 배치

  • 도메인 관련 코드는 해당 도메인 폴더 안에 배치
  • 테스트 파일(*.spec.ts)은 테스트 대상 소스 파일 옆에 위치
  • common/에는 최소 2개 도메인에서 사용하는 코드만 배치 (1개 도메인만 사용하면 해당 도메인 폴다에)

import 경로

  • 같은 도메인 내: 상대 경로 사용
  • 다른 도메인 / common 참조: 절대 경로 (src/ 기준) 사용 권장
// 같은 도메인 내
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';

// common 모듈
import { HttpExceptionFilter } from 'src/common/filters/http-exception.filter';

파일 네이밍

{도메인}.{역할}.ts          # user.controller.ts, user.service.ts
{동작}-{도메인}.dto.ts      # create-user.dto.ts
{도메인}.entity.ts          # user.entity.ts
{도메인}.{역할}.spec.ts     # user.service.spec.ts

Clone this wiki locally