NestJS[0]_개요, 실행
2025. 7. 9. 10:11ㆍBack-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을 사용해보자.
- 이 링크에서 nvm-setup.exe 파일을 받아오고 설치한다.
- 설치 확인 : nvm -v
- 사용 가능 버전 확인 : nvm list available
- Node.js 최신 LST 버전 설치 : nvm install --lts
- Node.js 설치된 버전 확인 : nvm ls
- Node.js 버전 선택 : nvm use 22.17.0
- Node.js 버전 확인 : node -v
- 여러 프로젝트를 병행할 때, 각 프로젝트 폴더로 이동 후 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
- 별도 설치.
- 디스크 사용 : 하드링크, 심볼릭 링크로 공간 절약.
- 보안 : 체크섬 검증, 의존성 격리
- 설치 속도가 빠르고 대기업과 오픈소스 커뮤니티에서 채택 사례 증가 중.
- npm
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 |