๐Ÿง ๋ชจ๋‘์‹ธ์ธ

๐Ÿช C:onยท2021๋…„ 8์›” 19์ผ
1
post-thumbnail

๐Ÿ”จ ๊ธฐ์ˆ  ์Šคํƒ

git Docker MySql Node.js

๐Ÿ“‘ ์—…๋ฌด

  • ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์ถ”์ถœํ•˜๊ณ  ๋ชจ๋ธ๋งํ•˜๋Š” ๊ณผ์ •์— ๋งŽ์€ ํˆฌ์ž
  • DDD (Domain Driven Design)๋กœ ํŒจํ„ด๊ณผ ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ๋“ค์„ ํ™œ์šฉ
  • Typescript์™€ Nest๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ
  • AWS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ๊ฐ ์„œ๋น„์Šค๋ฅผ ์ปจํ…Œ์ด๋„ˆํ™” ํ•˜์—ฌ ECS ํ™˜๊ฒฝ์—์„œ ๋ฐฐํฌ ๋ฐ ์šด์˜

๐Ÿช“ ์ฃผ์š” ๊ธฐ์ˆ  ์Šคํƒ

  • NodeJS, Typescript, Nestjs
  • MySQL (AWS Aurora)
  • Jest
  • Docker, Docker-compose
  • AWS (ECS, SNS, SQS, API Gateway ๋“ฑ)
  • Terraform

๐Ÿ”“ ์ž๊ฒฉ์กฐ๊ฑด

  • RESTful API ๊ฐœ๋ฐœ ๊ฒฝํ—˜
  • SQL or NO-SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฒฝํ—˜
  • ๋‹ค๋ฅธ ์ง๋ฌด์˜ ํŒ€์›๊ณผ ์ ๊ทน์ ์œผ๋กœ ๋Œ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์˜์‚ฌ์†Œํ†ต ํƒœ๋„์™€ ๋Šฅ๋ ฅ
  • ์žฅ์•  ๋ฐœ์ƒ์‹œ ๋น ๋ฅธ ํ™•์ธ์ด ๊ฐ€๋Šฅ ํ•œ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ… ์Šคํ‚ฌ
  • ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋น ๋ฅด๊ฒŒ ๋ฐฐ์šฐ๊ณ  ํ˜ธ๊ธฐ์‹ฌ์ด ๋งŽ์œผ์‹  ๋ถ„

๐Ÿ” ์šฐ๋Œ€์‚ฌํ•ญ

  • AWS, GCP, Azure์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์‚ฌ์šฉ ๊ฒฝํ—˜
  • Typescript ๋ฐฑ์—”๋“œ ๊ฒฝ๋ ฅ
  • DDD (Domain Driven Design)์— ๊ฒฝํ—˜์ด ์žˆ๊ฑฐ๋‚˜, ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋ถ„
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์— ๊ด€์‹ฌ์ด ์žˆ๊ฑฐ๋‚˜ ์šด์˜ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๋ถ„
  • NestJS ํ˜น์€ Spring ์‚ฌ์šฉ ๊ฒฝํ—˜

๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ https://bit.ly/3sfOlzq



๐Ÿ”Ž ๋ถ„์„


๐Ÿ”ง๊ธฐ์ˆ 

โ“ DDD

DDD๋Š” Domain Driven Design ์œผ๋กœ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ์™€ ์–ธ์–ด๊ฐ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค.
๋„๋ฉ”์ธ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ ์ด๊ฒƒ์€ ๋งˆ์ผ€ํŒ…, ๊ตฌ๋งค, ์—ฐ๊ตฌ ๋“ฑ ์œ ์‚ฌํ•œ ์—…๋ฌด์˜ ์ง‘ํ•ฉ์„ ๋งํ•œ๋‹ค.

DDD๋Š” Strategic Design๊ณผ Tactical Design์œผ๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.

  • Strategic Design
    ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์˜ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์„ค๊ณ„ํ•˜์ž๋Š” ์ปจ์…‰์œผ๋กœ, ์ „๋žต์  ์„ค๊ณ„๋ฅผ ์œ„ํ•ด ์ƒํ™ฉ์„ ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ์œผ๋กœ ๊ณต์œ ํ•˜๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉ์ ๋ณ„๋กœ ์„œ๋น„์Šค๋ฅผ ๊ทธ๋ฃนํ•‘ํ•œ๋‹ค.
    ์ด๋ฒคํŠธ ์Šคํ† ๋ฐ์ด๋ž€ ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๋‚ด์—์„œ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ๋“ค์„ ์ฐพ์•„ Bounded context(๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉ์ ๋ณ„๋กœ ๊ทธ๋ฃนํ•‘ํ•œ๊ฒƒ)์„ ์‹๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์ด๋‹ค.
  • Tatical Design
    ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ตฌ์ฒด์ ์ธ ์„ค๊ณ„๋„์ดek.

