NestJS

์ •์Šน์›ยท2023๋…„ 3์›” 29์ผ
0
post-thumbnail
post-custom-banner

๐Ÿ“’ ๋ชฉ์ฐจ

๐Ÿ“Œ NestJS๋ž€?
๐Ÿ“Œ 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)์„ ๋†’์ธ๋‹ค.

post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€