Node.js ๋ฐฑ์๋ ํ๋ก๊ทธ๋๋ฐ,
์ฝ๊ณ ์ ์ฐํ NestJS๋ก ์์ํ์ธ์!
๋
ธ๋ ๋ฐฑ์๋, ์ ๋ค์คํธ์ผ๊น์?

๋ ์ค๋ฅด๋ Node.js ํ๋ ์์ํฌ, NestJS๋ฅผ ํตํด
ํ ๋จ๊ณ ๋์๊ฐ ๋ฐฑ์๋ ๊ฐ๋ฐ์
๊ฒฝํํ ์ ์์ต๋๋ค.
What is NestJS?
NestJS๋ TypeScript(ํ์
์คํฌ๋ฆฝํธ)๋ฅผ ์ง์ํ๋ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ Node.js์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
ํ๋ ์์ํฌ์
๋๋ค. Express ๋๋ Fastify์ ๊ฐ์ ๊ฐ๋ ฅํ ์๋ฒ ํ๋ ์์ํฌ ์์ ๊ณ ๋ํ๋ ์ํคํ
์ณ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง์ดํฌ๋ก์๋น์ค(Microservice)๋ก ์ฝ๊ฒ ๋ถํ ํ ์ ์์ผ๋ฉฐ, ํ์ฅ์ฑ์ด ๋๊ณ ์ ์ง ๋ณด์๊ฐ ์ฌ์ด ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฝ๊ฒ ๊ฐ๋ฐํ ์ ์์ต๋๋ค.
Why is NestJS?
NestJS์ ๊ธฐ์กด์ Node.js ํ๋ ์์ํฌ์ธ Express(์ต์คํ๋ ์ค)์ ํฐ ์ฐจ์ด๋ ์ํคํ
์ฒ ๊ตฌ์กฐ๋ฅผ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ค๋ ์ ์
๋๋ค.
์์ Express๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์ ํ์
์ ํ๋ ๊ณผ์ ์ ์๊ฐํด ๋ด
์๋ค. ๊ฐ๋ฐ์๋ง๋ค Express๋ฅผ ์ฌ์ฉํ๋ ์ํคํ
์ณ ํจํด์ ์ ๋ง ๋ค์ํฉ๋๋ค. ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ๊ฐ๋ฐ์ ๋๋ ํ๋ง๋ค ํ๋ก์ ํธ ๊ตฌ์กฐ์ ์คํ์ผ์ด ๋ค๋ฅด๋ฉด ํ์
๊ณผ์ ์ ๋๋ ์ํต ๋น์ฉ์ด ์ฆ๊ฐํฉ๋๋ค. ์ด๋ ์์ฐ์ฑ ์ ํ์ ์ ์ง๋ณด์์ ์ด๋ ค์์ผ๋ก ์ด์ด์ง๋๋ค
NestJS๋ ์ด๋ฐ ์ํคํ
์ฒ์ ๊ตฌ์กฐ์ ๋์์ธ ํจํด์ ํ๋ ์์ํฌ์์ ์ ๊ณตํฉ๋๋ค. ๋๋ฌธ์ ๊ฐ ๊ฐ๋ฐ์๋ค์ ์ํคํ
์ฒ๋ฅผ ํต์ผํ๊ณ ์ํต ๋น์ฉ์ ์ ๊ฐํ ์ ์์ผ๋ฉฐ, ํ์ฅ์ฑ ์๊ณ ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ํ ์ ์์ต๋๋ค.

