๐ NestJS๋?
๐ NestJS๋?
NestJS๋ TypeScript(ํ์ ์คํฌ๋ฆฝํธ)๋ฅผ ์ง์ํ๋ย ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํย Node.js์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ์ด๋ค.
๊ฐ์ฒด์งํฅํ๋ก๊ทธ๋๋ฐ-OOP (Object Oriented Programming), FP (Functional Programming) ๋ฐ FRP (Functional Reactive Programming) ์์๋ฅผ ๊ฒฐํฉํ๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด, ์ต๊ทผ ๋ช ๋ ๊ฐ Node.js ๋๋ถ์ Javascript๋ ํ๋ก ํธ, ๋ฐฑ์๋ ๋ชจ๋๋ฅผ ์ํ ์น์ย "๋ง๊ตฌ์ ํ๋์นด"๊ฐ ๋์๊ณ ์ด๋ก ์ธํด Vue, React, Angular์ ๊ฐ์ ํ๋ก์ ํธ๊ฐ ์๊ฒจ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ด ํฅ์๋๊ณ ๋น ๋ฅด๊ณ , ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ฉฐ ํ์ฅ์ฑ์ด ๊ฐ๋ฅํ frontend application์ ๋ง๋ค ์ ์๊ฒ ๋์๋ค.
๊ทธ๋ฌ๋ Node์ Server์ Javascript๋ฅผ ์ํ ํ๋ฅญํ ๋ชจ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์กด์ฌํ์ง๋ง, Architecture์ ์ฃผ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ ํ๊ณ์ ์ด ์๋ค.
Node.js๋ก Backend๋ฅผ ๋ง๋๋ ๊ฒ์ ๋ง์น ๋ ๊ณ ๋ฅผ ์กฐ๋ฆฝํ๋ ๊ฒ๊ณผ ์ ์ฌํ๋ค. ๋ ๊ณ ์ฒ๋ผ ์กฐ๋ฆฝํ ์ ์๋ ๋ถํ์ด ์๊ณ , ๊ทธ ์์ ๋ถํ๋ค์ ์ฐจ๊ทผ์ฐจ๊ทผ ์กฐ๋ฆฝํ๋ค ๋ณด๋ฉด ๊ฑฐ๋ํ ์์ฑํ์ ๋ง๋ค ์ ์๋ค.
Node.js๋ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋์ ํ์ผ์์ ์์ํด์ ์ ์ฐจ ์ ์ฐจ ์ปค์ง๊ฒ ๋๋ค. ๊ท์น๋, ์ ์ฝ๋ ์์ด ์์ ๋กญ๊ฒ ํ ์ ์์ผ๋ฉฐ, 0์์๋ถํฐ ๋ง๋ค์ด ๊ฐ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ฒ์ ๋ฐฐ์ธ ์ ์๋ค.
ํ์ง๋ง, ๋ฌธ์ ๋ ๋๋ฌด ์ ์ฝ์ด ์๊ณ , ์์ ๋กญ๋ค๋ ๊ฒ์ด๋ค.
๋๋ก๋ ๊ท์น์ด๋ ์ ์ฝ, ์ฆ ๊ตฌ์กฐ์ ํ๋ ์์ํฌ๊ฐ ํ์ํ ๋๊ฐ ์๋ค.
์๋ฅผ ๋ค์ด ํ์ด์ฌ์๋ ์ฅ๊ณ ๋ผ๋ ํ๋ ์์ํฌ๊ฐ ์๊ณ Java๋ Spring์ด ์๋ค. ํ์ง๋ง Node.js์๋ ๊ท์น์ด ์๊ณ , ์ด๋ค ํจํด์ ๋ฐ๋ผ์ผ ํ ์ง๋ ๋ชจ๋ฅด๋ฉฐ ์ฌ์ฉ์๊ฐ ์ ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
์ด๋ฐ ์์ ๋ก์์ ์ข์ ์ ๋ ๋ง์ง๋ง, ํ์ ์ ์งํํ ๊ฒฝ์ฐ ์ด๋ ค์์ด ์๊ธด๋ค.
๊ฐ๋ฐ์๋ง๋ค ๋ค์ํ Architecture ํจํด์ ๊ฐ์ง๊ณ ์๊ณ , ํ๋ก์ ํธ์ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ๊ฐ์ธ์ ๊ตฌ์กฐ์ ์คํ์ผ์ ๋ค๋ฆ์ผ๋ก ์ธํด ํ์ ๊ณผ์ ์ ๋๋ ์ํต ๋น์ฉ์ด ์ฆ๊ฐํ๋ค.
์ด๋ฌํ ์ฐจ์ด๋ ์์ฐ์ฑ ์ ํ์ ์ ์ง ๋ณด์์ ์ด๋ ค์์ผ๋ก ์ด์ด์ง๊ฒ ๋๋ค.
NestJS๋ ๊ฐ๋ฐ์์ ํ์ด ๊ณ ๋๋ก ํ
์คํธ ๊ฐ๋ฅํ๊ณ , ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ, ๋์จํ๊ฒ ๊ฒฐํฉ๋๊ณ ์ ์ง๊ด๋ฆฌ๊ฐ ์ฌ์ด ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์๋ย ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์
์ํคํ
์ฒ
๋ฅผ ์ ๊ณต๋ค.
๊ทธ ์ธ์๋ย TypeScript๊ธฐ๋ฐ์ Framework
์ด๋ฉฐย Dependency Injection(์์กด์ฑ์ฃผ์
)
,ย Inversion of Control(์ ์ด์ ์ญ์ )
,ย Module
์ ํตํ ๊ตฌ์กฐํ ๋ฑ ์์ฐ์ฑ์ ์ฉ์ดํ๋ค.
NestJS๋ย TypeScript๋ฅผ ์ ๊ทน์ ์ผ๋ก ๋์ ํ๋ฉด์ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ์ ๋ฐ์ ๊ฐ๋ฅํ ์ค๋ฅ๋ค์ ์ฌ์ ์ ๋ฐฉ์งํ ์ ์๋ค.
๋ํ ์ธ๋ถ์ ์ธ Module๋ก ๋๋์ด์ ธ ์๊ธฐ ๋๋ฌธ์ ๋ ๋ฆฝ์ ์ธ Unit Test๋ฅผ ์ฝ๊ฒ ์์ฑ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ๋์ด ์๋ค.
NestJS๋ Module Class๋ฅผ ์ง์ํ๋ฉฐ, ๊ฐ Module์ ๋น์ทํ ๊ธฐ๋ฅ๊ณผ ๊ฐ๋ ๋ค์ Class ํ ๊ณณ์ ๋ด์ ์บก์ํํ๊ณ ์๋ก Import๊ฐ ๊ฐ๋ฅํ๋๋ก ๊ตฌํ๋์ด ์๋ค.
์ด๋ฌํ Module ๊ตฌ์กฐ๋ Architecture๋ฅผย ์กฐ์ง์ (Organize)
์ผ๋ก ๊ฐ์ ธ๊ฐ๊ฒ ํ๊ณ ย ๋์จํ ๊ฒฐํฉ(Loose Coupling)
์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ดย ํ์ฅ์ฑ(Extensible)
๊ณผย ํ
์คํธ ๊ฐ๋ฅ์ฑ(Testable)
์ ๋์ธ๋ค.