ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NestJS 마스터 시리즈 2화. 프로젝트 초기 설정 – CLI로 구조를 잡아보자
    기술과 산업/언어 및 프레임워크 2025. 4. 26. 13:31
    728x90

    “디렉토리 구조를 이해하면 절반은 먹고 들어간다”

     

    NestJS 프로젝트를 Nest CLI로 설정하는 방법과 디렉토리 구조, main.ts, app.module.ts의 역할까지 실무 관점에서 깊이 있게 분석합니다. 초보 개발자도 쉽게 따라할 수 있는 프로젝트 설정 가이드입니다.

     


     

    🏁 시작부터 구조가 중요하다

     

    NestJS는 단순히 코드 몇 줄로 시작하는 Express와는 다릅니다.

    NestJS는 아키텍처 기반 프레임워크이며, 설계 관점에서 접근해야 합니다.

     

    그 시작점은 바로 **Nest CLI(Command Line Interface)**입니다.

     

    “Nest CLI 없이 Nest 프로젝트를 시작하는 건, 설계도 없이 건축을 시작하는 것과 같다.”

     


     

    🧰 NestJS 프로젝트 생성하기

     

     

    1단계: Nest CLI 설치

    npm install -g @nestjs/cli

     

    2단계: 새 프로젝트 생성

    nest new my-nest-app

     

    • my-nest-app은 원하는 프로젝트 이름으로 변경 가능합니다.
    • 설치 중 npm 또는 yarn 선택 가능 (회사 정책에 따라 결정)

     

     

    3단계: 프로젝트 디렉토리 이동

    cd my-nest-app

     

     


     

    🧱 NestJS 기본 디렉토리 구조 분석

     

    Nest CLI로 생성된 구조는 다음과 같습니다:

    src/
      ├── app.controller.ts       // 라우팅 담당
      ├── app.controller.spec.ts  // 컨트롤러 테스트
      ├── app.module.ts           // 루트 모듈
      ├── app.service.ts          // 서비스 로직
      └── main.ts                 // 앱 진입점

    각 파일의 의미는 다음과 같습니다:

    파일명역할

    main.ts Nest 앱의 진입점 (서버 구동)
    app.module.ts 앱의 루트 모듈, 모든 구성 요소를 여기에 연결
    app.controller.ts 라우터 역할을 하는 컨트롤러
    app.service.ts 비즈니스 로직 담당
    *.spec.ts 단위 테스트 파일 (Jest 기반)

     

     


     

    🔍 핵심 파일 1 – 

    main.ts

    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      await app.listen(3000);
    }
    bootstrap();

     

    • NestFactory.create()는 루트 모듈(AppModule)을 불러와 Nest 애플리케이션 인스턴스를 만듭니다.
    • app.listen(3000)은 서버를 포트 3000번에서 시작시킵니다.

     

    👉 이 코드는 백엔드의 앱 실행 entry point이며, 추후 미들웨어나 글로벌 설정을 여기서 구성하게 됩니다.

     


     

    🔍 핵심 파일 2 – 

    app.module.ts

    @Module({
      imports: [],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule {}

     

    • @Module() 데코레이터는 이 모듈이 사용하는 컨트롤러와 프로바이더(Service)를 정의합니다.
    • 여기에 다른 모듈을 import해서 전체 앱을 구성하게 됩니다.

     

    Nest의 철학은 “모듈 중심 구조”입니다. app.module.ts는 모든 기능의 루트 노드 역할을 합니다.

     


     

    🚧 실무 기준으로 구조 확장 팁

     

    Nest CLI의 기본 구조는 학습에는 좋지만, 실무에서는 보통 다음처럼 확장합니다:

    src/
      ├── main.ts
      ├── app.module.ts
      ├── common/           // 공통 모듈, 인터셉터, 필터, 유틸 등
      ├── config/           // 환경 설정 및 .env 연동
      ├── modules/          // 기능별 모듈 집합 (User, Auth 등)
      └── shared/           // 인터페이스, 상수, 공통 DTO 등

    이 구조를 초반에 잡아두면 확장성과 유지보수성이 확실히 올라갑니다.

     


     

    ✅ 개발자 팁 – Git 초기화 및 설정

    git init
    echo "node_modules" > .gitignore

     

    • .gitignore 설정은 nest new 시 자동으로 생성되지만, 팀 환경에서는 공통 템플릿을 사용하는 것이 좋습니다.
    • 이후 husky, eslint, prettier 같은 설정도 초기에 잡아두면 협업 시 큰 도움이 됩니다.

     


     

    🔚 마무리 인사이트

     

    NestJS는 CLI 단계에서부터 구조화된 개발 철학을 강요합니다.

    그 철학을 이해하고 따라가는 것이 유지보수성과 확장성 있는 서비스를 만드는 첫걸음입니다.

     

    구조는 귀찮은 게 아니라, 개발의 가장 강력한 무기입니다.

     


     

    📎 다음 회차 예고

     

    👉 3화. 모듈 시스템 이해하기 – Nest의 핵심 철학 ‘모듈화’ 분석

     

    AppModule을 이해하면 NestJS 전체 구조가 보입니다. 실제 기능별 모듈로 확장하는 방법까지 정리합니다.
    728x90
Designed by Tistory.