NestJS 폴더구조는 왜 이렇게 구성되었을까?

TS_mamu·2023년 6월 22일
1
post-thumbnail

개요

NestJS가 기본적으로 제공하는 폴더구조는 어떤 철학이 존재할까!

NestJS 폴더구조

NestJS에서는 기본적으로 아래와 같은 폴더 구조를 보여준다.

src
├── main.ts
├── app.module.ts
├── app.controller.ts
├── app.service.ts
├── modules
│   ├── module1
│   │   ├── module1.module.ts
│   │   ├── module1.controller.ts
│   │   ├── module1.service.ts
│   │   └── ...
│   ├── module2
│   │   ├── module2.module.ts
│   │   ├── module2.controller.ts
│   │   ├── module2.service.ts
│   │   └── ...
│   └── ...
└── ...

NestJS는 모듈화와 의존성 주입(Dependency Injection)을 강조하여 애플리케이션의 확장성과 유지보수성을 향상시킨다고 말한다.

📌 폴더 구조 설명
  • src: 프로젝트의 소스 코드가 포함된 디렉토리입니다.
  • main.ts: 애플리케이션의 진입점으로, NestJS 애플리케이션의 인스턴스를 생성하고 실행합니다.
  • app.module.ts: 애플리케이션의 주 모듈입니다. 다른 모듈들을 임포트하고 컨트롤러와 서비스를 설정합니다.
  • app.controller.ts: 애플리케이션의 주 컨트롤러입니다. HTTP 요청을 처리하는 엔드포인트를 정의합니다.
  • app.service.ts: 애플리케이션의 주 서비스입니다. 비즈니스 로직을 구현합니다.
  • modules: 애플리케이션을 모듈 단위로 구성하는 디렉토리입니다. 모듈은 관련된 컨트롤러, 서비스, 프로바이더 등을 묶어서 구성합니다.

modules 디렉토리는 애플리케이션의 기능을 모듈 단위로 분리하여 구성하는 데 사용하고 각 모듈은 해당 기능에 필요한 컨트롤러, 서비스, 프로바이더 등을 포함하며, 필요한 경우 서브 모듈을 더 세분화하여 구성할 수도 있고, 이러한 모듈 구조는 코드의 모듈화와 재사용성을 높여줍니다.

NestJS의 폴더 구조는 프로젝트의 크기와 복잡성에 따라 다를 수 있으며, 개발자의 선호에 따라 커스터마이징할 수도 있습니다. 하지만 일반적으로는 위에서 설명한 구조와 유사한 형태를 가진다.

NestJS 철학

공식문서에 적힌 NestJS 철학 - https://docs.nestjs.com/#philosophy

최근 몇 년 동안 Node.js 덕분에 JavaScript는 프런트엔드 및 백엔드 애플리케이션 모두에서 웹의 "공통어"가 되었습니다. 이것은 개발자 생산성을 향상시키고 빠르고 테스트 가능하며 확장 가능한 프런트엔드 애플리케이션을 생성할 수 있는 Angular , React 및 Vue 와 같은 멋진 프로젝트를 탄생시켰습니다 . 그러나 Node(및 서버측 JavaScript)를 위한 우수한 라이브러리, 도우미 및 도구가 많이 존재하지만 그 중 어느 것도 아키텍처 의 주요 문제를 효과적으로 해결하지 못합니다 .

Nest는 개발자와 팀이 테스트 가능하고 확장 가능하며 느슨하게 결합되고 쉽게 유지 관리할 수 있는 애플리케이션을 만들 수 있는 즉시 사용 가능한 애플리케이션 아키텍처를 제공합니다. 아키텍처는 Angular에서 크게 영감을 받았습니다.

이렇게 작성되어 있고 정리하자면 코드의 구조화와 모듈화, 재사용성, 유지보수성을 강조하고 있다.

개인적인 생각

NestJS는 컨트롤러 서비스 프로바이더를 모듈로 묶어서 구성이 되어있고 프로바이더들은 “많은 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼 등 공급자로 취급될 수 있습니다.”라고 공식문서에서 프로바이더를 설명한다.

이렇듯 모듈 폴더에서 보이는 리포지토리 서비스 컨트롤러들은 레이어드 아키텍처를 강하게 따르는것처럼 보일 수 있으나 모듈화를 지향하는 NestJS에 구조에서는 모듈을 구성하는 프로바이더로 보인다.

(레이어드 아키텍처가 아니냐고 묻는다면 부정하긴 어렵기도 하다.)

각 개발자에 성향에 따라 폴더구조도 바뀌게 되고 새로운사람들과 폴더구조에 대해서 이야기를 나눌때 각자 다른 폴더구조를 생각하고 있던 부분이 굉장히 흥미롭게 여겨져서 한번 글로 작성해보았다.
개인적으론 이 폴더구조... 그리구 NestJs 지향하는 바가 굉장히 맘에든다!

참고 사이트

Documentation | NestJS - A progressive Node.js framework

profile
기술 블로그를 시작하는 개발자

0개의 댓글