Nest.js 프로젝트 생성 및 초기 설정: npm i -g @nestjs/cli로 CLI를 전역 설치하고, nest new <프로젝트명>으로 새 프로젝트를 생성하며, 원하는 패키지 매니저를 선택하여 초기 환경을 구축합니다. 🚀
핵심 모듈(AppModule)의 역할: app.module.ts는 애플리케이션의 중심 모듈로, 다른 모듈을 imports하고, 요청을 처리하는 controllers와 비즈니스 로직을 담는 providers (서비스)를 정의하며, 외부에서 사용 가능하도록 exports합니다. 🧩
컨트롤러(Controller)의 기능: app.controller.ts는 클라이언트의 HTTP 요청을 받아 서비스 계층으로 전달하고, 서비스의 처리 결과를 클라이언트에 응답하는 역할을 합니다. 🗣️
서비스(Service)의 기능: app.service.ts는 실제 비즈니스 로직을 처리하고, 데이터 연산 및 데이터베이스 통신을 담당합니다. 🧑🍳
의존성 주입(Dependency Injection, DI): Nest.js는 컨트롤러에서 서비스 인스턴스를 주입받아 사용하는 의존성 주입 패턴을 활용하여 코드의 결합도를 낮추고 유연성을 높입니다. 💉
애플리케이션 진입점(main.ts): main.ts 파일은 NestFactory.create(AppModule)을 통해 Nest 애플리케이션 인스턴스를 생성하고, app.listen(3000)으로 서버를 특정 포트에서 시작하는 역할을 합니다. 🚦
모듈(Module) 기반의 기능별 구조화: Nest.js는 관련된 컨트롤러와 서비스를 모듈 단위로 묶어 기능별로 코드를 조직화하며, 이는 코드의 유지보수성과 확장성을 크게 향상시킵니다. 🏗️
요청 처리 흐름: 클라이언트의 HTTP 요청은 컨트롤러를 통해 서비스로 전달되어 비즈니스 로직이 처리되고, 데이터베이스와 통신한 후, 그 결과가 다시 컨트롤러를 거쳐 클라이언트에 응답됩니다. 🔄
모듈 분리의 이점: 기능별로 모듈을 분리하면 코드 찾기가 쉬워지고, 유지보수가 용이하며, 새로운 기능 추가 시 해당 기능에 맞는 모듈만 생성하면 되므로 개발 효율성이 증대됩니다. 💡
모듈 간의 엄격한 분리: 각 모듈은 철저히 분리되어 있어, 다른 모듈의 기능(컨트롤러, 서비스 등)을 사용하려면 해당 모듈을 imports 배열에 명시적으로 주입해야 합니다. 🔗