โ“ TypeScirpt

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์–ธ์–ด์ด๊ธฐ์— ๋Ÿฐํƒ€์ž„์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค. ๋ฐ˜๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ปดํŒŒ์ผ์–ธ์–ด์—ฌ์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
์ฝ”๋“œ ์ž‘์„ฑ๋‹จ๊ณ„์—์„œ ํƒ€์ž…์„ ์ฒดํฌํ•ด ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฏธ๋ฆฌ ํƒ€์ž…์„ ๊ฒฐ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰์†๋„๊ฐ€ ๋งค์šฐ๋น ๋ฅด๋‹ค.
ํ•˜์ง€๋งŒ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ ๋งค๋ฒˆ ํƒ€์ž…์„ ๊ฒฐ์ •ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒˆ๊ฑฐ๋กญ๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ 100% ํ˜ธํ™˜๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด๋ผ๋ฉด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

โ“ NestJS

NodeJS๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์žˆ๋Š”๋ฐ ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด Express์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋˜ ํ•˜๋‚˜๋Š” NestJS์ด๋‹ค. NestJS๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ ๊ทน ๋„์ž…ํ•˜์—ฌ ์ง€์›ํ•˜๊ณ  ์žˆ๊ณ  ์ด ๋•๋ถ„์— ๊ฐœ๋ฐœ ์‹œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋“ค์„ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

Express๋Š” ๊ฐœ๋ฐœ ์‹œ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์ž์œ ๋„๊ฐ€ ๋†’์•„ ๊ฐœ๋ฐœ์ž๊ฐ€ ํˆด, ๊ธฐ์ˆ , ๋ฏธ๋“ค์›จ์–ด ๋“ฑ์„ ์ž์œ ๋กญ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž์œ ๋กœ์›€ ๋•Œ๋ฌธ์— ํŒ€๋งˆ๋‹ค ๊ตฌ์กฐ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋œ๋‹ค. NestJS๋Š” ํด๋ž˜์Šค๋“ค์ด ๊ฐ๊ฐ์˜ ์—ญํ• ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์˜ ํ†ต์ผ์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.


๐Ÿ›’ ๋‚˜์˜ ์ค€๋น„

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ Nest์˜ ๊ฒฝ์šฐ JS๊ฐ€ ๊ธฐ๋ฐ˜์ธ ๊ฒƒ๋“ค์ด๋ฏ€๋กœ JS ๊ณต๋ถ€๋ฅผ ํƒ„ํƒ„ํžˆ ํ•ด์•ผ๊ฒ ๋‹ค. ์–ด๋–ค ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ํšŒ์‚ฌ์— ๋“ค์–ด๊ฐˆ ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— NestJS๋ฅผ ์‚ฌ์šฉํ•˜๋˜, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์“ฐ๋˜, ๋ฆฌ์•กํŠธ๋ฅผ ์“ฐ๋˜ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์€ ๊ทธ ํšŒ์‚ฌ์— ์ž…์‚ฌํ•œ ํ›„์—์•ผ ๋ฌด์—‡์„ ๋ฐฐ์›Œ์•ผ ํ•  ์ง€ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ ํ•™์Šต์˜ ์†๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด JS๋ฅผ ํƒ„ํƒ„ํžˆ ํ•ด์„œ ์Šต๋“์„ ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ์€ ์ง€๊ธˆ ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๊ณ ์˜ ์ค€๋น„๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์œ„ํ•œ Jest๋‚˜ ๋ฐฐํฌ ๋ฐ ์šด์˜์„ ์œ„ํ•œ AWS๋ฅผ ๊ฐ„๋‹จํ•œ JS๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด์„œ ์‹ค์Šต์„ ํ•ด๋ณด๊ณ  Restful API ๊ตฌ์ถ•์€ Myrehabํ”„๋กœ์ ํŠธ๋ฅผ ๋ฆฌํŽ™ํ† ๋ง ํ•˜๋ฉด์„œ ๊ฒฝํ—˜์„ ์Œ“๋„๋ก ํ•˜์ž

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