2024. 1. 13. 14:40ใBack-End ์์ ์ค/Nest.js
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ ๊ฐ๋ ์ ๋ฆฌ
๐ฝ Back-end
๐ฆ Nest.js๋?
Nest.js๋ Node.js์ ์ ์ฐํจ์ ๊ทธ๋๋ก ๊ฐ์ง๋ฉด์ Framework(ํ๋ ์์ํฌ) ๋ด์ ์ ์ฉํ ๊ธฐ์ ์ ์ด๋ฏธ ๋ค์ ๊ตฌํํด ๋ ํ๋ ์์ํฌ์์.
๋ํ Nest.js๋ Kamil Myลliwiec์ ์ํด ๋ง๋ค์ด์ก๋๋ฐ, Java Script, Type Script๋ก Server(์๋ฒ) ์ธก Application(์ ํ๋ฆฌ์ผ์ด์
) ์ฆ, WAS(Web Application Server)๋ฅผ ์ํ Open source framework์์.
Nest.js์ ์ฃผ์ ์ฒ ํ์ Angular(์ฅ๊ทค๋ฌ) ํ๋ ์์ํฌ์์ ์๊ฐ์ ๋ฐ๊ฒ ๋๋๋ฐ, ์ด๋ Mudule(๋ชจ๋)ํ, ์์กด์ฑ ์ฃผ์
, Decorator(๋ฐ์ฝ๋ ์ดํฐ) ๋ฑ๊ณผ ๊ฐ์ ์ฅ๊ทค๋ฌ์ ์ฃผ์ ๊ฐ๋
์ Server Side(์๋ฒ ์ฌ์ด๋) ๊ฐ๋ฐ์ ์ ์ฉํ ๊ฒ์ด์์.
๋ํ, Express.js๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ณ , ํจ์จ์ ์ธ ์๋ฒ ์ฌ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์์ด์.
Nest.js๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ , ์ ์ง๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ๋๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ฉฐ, ๊ฐ๋ ฅํ ๋ชจ๋ ์์คํ
๊ณผ ํ๋ถํ ๊ธฐ๋ฅ ์
์ ์ ๊ณตํ์ฌ ๊ฐ๋ฐ์๋ค์ด ๊ฐํธํ๊ฒ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ ์ ์๋๋ก ์ง์ํ๊ณ ์์ด์.
Nest.js๋ Node.js์ ๊ธฐ๋ฐ์ ๋ Web(์น) API ํ๋ ์์ํฌ๋ก Expree.js ๋๋ Fastify ํ๋ ์์ํฌ๋ฅผ Wrapping(๋ํ)ํ์ฌ ๋์ํด์. Express.js์ Fastify๋ ๋ชจ๋ Node.js๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํ๋ ์์ํฌ์์.
์์์ Nest.js๋ Express.js ๊ธฐ๋ฐ์ ๋์๋ค๊ณ ์ด์ผ๊ธฐ ํ๋๋ฐ, Nest.js ๊ธฐ๋ณธ ์ค์น ์ Express.js๋ฅผ ์ฌ์ฉํ๊ฒ ๋ผ์.
Fastify๋ Express.js์์ Benchmark(๋ฒค์น๋งํฌ) ๊ฒฐ๊ณผ 2๋ฐฐ ์ ๋ณด ๋น ๋ฅธ ์๋๋ฅผ ๋ผ ์ ์๋ค๊ณ ๋ฐํ์ก์ด์.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ , Nest.js๊ฐ ๊ธฐ๋ณธ์ผ๋ก Fastify๋ฅผ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ Express.js๊ฐ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๊ณ , ์ ๋ง์ Middleware(๋ฏธ๋ค์จ์ด)๊ฐ Nest.js์ ํธํ๋๊ธฐ ๋๋ฌธ์ด์์.
Node.js๋ ์์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ณ , ๋ฐ์ด๋ ํ์ฅ์ฑ์ ๊ฐ์ง๊ณ ์์ง๋ง, ๊ณผ๋ํ ์ ์ฐํจ์ผ๋ก ์ธํด ๊ฒฐ๊ณผ๋ฌผ ํ์ง์ด ์ผ์ ํ์ง ์๊ณ , ์๋ง์ Library(๋ผ์ด๋ธ๋ฌ๋ฆฌ)๋ฅผ ์ฐพ๊ธฐ ์ํด ์ฌ์ฉ์๊ฐ ๋ง์ ์๊ฐ์ ํ ์ ํด์ผ ํ๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์์ด์.
์ด์ ๋ฐํด Nest.js๋ Database(๋ฐ์ดํฐ๋ฒ ์ด์ค), Object-relational mapping(ORM - ๊ฐ์ฒด ๊ด๊ณ ๋งคํ) Configuration(์ค์ ), ์ ํจ์ฑ ๊ฒ์ฌ ๋ฑ ์ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ฃผ๊ณ ์๋ต๋๋ค.
๋ํ, ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ค์นํ์ฌ ๊ธฐ๋ฅ์ ํ์ฅํ ์ ์๋ Node.js์ ์ฅ์ ๋ ์ ์ด๋ ค๋ด์์ด์.
Nest.js๋ ๋ชจ๋, Component(์ปดํฌ๋ํธ) ๊ธฐ๋ฐ์ผ๋ก Programming(ํ๋ก๊ทธ๋๋ฐ)์ด ๊ฐ๋ฅํ์ฌ ์ฌ ์ฌ์ฉ์ฑ์ ๋์์ด์.
๋ํ, Spring Boot(์คํ๋ง ๋ถํธ)์ ๊ฐ์ด Inversion of Control(IoC - ์ ์ด์ ์ญ์ ), Dependency Injection(DI - ์์กด์ฑ ์ฃผ์
), Aspect-oriented Programming(AOP - ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ)๊ณผ ๊ฐ์ ๊ฐ์ฒด ์งํฅ ๊ฐ๋
์ ๋์
ํ์์ด์.
์ด ๋๋ฌธ์ ์ด๋ค ๊ฐ๋ฐ์๋ค์ Node ๊ณ์ ์คํ๋ง ๋ถํธ๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ต๋๋ค.
Nest.js๋ Type Script๋ฅผ ๊ธฐ๋ณธ ์ธ์ด๋ก ์ฑํํ์ฌ Type Script๊ฐ ๊ฐ์ง Type System(ํ์
์์คํ
)์ ์ฅ์ ์ ๋๋ฆด ์ ์์ด์.
์น ํ๋ ์์ํฌ๊ฐ ๊ฐ์ถฐ์ผํ ํ์ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ์์.
โ
์ต์ ECMA Script ์ง์
โ
Type Script (์ ํ ์ฌํญ์ด๋, ์ฌ์ฉ ์ถ์ธ๊ฐ ๋์ด๋๋ ์ค)
โ
Command Query Responsibility separation(CQRS)
โ
ํธ๋ฆฌํ ์ค์
โ
Interceptor(์ธํฐ์
ํฐ)
โ
๋ค์ํ Middleware(๋ฏธ๋ค์จ์ด)
โ
Scheduling(์ค์ผ์ฅด๋ง)
โ
Logging(๋ก๊น
)
โ
Testing(ํ
์คํ
)
โ
API Document (API ๋ฌธ์ํ)
โ
ORM
Nest.js๋ ์ด ์ค ๋๋ถ๋ถ์ ํ๋ ์์ํฌ์ ๋ด์ฅํ๊ณ ์๊ณ , ๋ด์ฅํ์ง ์์ ๊ธฐ๋ฅ ์ญ์ ์ฝ๊ฒ ๋ค๋ฅธ ๋ชจ๋์ ๊ฐ์ ธ๋ค ์ธ ์ ์๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ด์.
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."
๐ง ์ฐธ๊ณ ์๋ฃ
"์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ต๋๋ค."