최근 nestjs를 공부하기 시작했다
node기반 타입스크립트를(자바스크립트도 가능하긴 함) 사용하는 백엔드로 쉽게 말해 express보다 확장된 백엔드 프레임워크다
express보다 확장됬기때문에 대규모(기업용)에 적합하며 많이 사용하며 자바의 스프링과 비슷하게 생겼다.(스프링한테 구조적으로 영향을 많이 받았다고 이야기가 있음)
1.NestJS기본적인 구조

- Controller
Controller는 사용자(client)의 요청과 서버의 응답이 오가는 통로이다.
사용자가 요청을 보내면 가장 먼저 도착하는 곳이며, GET, POST, PUT, DELETE 같은 요청 방식을 구분해 각각의 요청을 알맞은 기능으로 연결한다. 예를 들어 POST /login 요청은 로그인 기능으로, GET /search 요청은 검색 기능으로 전달된다.
Controller는 직접 로직을 처리하지 않고, 요청 내용을 확인한 뒤 내부의 Provider에게 전달해 결과를 받아온다.
그리고 받은 결과를 다시 사용자에게 응답으로 돌려준다.
(서비스에 사용할 뭐 딥한 기능을 구현하는 곳이 아니라 요청응답 처리하는 부분이다)
- Provider(Service)
Provider는 Controller에서 넘어온 요청을 실제로 처리하는 부분으로 예를들어 로그인처리를 위해 아이디와 비밀번호를 확인하거나, 게임에 점수가 오른다거나, 검색해서 데이터베이스에서 결과를 조회 등 구현하려는 기능의 처리영역이다.
프로바이더에서 서비스의 핵심적인 기능? 아이덴티티, 정체성? 있는 기능 부분을 서비스(Service)라고 부르는 것 같아 보인다.
(추상적인 느낌인 것 같다.)
- Module
Module은 관련된 Controller와 Provider를 하나의 기능 단위로 묶은 구조다.
로그인 기능들을 모으면 AuthModule,검색 기능들을 모으면 SearchModule처럼 이름을 붙일 수 있다.
이렇게 기능별로 묶어두면 코드가 보기 쉬워지고, 새로운 기능을 추가하거나 수정할 때 다른 부분에 영향을 주지 않는다.
NestJS는 이런 모듈 구조를 통해 프로젝트를 체계적으로 관리할 수 있게 하는 것 같아 보인다.
2. 기본 설치방법
일단 node.js가 당연히 설치돼있어야 한다
그리고 어느 정도 타입스크립트를 할 줄 알아야 된다
npm i -g @nestjs/cli
nest new project-name
위 명령어를 입력해 주면 프로젝트가 생성되기 시작한다
두 번째 줄에 project-name에는 원하는 이름을 작성하면 된다
명령어를 입력하고 나면 아래와 같이 어떤 패키지 매니저를 사용하시겠습니까?라고 나온다(난 npm으로 설치함)

3. 전체적인 nestjs폴더 구조

프로젝트를 생성하면 test와 src 디렉터리가 눈에 띈다.
src 디렉터리: src는 실질적으로 운영하려는 서비스의 코드들이 들어 있는 폴더로, 여기에서 주로 코드를 작성한다.
test 디렉터리: test는 테스트 코드 전용 폴더이며, NestJS가 기본 템플릿으로 제공한다.
안에 포함된 .ts와. json 파일들은 모두 테스트용 코드이며, npm run test 명령어를 실행하면 테스트 결과를 확인할 수 있다.
개발 중 문제가 발생했을 때, 내가 작성한 src 내부 코드에 문제가 있는지,
아니면 NestJS 자체의 동작 문제인지 판단하는 용도로 사용하는 것으로 보인다.
4.src폴더 안에 구조 살펴보기
src
┣ app.controller.ts # 요청을 받아 응답을 반환하는 Controller
┣ app.service.ts # 실제 기능이 동작하는 Provider(Service)
┣ app.module.ts # Controller와 Service를 묶는 Module
┣ app.controller.spec.ts # 테스트용 파일 (실제 서비스와 무관, 필요 시 삭제 가능)
┗ main.ts # 서버를 실행하는 시작점
위에서 컨트롤러, 프로바이더, 모듈 개념을 말한 거를 토대로 여기서 코드를 작성한다고 생각하면 된다.
- app.controller.ts
요청을 받아 응답을 돌려주는 Controller 파일이다.
GET, POST 같은 요청을 구분하고 적절한 기능으로 연결한다. - app.service.ts
실제 기능이 동작하는 Provider(Service) 파일이다.
Controller에서 받은 요청을 처리하고 결과를 반환한다. - app.module.ts
Controller와 Service를 묶어주는 Module 파일이다.
어떤 기능들이 함께 동작할지 설정한다. - app.controller.spec.ts
테스트용 파일이다.
실제 서비스에는 사용되지 않으며, 개발 후에는 지워도 된다. - main.ts
서버를 실행하는 시작점이다.
- 파일 이름 구조
NestJS에서 파일 이름은 이름. 역할표시. 확장자 형태로 작성하면 된다
예를 들어 app.service.ts는 app이라는 이름을 가진 Service 역할의 파일이다.
즉, Provider 중에서도 핵심 기능을 담당하는 부분을 service라고 부르며,
이름. 역할. 확장자형태로 많이들 작성한다고 함.
(nestjs가 컨트롤러, 프로바이더 등 구분은 데코레이터를 사용해서 작동)
5.NestJS실행
npm run start
위에 명령어를 입력하면 nest.js가 실행된다.(기본적으로 설치되면 3000포트 이용)
npm run start:dev
dev 붙은 이거는 개발용(노드몬 처럼 코드를 수정하면 자동적으로 nestjs가 재실행된다)
(NestJs의 docs)
https://docs.nestjs.com/first-steps
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea
docs.nestjs.com
'nestjs' 카테고리의 다른 글
| NestJS 요청-응답 라이프사이클 정리: Controller, Provider, Module 역할 (0) | 2026.03.12 |
|---|---|
| aws rds에서 postgresql db생성 후 nestjs에 typeorm으로 연결방법 (0) | 2026.01.10 |