์๋ ํ์ธ์. dev_writer์ ๋๋ค.
์ต๊ทผ ํ์ฌ์์ ์ฝํ๋ฆฐ ๊ธฐ๋ฐ ์คํ๋ง ๋ฐฑ์๋ ์๋น์ค๋ฅผ, ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ Nest.js ๋ฐฑ์๋ ์๋น์ค๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์ ๋ฌด๋ฅผ ์งํํ๊ฒ ๋๋ฉด์ ์๋ ์ ์ ๊น ์ฌ์ฉํ๋ Nest.js๋ฅผ ๊ณต๋ถํด ๋ณด๊ณ ์ ๊ธ์ ๊ธฐ๋กํ๊ฒ ๋์์ต๋๋ค.
์ง๊ธ ์์ฑํ๊ณ ์๋ Spring AI ์๋ฆฌ์ฆ์ฒ๋ผ, ์ด๋ฒ์๋ Nest.js์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ฒ์ญํ๋ฉด์ ๋ธ๋ก๊ทธ์ ๊ธฐ๋กํ ์์ ์ ๋๋ค.
์ด๋ฒ ์๊ฐ์๋ Introduction์ ๋ํ ๋ด์ฉ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
์๊ฐ
์๊ฐ
Nest(NestJS)๋ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ Node.js ์๋ฒ ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ํ๋ ์์ํฌ์ ๋๋ค. ์ ์ง์ ์ธ JavaScript๋ฅผ ์ฌ์ฉํ๋ฉฐ, TypeScript๋ก ์์ฑ๋์ด ์ด๋ฅผ ์๋ฒฝํ ์ง์ํ์ง๋ง, ์์ JavaScript๋ก๋ ๊ฐ๋ฐํ ์ ์์ต๋๋ค. ๋ํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP), ํจ์ํ ํ๋ก๊ทธ๋๋ฐ(FP), ํจ์ํ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ(FRP)์ ์์๋ค์ ๊ฒฐํฉํ๊ณ ์์ต๋๋ค.
๋ด๋ถ์ ์ผ๋ก๋ Express(๊ธฐ๋ณธ๊ฐ)์ ๊ฐ์ ๊ฐ๋ ฅํ HTTP ์๋ฒ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ต์ ์ ๋ฐ๋ผ Fastify๋ก ๊ตฌ์ฑํ ์๋ ์์ต๋๋ค!
Nest๋ ์ด๋ฌํ ์ผ๋ฐ์ ์ธ Node.js ํ๋ ์์ํฌ(Express/Fastify) ์์ ํ๋์ ์ถ์ํ ๊ณ์ธต์ ์ ๊ณตํ๋ฉด์๋, ๋์์ ํด๋น ํ๋ ์์ํฌ์ API์ ์ง์ ์ ๊ทผํ ์ ์๋๋ก ํด์ค๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๊ธฐ๋ฐ ํ๋ซํผ์์ ์ ๊ณตํ๋ ์๋ง์ ์๋ํํฐ ๋ชจ๋๋ค์ ์์ ๋กญ๊ฒ ํ์ฉํ ์ ์์ต๋๋ค.
์ฒ ํ
์ต๊ทผ ๋ช ๋ ๊ฐ Node.js ๋๋ถ์ JavaScript๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋์์ ์น์ "๊ณตํต ์ธ์ด (lingua franca)"๊ฐ ๋์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ ๋์ด๊ณ ๋น ๋ฅด๊ณ ํ ์คํธ ๊ฐ๋ฅํ๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ํด์ฃผ๋ Angular, React, Vue ๊ฐ์ ๋ฉ์ง ํ๋ก์ ํธ๋ค์ ํ์์ผ๋ก ์ด์ด์ก์ต๋๋ค. ๊ทธ๋ฌ๋ Node(๋ฐ ์๋ฒ ์ฌ์ด๋ JavaScript)๋ฅผ ์ํ ํ๋ฅญํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋์ฐ๋ฏธ, ๋๊ตฌ๋ค์ ๋ง์ด ์กด์ฌํ์ง๋ง, ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ผ๋ ํต์ฌ ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํด ์ฃผ๋ ๋๊ตฌ๋ ์์์ต๋๋ค.
Nest๋ ์ ํ๋ฆฌ์ผ์ด์ ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ ๊ณตํ์ฌ, ๊ฐ๋ฐ์์ ํ์ด ๋งค์ฐ ํ ์คํธ ๊ฐ๋ฅํ๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ๋์จํ๊ฒ ๊ฒฐํฉ๋๊ณ , ์ฝ๊ฒ ์ ์ง ๊ด๋ฆฌํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋๋ก ๋์์ค๋๋ค. ์ด ์ํคํ ์ฒ๋ Angular์์ ํฐ ์๊ฐ์ ๋ฐ์์ต๋๋ค.
์ค์น
์์ํ๋ ค๋ฉด Nest CLI๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์ค์บํด๋ฉ (scaffolding: ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ๋ผ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑํด ์ฃผ๋ ๊ธฐ๋ฅ)ํ๊ฑฐ๋ ์คํํฐ ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ ์ ์์ต๋๋ค(๋ ๋ฐฉ๋ฒ ๋ชจ๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์์ฑํฉ๋๋ค).
Nest CLI๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ์ค์บํด๋ฉ ํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ค์ ์คํํ์ธ์. ์ด ๋ช ๋ น์ด๋ ์๋ก์ด ํ๋ก์ ํธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ๊ณ , ํด๋น ๋๋ ํฐ๋ฆฌ์ Nest์ ํต์ฌ ํ์ผ๋ค๊ณผ ์ง์ ๋ชจ๋๋ค์ ์ด๊ธฐํํ์ฌ ๊ด๋ก์ ์ธ ๊ธฐ๋ณธ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ๋ง๋ญ๋๋ค. Nest CLI๋ฅผ ์ฌ์ฉํ ์ ํ๋ก์ ํธ ์์ฑ์ ์ฒ์ ์ฌ์ฉ์์๊ฒ ๊ถ์ฅ๋๋ ๋ฐฉ์์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ดํ์ First Steps ์น์ ์์ ์ด ๋ฐฉ์์ ๊ณ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
$ npm i -g @nestjs/cli
$ nest new project-name
ํํธ
๋ณด๋ค ์๊ฒฉํ ๊ธฐ๋ฅ ์ธํธ๋ก ์๋ก์ด TypeScript ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ค๋ฉด nest new ๋ช ๋ น์ด์ --strict ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ์ธ์.
๋์
๋๋, Git์ ์ฌ์ฉํ์ฌ TypeScript ์คํํฐ ํ๋ก์ ํธ๋ฅผ ์ค์นํ ์๋ ์์ต๋๋ค.
$ git clone https://github.com/nestjs/typescript-starter.git project
$ cd project
$ npm install
$ npm run start
ํํธ
Git ํ์คํ ๋ฆฌ ์์ด ์ ์ฅ์๋ฅผ ํด๋ก ํ๊ณ ์ถ๋ค๋ฉด degit์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ๋ฅผ ์ด๊ณ http://localhost:3000/ ์ผ๋ก ์ด๋ํ์ธ์.
์คํํฐ ํ๋ก์ ํธ์ JavaScript ๋ฒ์ ์ ์ค์นํ๋ ค๋ฉด ์ ๋ช ๋ น์ด ์ํ์ค์์ javascript-starter.git์ ์ฌ์ฉํ์ธ์.
๋ํ, ์ฝ์ด ๋ฐ ์ง์ ํจํค์ง๋ฅผ ์ค์นํ์ฌ ์ฒ์๋ถํฐ ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ํ๋ก์ ํธ์ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ํ์ผ๋ค์ ์ง์ ๊ตฌ์ฑํด์ผ ํ๋ค๋ ์ ์ ์ผ๋์ ๋์ธ์. ์ต์ํ ํ์ํ ์์กด์ฑ์ @nestjs/core, @nestjs/common, rxjs, reflect-metadata์ ๋๋ค. ์ฒ์๋ถํฐ ์ต์ํ์ NestJS ์ฑ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ๋ค์ ์งง์ ๊ธ์ ์ฐธ๊ณ ํ์ธ์: 5๋จ๊ณ๋ก ๋ง๋๋ ์ต์ ๊ตฌ์ฑ์ NestJS ์ฑ!
Reference
'๐ ๊ณต์ ๋ฌธ์ ๋ฒ์ญ > Nest.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Nest.js] Overview - Interceptors, Custom decorators (0) | 2025.07.13 |
---|---|
[Nest.js] Overview - Pipes, Guards (0) | 2025.07.08 |
[Nest.js] Overview - Middleware, Exception filters (2) | 2025.07.07 |
[Nest.js] Overview - Providers, Modules (0) | 2025.07.05 |
[Nest.js] Overview - First Steps, Controllers (0) | 2025.07.05 |