๋ํ ๊ธฐ์กด์ Express์์ ์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๊ทธ๋๋ก NestJS ์ํคํ
์ฒ ์์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฟ๋ง ์๋๋ผ, ์ฑ๋ฅ ํฅ์์ ์ํด Fastify๋ฅผ ๋ถ๋ถ๋ณ๋ก ์ฌ์ฉํ ์๋ ์์ ๋งํผ์ ํธํ์ฑ๋ ์ ๊ณตํฉ๋๋ค.
์ด๋ฐ ๋ค์ํ ์ด์ ๋์ ๋ง์ ๊ฐ๋ฐ์๋ค์ด NestJS์ ์ฃผ๋ชฉํ๊ณ ์์ต๋๋ค.
npmtrends์์ ๋ถ์ํ NestJS ํธ๋ ๋
ํํํ ๊ฐ๋ฐ์ ์ํ
NestJS์ ๋ชจ๋ ๊ฒ.
ํ๋, NestJS๋ฅผ ์ํ Express ์ฝ์ด ๊ฐ๋
์ค๋ช
!
์ด๋ ๊ฒ๋ ์ธ๊ธฐ๋ฅผ ๋๊ณ ์๋ NestJS๊ฐ ๊ถ๊ธํ์ ๊ฐ์? NestJS๋ฅผ ์๋ ค๋ฉด Express๋ฅผ ๋จผ์ ๋ฐฐ์์ผ ํ๋ค๋ ๋ง์ ๋ค์ด๋ณด์
จ์ ๊ฒ๋๋ค. ๊ธฐ์กด ํ๋ ์์ํฌ๋ณด๋ค ๋ ๋์ ํ๋ ์์ํฌ๋ฅผ ๋ฐฐ์ฐ๋ ๋ฐ ์์ด์ ์ง์
์ฅ๋ฒฝ์ฒ๋ผ ๋๊ปด์ง๊ธฐ ๋ง๋ จ์ด์ฃ .
์ด ๊ฐ์์์๋ NestJS๋ฅผ ์์๋ณด๊ธฐ์ ์์ NestJS๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ํ Express ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฝ์ดํ API๋ฅผ ์ง์ ๋ง๋ค๋ฉด์, NestJS์ ์ํคํ
์ฒ๋ฅผ Express๋ฅผ ํตํด 0๋ถํฐ ๋ง๋ค์ด๋ด
๋๋ค.
๋, ๋จ์ํ ๊ธฐ๋ฅ ์์ฃผ์ ๊ฐ์๋ Nope,
๊ฐ์ฒด์งํฅ + ๋์์ธ ํจํด์ ๋ํ ์ดํด๊น์ง.
๋จ์ํ๊ฒ NestJS์ ๊ธฐ๋ฅ์ ๋ํด์๋ง ์๋ ค๋๋ฆฌ์ง ์์ต๋๋ค. ๋์ NestJS ๊ตฌ์กฐ๋ฅผ ํ๋ํ๋ ์ค๋ช
ํด๋๋ฆฌ๋ฉด์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ, ๋ค์ํ ๋์์ธ ํจํด๋ ์ป์ด๊ฐ์ค ์ ์๋๋ก ๊ฐ์๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค.
์
, ๊ณต์ ๋ฌธ์์ ๋ด์ฉ์ด ๋ด๊ธด ์์น๊น์ง ์๋ ค๋๋ฆฝ๋๋ค.
๊ฐ์์์ ์ค๋ช
ํ๋ NestJS ๊ด๋ จ ๊ฐ๋
์ ๋ชจ๋ ํ๋ํ๋ ๊ณต์ ๋ฌธ์๋ฅผ ์ง์ด๋๋ฆฌ๋ฉด์ ์๋ ค๋๋ฆฝ๋๋ค.
์ ๊ฐ ์๋ ค๋๋ฆฐ ๊ฐ๋
์์ ๋ ํ์ฅํด ๋๊ฐ๊ฑฐ๋, ์ต์
์ ์ถ๊ฐํ๊ณ ์ถ์ผ์ค ๋ ๊ฐ์๋ฅผ ๋ฐ๋ผ ํผ์์๋ ๋น ๋ฅด๊ฒ ์์ฉํ ์ ์์ต๋๋ค.
์ง์ ๊ฐ๋ฐํด ๋ณด์ธ์!
์ค์ ํ๋ก์ ํธ 1: ๊ณ ์์ด ์ ๋ณด ์ปค๋ฎค๋ํฐ
NestJS ๊ตฌ์กฐ๋ฟ๋ง ์๋๋ผ ๊ฐ์ข
์๋น์ค์ ๊ณตํต์ ์ผ๋ก ์กด์ฌํ๋ ํต์ฌ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ โ๊ณ ์์ด ์ ๋ณด ์ปค๋ฎค๋ํฐโ ์ค์ ํ๋ก์ ํธ API๋ฅผ ํด๋ก ์ฝ๋ฉํฉ๋๋ค. ์ง์ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํด ๋ณด๋ฉด์ NestJS๋ฅผ ์ค์ ์ค๋ฌด์ ์ ์ฉํ ์ ์๋๋ก ๋์๋๋ฆฝ๋๋ค.
โ๊ณ ์์ด ์ ๋ณด ์ปค๋ฎค๋ํฐโ ์ค์ ํ๋ก์ ํธ
์ค์ ํ๋ก์ ํธ 2: ๋๋ค ์ฑํ
์น ์ฑ (updated!)
NestJS ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง์ ์ฌ์ฉํ์ฌ MVC ํจํด์ ์ค์๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR)์ ์ดํด, ์์ผ ํ๋ก๊ทธ๋๋ฐ, ์ด๋ฒคํธ ์ค๊ณ, MVC ๋์์ธ ํจํด ๋ฑ ๋ค์ํ ๊ฐ๋
์ ์ป์ด๊ฐ ์ ์์ต๋๋ค. NestJS ํ๋๋ก ํ์คํ ๊ฐ๋ฐ๊น์ง!
โ๋๋ค ์ฑํ
์น์ฑโ ์ค์ ํ๋ก์ ํธ
ํ๋ก์ ํธ๋ฅผ ๋ฐ๋ผํ๋ฉฐ ์ตํ๋
์ง์ง ์ค๋ฌด ๋
ธํ์ฐ!
โ
๋ฐฑ์๋ ๊ฐ๋ฐ์์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํ์
์๋๋ฆฌ์ค.
์ค์ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ API๋ง์ ๋ง๋๋ ๊ฒ ์๋๋ผ ํ๋ก ํธ์๋ ์ฝ๋ ๋ํ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์์์ ํจ๊ป ์์
ํ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ๊ณ ์๋๋ฆฌ์ค๋ฅผ ๊ทธ๋ฆฌ๋ฉด์ ์ค๋ช
ํด๋๋ฆฝ๋๋ค. ์ด๋ก์จ ์ค๋ฌด์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ํ์
ํ ๋ ์๊ธธ ์ ์๋ ๋ฌธ์ ์ ์ ๋ํ ํด๊ฒฐ์ฑ
๋ ์ป์ด๊ฐ์ค ์ ์์ต๋๋ค.
โ
ํ๋ก์ ํธ ๋ฐฐํฌ์ ์๋ฒ ์ด์๊น์ง!
ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ๋ง ํ๋ ๊ฒ์ด ์๋๋ผ AWS ํด๋ผ์ฐ๋ ์ปดํจํ
๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๋ง๋ ์๋น์ค๋ฅผ ์ค์ ๋ก ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ๋ ์๋ ค๋๋ฆฝ๋๋ค.
์ด๋ค ๊ธฐ์ ์ ๋ฐฐ์ฐ๋์?
NestJS
๋ค์คํธ
Express
์ต์คํ๋ ์ค
MongoDB
๋ชฝ๊ณ DB
Mongoose
๋ชฝ๊ตฌ์ค
Node.js
๋
ธ๋
PM2, AWS
์๋ฒ ์ด์
์ด๋ฐ ๋ถ๋ค๊ป
์ถ์ฒํฉ๋๋ค.
Node.js(๋
ธ๋)
๋ฐฑ์๋ ํ๋ก๊ทธ๋๋ฐ์
์
๋ฌธํ๊ณ ์ถ์ ๋ถ
NestJS๋ฅผ ๋ฐฐ์ฐ๊ณ
์ถ์๋ฐ ์ง์
์ฅ๋ฒฝ์ด
๋์์ ํ๋ค์๋ ๋ถ
Express ํ๋ ์์ํฌ์
๋ถ์กฑํจ์ ์ฑ์ฐ๊ณ
์ถ์ผ์ ๋ถ
์ค์ ํ๋ก์ ํธ๋ก
NestJS๋ฅผ ์ค๋ฌด์
์ ์ฉํ๊ณ ์ถ์ ๋ถ
์ด๋ฐ ๋ถ๋ค๊ป๋ ๋์์ด ๋ฉ๋๋ค.
โ
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ, ๋์์ธ ํจํด์ ๋ฐฐ์ฐ๊ณ ์ถ์ ๋ถ
โ
๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ฒฌ๊ณ ํ๊ฒ ํ๊ณ ์ถ์ ๋ถ
๊ฐ์๋ ์์ผ๋ก๋
๊ณ์ ์
๋ฐ์ดํธ๋ฉ๋๋ค.
๊ธฐ์ ์ ๊ณ์ ๋ณํํฉ๋๋ค. ๊ณผ๊ฑฐ์ ์์ฑํ๋ ์ฝ๋๋ฅผ ํ์ฌ์์๋ ๊ณ ์น ๊ฒ์ด ์๋ค๋ฉด, ๊ทธ๋์ ๋ฐฐ์ด ๊ฒ์ด ์๋ค๋ ๋ง์ด ์์ต๋๋ค. NestJS ๋ฒ์ ์ด ์
๊ทธ๋ ์ด๋๋๋ฉด ๋ ์ข์ ๊ธฐ์ ์ ์ตํ์ค ์ ์๋๋ก ์
๊ทธ๋ ์ด๋๋ ๋ฒ์ ์ ๋ง์ถ์ด ๊ฐ์๋ฅผ ๋ค์ ์
๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.