NestJS[0]_개요, 실행

2025. 7. 9. 10:11Back-end/NestJS

NestJS

  • 서버 애플리케이션을 만들기 위한 프레임워크.
  • Node.js 환경에서 동작하며, Javascript 기술 사용.
  • TypeScript 기반으로 코드 안정성과 유지보수성이 높다.
  • 구조적 아키텍처 : Module, Controller, Provider

 

Module

  • 애플리케이션 구성의 기본 단위로, 관련 기능을 하나의 묶음으로 만드는 컨테이너 역할.
    • 예) 유저 관리 기능 : 유저 CRUD에 필요한 코드(class)들을 UserModule이라는 하나의 모듈로 묶어 관리.
    • Spring의 @Configuration이나 Java의 package에 가깝다.
  • 프레임워크가 Singleton으로 관리.
  • 역할
    • 기능적 분리 : 각 기능을 독립된 모듈 단위로 쪼개어 책임을 명확히 분리.
    • 캡슐화 : 관련 컨트롤러, 프로바이더, 다른 모듈 등을 내부에 포함하여 하나의 단위로 묶는다.
    • 의존성 관리 : 다른 모듈의 기능이 필요할 때 imports 배열에 추가하여 사용 가능하며, 현재 모듈의 기능을 다른 모듈에서 사용할 수 있도록 exports로 외부에 공유 가능.
  • 모든 NestJS 애플리케이션은 하나 이상의 Root Module(AppModule)을 가지며, 이를 시작으로 다른 하위 모듈들이 트리 구조로 연결되어 전체 애플리케이션이 구성된다.

 

Controller

  • 클라이언트(웹 브라우저)로부터 들어오는 HTTP request를 받고 그에 대한 response를 보내는 역할.
  • 역할
    • 라우팅 : @Controller('post')와 같이 데코레이터를 사용하여 특정 경로의 요청에 해당하는 컨트롤러 지정.
    • 요청 처리 : @Get(), @Post(), @Delete()와 같은 HTTP 메서드 데코레이터를 사용해 GET, POST, DELETE 등 요청에 맞는 함수 실행.
    • 로직 위임 : 요청을 받고 응답하는 역할에 집중. DB 조회나 복잡한 계산과 같은 실제 비즈니스 로직은 직접 처리하지 않고 Provider에 위임.

 

Provider

  • NestJS의 핵심 개념으로, 의존성으로 주입될 수 있는 모든 클래스(대표적으로 Service).
  • 역할(Service 기준)
    • 비즈니스 로직 처리 : 애플리케이션의 핵심 로직 담당.
        예) 새로운 사용자를 DB에 저장, 게시글 데이터를 가공하여 특정 정보만 추출.
    • 데이터 처리 : DB 접근, 외부 API 호출 등 데이터 저장이나 조회 작업.
    • 재사용성 : 하나의 서비스를 여러 컨트롤러나 다른 서비스에서 사용 가능(중복 최소화).
  • @Injectable() 데코레이터로 정의하여 의존성 주입 시스템이 관리.
       => 컨트롤러는 constructor를 통해 필요한 서비스를 주입받아 사용하므로 코드 간 결합도가 낮고 테스트하기 쉬운 구조가 된다.

 

Node.js

  • NestJS는 Node.js 환경에서 실행되므로 컴퓨터에 Node.js가 설치되어 있어야 한다.(20버전 이상)
  • 가상환경으로 버전 관리를 시도해보려고 했는데, python이 없어서 nodeenv를 사용할 수 없다.
  • Node.js 전용 버전 관리 도구인 NVM을 사용해보자.
    1. 이 링크에서 nvm-setup.exe 파일을 받아오고 설치한다.
    2. 설치 확인 : nvm -v
    3. 사용 가능 버전 확인 : nvm list available
    4. Node.js 최신 LST 버전 설치 : nvm install --lts
    5. Node.js 설치된 버전 확인 : nvm ls
    6. Node.js 버전 선택 : nvm use 22.17.0
    7. Node.js 버전 확인 : node -v
    8. 여러 프로젝트를 병행할 때, 각 프로젝트 폴더로 이동 후 nvm use 버전을 실행하면 버전을 지정할 수 있다.

 

NestJS CLI

  • NestJS의 명령줄 개발 도구(Command Line Interface).
  • 프로젝트 생성, 코드 추가 등 다양한 작업을 간단한 명령어로 수행.
  • 프로젝트 빌드, 실행, 테스트 지원.
  • 폴더 및 코드 구조 표준화(NestJS 공식 권장 구조를 따라 협업에서 일관된 코드 품질 관리).
  • 커스텀 CLI 명령어나 플러그인을 만들어 필요에 따라 확장 가능.
  • 설치 : npm install -g @nestjs/cli  -g 옵션은 컴퓨터 어디서든 명령어를 사용할 수 있도록 전역 설치.

 

NestJS 프로젝트 생성

  • 생성 : nest new 프로젝트 이름
  • 패키지 매니저 : 외부 라이브러리(패키지)를 설치, 삭제, 업데이트, 관리하는 도구
    • npm
      • Node.js 설치 시 기본 포함.
      • 디스크 사용 : 중복 설치로 공간 많이 차지.
      • 보안 : 기본, npm audit.
      • 표준으로 사용되어 자료가 많고 사용 난이도가 쉬워 무난하다. 대부분 자료가 npm 기준으로 설명되어 있다.
    • yarn
      • 별도 설치.
      • 디스크 사용 : 중복 설치, npm보다 나음.
      • 보안 : 체크섬 검증, 오프라인 캐시.
      • 대규모 프로젝트, 모노레포(여러 패키지 관리)에 유리.
    • pnpm
      • 별도 설치.
      • 디스크 사용 : 하드링크, 심볼릭 링크로 공간 절약.
      • 보안 : 체크섬 검증, 의존성 격리
      • 설치 속도가 빠르고 대기업과 오픈소스 커뮤니티에서 채택 사례 증가 중.

 

NestJS 프로젝트 실행

cd 프로젝트명으로 프로젝트 폴더로 이동한 뒤 npm run(생략 가능) start로 서버를 실행한다.

  • npm run start:dev : 소스코드가 변경될 때마다 자동으로 반영하여 서버 재시작(개발 모드)
  • 웹 브라우저에서 http://localhost:3000/로 이동하면 Hello World! 메시지를 확인할 수 있다.

서버를 종료할 때는 Ctrl+c로 종료할 수 있다.

'Back-end > NestJS' 카테고리의 다른 글

TypeORM  (1) 2025.07.11
NestJS[1]_main  (3) 2025.07.10