/be04-2nd-if-1OR1-Tempository

๐Ÿ˜Ž๊ณฝ์œค๊ฒฝ ๐ŸŽธ์ด๊ธฐ์—ฐ ๐Ÿฐ์ด์˜ˆ์› ๐Ÿ˜บ์ž„์›์žฌ ๐Ÿถ์ •์šฐ์ง„

Primary LanguageJava

๐Ÿ’ป TEAM if(1=1)



๐Ÿ˜Ž๊ณฝ์œค๊ฒฝ     ๐ŸŽธ์ด๊ธฐ์—ฐ     ๐Ÿฐ์ด์˜ˆ์›     ๐Ÿ˜บ์ž„์›์žฌ     ๐Ÿถ์ •์šฐ์ง„     



๐Ÿ“š Tech Stack ๐Ÿ“š

โœจ Platforms & Languages โœจ



๐Ÿ›  Tools ๐Ÿ› 




๐Ÿ—“๏ธ ์ „์ฒด ํ”„๋กœ์ ํŠธ ์ผ์ •

2024.02.26 ~ 2024.03.11(WBS)




๐Ÿ“Œ ๋ชฉ์ฐจ

1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

2. ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜

3. DDD

4. CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„

5. ๊ฐœ์„ ์‚ฌํ•ญ ๋ฐ ํšŒ๊ณ 





1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

์•„์ด๋””์–ด ๊ธฐํš

  • ๋ฌธ์ œ ์ธ์‹: ๋Œ€ํ•™์ƒ ๋˜๋Š” ์ทจ์—… ์ค€๋น„์ƒ๋“ค์ด ๊ฐ์ž ๋ณธ์ธ์˜ ์ง๋ฌด ๋ถ„์•ผ ์ „๋ฌธ ์ด๋ ฅ์„ ๋งŒ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์— ์–ด๋ ค์›€์ด ๋งŽ์Œ.
  • ๋ฌธ์ œ ์›์ธ: ์ทจ์—…์„ ์ค€๋น„ํ•˜๋Š” ๋Œ€ํ•™์ƒ๋“ค์€ ํ˜„์—…์—์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ์•Œ๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์ด๋ผ ํŒ๋‹จ.
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ ์ œ์•ˆ: ํ”„๋กœ์ ํŠธ ์šด์˜๊ณผ์ •์„ Template์œผ๋กœ ์ œ๊ณตํ•˜๊ณ , ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ ์‹œ, ๋ฌธ์„œ๋กœ ์ €์žฅํ•˜์—ฌ ์ด๋ ฅ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ œ๊ณต

ํ”„๋กœ์ ํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค

์ทจ์ค€์ƒ ๋ฐ ๋Œ€ํ•™์ƒ ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐ ๋ฌธ์„œ(WBS, ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ, ํ…Œ์ด๋ธ” ์ •์˜์„œ ๋“ฑ) ์ž‘์„ฑ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”Œ๋žซํผ

  • ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ์‹œ ํ•„์š”ํ•œ ๋ฌธ์„œ ์ž‘์„ฑ์„ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ์ œ๊ณตํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘์„ ์šฉ์ดํ•˜๊ฒŒ ํ•จ
  • ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ๊ณผ ํŒ€ ํ˜‘์—… ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ํšจ์œจ์ ์ธ ํ”„๋กœ์ ํŠธ ์ง„ํ–‰์„ ์ง€์›ํ•จ
  • ํŒ€์žฅ ๋˜๋Š” ํ”„๋กœ์ ํŠธ ๊ฐœ์„ค์ž๊ฐ€ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
  • ํ”„๋กœ์ ํŠธ ๋‚ด ์ฐธ์—ฌ ํšŒ์› ์ดˆ๋Œ€
  • ํ”„๋กœ์ ํŠธ๋กœ ์ฐธ์—ฌํ•˜๋Š” ํšŒ์›์€ ์ตœ์ดˆ์— ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์—†์Œ(๊ด€๋ฆฌ์ž๊ฐ€ ๊ถŒํ•œ ์„ค์ • ๊ฐ€๋Šฅ)
  • ํ”„๋กœ์ ํŠธ ํ•˜์œ„ Template ์‚ฌ์šฉ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ง„ํ–‰
  • ํ™•์žฅ ์˜ˆ์ • ๊ธฐ๋Šฅ: RESUME, ์ปค๋ฎค๋‹ˆํ‹ฐ, ๋ฉ˜ํ†  ๋ฉ˜ํ‹ฐ

์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ฌธ์„œ ์ž‘์„ฑ ํ…œํ”Œ๋ฆฟ ์ œ๊ณต: WBS, ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ, ํ…Œ์ด๋ธ” ์ •์˜์„œ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์„œ ํ…œํ”Œ๋ฆฟ ์ œ๊ณต
  • ํ˜‘์—… ๊ธฐ๋Šฅ ๋ฐ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ: ํŒ€์› ์ดˆ๋Œ€, ํŒŒ์ผ ๊ณต์œ  ๋“ฑ์„ ํ†ตํ•œ ํŒ€ ํ˜‘์—… ์ง€์›

๋ชฉํ‘œ ๋ฐ ๊ธฐ๋Œ€ํšจ๊ณผ

  • ์ทจ์ค€์ƒ ๋ฐ ๋Œ€ํ•™์ƒ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์–ด๋–ค ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ• ์ง€์— ๋Œ€ํ•œ ๋ถˆ์•ˆ์„ ํ•ด์†Œํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์‹œ์ž‘์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ
  • ํŒ€ ํ˜‘์—…๊ณผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ๊ฐ€ ํ•œ๋ฐ ๋ฌถ์ธ ์„œ๋น„์Šค๋กœ, ๊ฐœ๋ฐœ ๋Šฅ๋ ฅ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋ฐ ํ˜‘์—… ๋Šฅ๋ ฅ๋„ ํ•จ๊ป˜ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Œ
  • ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ๊ฒฝ๋ ฅ ๊ตฌ์ถ• ๋ฐ ์ทจ์—… ์ค€๋น„๋ฅผ ์œ„ํ•œ ํฌํŠธํด๋ฆฌ์˜ค ๊ฐ•ํ™”์— ๋„์›€์„ ์ค„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋จ


ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ณ





2. ์š”๊ตฌ์‚ฌํ•ญ ์ •์˜

์‹œ๋‚˜๋ฆฌ์˜ค

ํ”„๋กœ์ ํŠธ

  1. ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ
  • ํšŒ์›์€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ์Œ
  1. ํ”„๋กœ์ ํŠธ ์กฐํšŒ
  • ํšŒ์›์€ ๊ณต๊ฐœ๋œ ํ”„๋กœ์ ํŠธ๋ฅผ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ์Œ
  1. ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ ์กฐํšŒ
  • ํšŒ์›์€ ์ž์‹ ์ด ์ฐธ์—ฌํ•œ ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ์Œ
  1. ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ๋ฉค๋ฒ„ ์ •๋ณด ์กฐํšŒ
  • ํšŒ์›์€ ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ๋ฉค๋ฒ„ ์ •๋ณด๋ฅผ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ์Œ

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค

  1. ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๊ด€๋ฆฌ ํšŒ์›์€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์ˆœ์„œ ๋ณ€๊ฒฝ, ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Œ

  2. ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์กฐํšŒ ํšŒ์›์€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Œ

  3. ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๊ฒฐ๊ณผ ์กฐํšŒ ํšŒ์›์€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๊ฒฐ๊ณผ๋ณ„๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Œ

์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ

  1. ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ ๊ด€๋ฆฌ ํšŒ์›์€ ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ๋ฅผ ์ถ”๊ฐ€, ์ˆ˜์ •, ์ˆœ์„œ ๋ณ€๊ฒฝ, ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ์Œ

  2. ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ ์กฐํšŒ ํšŒ์›์€ ์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Œ

์ด์Šˆ

  1. ์ด์Šˆ ๋‹ด๋‹น์ž ์กฐํšŒ ํšŒ์›์€ ํ•ด๋‹น ์ด์Šˆ์™€ ํ•จ๊ป˜ ๋‹ด๋‹น์ž์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Œ


์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ

์š”๊ตฌ์‚ฌํ•ญ ๋ช…์„ธ์„œ


๊ธฐ๋Šฅ ๋ช…์„ธ์„œ

๊ธฐ๋Šฅ ๋ช…์„ธ์„œ





3. DDD

miro๋ฅผ ํ†ตํ•œ ์ด๋ฒคํŠธ์Šคํ† ๋ฐ

์ปจํ…์ŠคํŠธ ๋งคํ•‘

์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ตฌ๋ถ„๋œ ์ปจํ…์ŠคํŠธ ๋งต



๋…ผ๋ฆฌ ๋ชจ๋ธ๋ง ๋ฐ ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง



Data Definition Language(DDL)

user ํ…Œ์ด๋ธ” ์ƒ์„ฑ
project ํ…Œ์ด๋ธ” ์ƒ์„ฑ
resume ํ…Œ์ด๋ธ” ์ƒ์„ฑ
follow ํ…Œ์ด๋ธ” ์ƒ์„ฑ
like ํ…Œ์ด๋ธ” ์ƒ์„ฑ
project member ํ…Œ์ด๋ธ” ์ƒ์„ฑ
resume project ํ…Œ์ด๋ธ” ์ƒ์„ฑ
project issue ํ…Œ์ด๋ธ” ์ƒ์„ฑ
project testcase ํ…Œ์ด๋ธ” ์ƒ์„ฑ
project wbs ํ…Œ์ด๋ธ” ์ƒ์„ฑ
project definition of table ํ…Œ์ด๋ธ” ์ƒ์„ฑ
project requirement ํ…Œ์ด๋ธ” ์ƒ์„ฑ




4. CRUD ๊ธฐ๋Šฅ ๊ตฌํ˜„ - ํ…Œ์ŠคํŠธ ์„ค๊ณ„ ๋ฐ ์ง„ํ–‰

๊ณ„์ธต ๊ตฌ์กฐ ์„ค๊ณ„

gateway ๋ฐ eureka ์„œ๋ฒ„ ์‚ฌ์šฉ
Mybatis, Spring data jpa ์‚ฌ์šฉ
MSA - feign client

REST API

API ์„ค๊ณ„์„œ

ํ…Œ์ŠคํŠธ ์„ค๊ณ„

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ

Query

User

์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ
์‚ฌ์šฉ์ž๋ฅผ ์ด๋ฉ”์ผ๋กœ ์กฐํšŒ
์‚ฌ์šฉ์ž๋ฅผ ID๋กœ ์กฐํšŒ
์‚ฌ์šฉ์ž๋ฅผ token์œผ๋กœ ์กฐํšŒ
ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ๋ฉค๋ฒ„๋“ค ์ •๋ณด ์กฐํšŒ

์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ์ˆ˜์ •

์‹คํŒจ

์„ฑ๊ณต

๊ฒฐ๊ณผ

์‹œ์šฉ์ž ์ •๋ณด ์ˆ˜์ •

Project

ํ”„๋กœ์ ํŠธ๋ฅผ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒ
ํ”„๋กœ์ ํŠธ๋ฅผ ID๋กœ ์กฐํšŒ
ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต๊ฐœ ์œ ๋ฌด๋กœ ์กฐํšŒ
ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒํƒœ(์™„๋ฃŒ, ๋ฏธ์™„)๋กœ ์กฐํšŒ
ํ”„๋กœ์ ํŠธ๋ฅผ ์ข‹์•„์š” ์ˆœ์œผ๋กœ ์กฐํšŒ
ํ”„๋กœ์ ํŠธ๋ฅผ ๋‚ด์šฉ ๊ฒ€์ƒ‰์œผ๋กœ ์กฐํšŒ
ํ”„๋กœ์ ํŠธ ์ •๋ณด์™€ ํ”„๋กœ์ ํŠธ ์ฐธ์—ฌ ํšŒ์› ์กฐํšŒ
์š”์ฒญ์ด ๋“ค์–ด์˜จ ID๋ฅผ ํ†ตํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์กฐํšŒ

Project Template - WBS

WBS ์กฐํšŒ - ํ”„๋กœ์ ํŠธ ID/๋‹ด๋‹น์ž ID/ํ”„๋กœ์ ํŠธ ID์™€ ๋‹ด๋‹น์ž ID

Project Template - Issue

Issue ์กฐํšŒ - ํ”„๋กœ์ ํŠธ ID/์ด์Šˆ ์ƒํƒœ(CLOSED)
Issue๋ฅผ ํ”„๋กœ์ ํŠธ ID๋กœ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ์ž ์ •๋ณด๊นŒ์ง€ ์กฐํšŒ

Project Template - Definition of Table

ํ…Œ์ด๋ธ” ์ •์˜์„œ ์กฐํšŒ - ํ”„๋กœ์ ํŠธ ID/ํ…Œ์ด๋ธ” ๋ช…

Project Template - Requirement

์š”๊ตฌ์‚ฌํ•ญ ์กฐํšŒ - ํ”„๋กœ์ ํŠธ ID/separate๊ณผ ํ”„๋กœ์ ํŠธ ID/์š”๊ตฌ์‚ฌํ•ญ ๋ฒˆํ˜ธ์™€ ํ”„๋กœ์ ํŠธ ID

Project Template - Testcase

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์กฐํšŒ - ํ”„๋กœ์ ํŠธ ID/separate๊ณผ ํ”„๋กœ์ ํŠธ ID/๊ฒฐ๊ณผ์™€ ํ”„๋กœ์ ํŠธ ID/ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋ฒˆํ˜ธ์™€ ํ”„๋กœ์ ํŠธ ID

Command

User

ํšŒ์›๊ฐ€์ž…

Project

ํ”„๋กœ์ ํŠธ ์ถ”๊ฐ€
ํ”„๋กœ์ ํŠธ ์ˆ˜์ •
ํ”„๋กœ์ ํŠธ ์‚ญ์ œ

Project Template - WBS

WBS ์ถ”๊ฐ€
ํ”„๋กœ์ ํŠธ ID๋กœ WBS ์ถ”๊ฐ€
ํ”„๋กœ์ ํŠธ ID๋กœ WBS ์—ฌ๋Ÿฌ ๊ฐœ ์ผ๊ด„ ์ถ”๊ฐ€
ํ”„๋กœ์ ํŠธ ID์™€ WBS ๋ฒˆํ˜ธ๋กœ WBS ์ˆ˜์ •
ํ•ด๋‹น ํ”„๋กœ์ ํŠธ WBS ์ƒํƒœ๋ฅผ ์ „๋ถ€ COMPLETED๋กœ ์ˆ˜์ •
ํ”„๋กœ์ ํŠธ ID์™€ WBS ๋ฒˆํ˜ธ๋กœ WBS ๋‚ด์šฉ๋งŒ ์ˆ˜์ •
ํ”„๋กœ์ ํŠธ ID์™€ WBS ๋ฒˆํ˜ธ๋กœ WBS ์‚ญ์ œ
ํ”„๋กœ์ ํŠธ ID๋กœ ํ•ด๋‹นํ•˜๋Š” WBS ์ „๋ถ€ ์‚ญ์ œ

Project Template - Issue

์ด์Šˆ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •
ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ์ด์Šˆ ์ƒํƒœ๋ฅผ ์ „๋ถ€ OPEN์œผ๋กœ ์ˆ˜์ •
ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ์ด์Šˆ ์ƒํƒœ๋ฅผ ์ „๋ถ€ CLOSED๋กœ ์ˆ˜์ •
ํ”„๋กœ์ ํŠธ ID์™€ ์ด์Šˆ ๋ฒˆํ˜ธ๋กœ ์ด์Šˆ ์‚ญ์ œ
ํ”„๋กœ์ ํŠธ ID๋กœ ํ•ด๋‹นํ•˜๋Š” ์ด์Šˆ ์ „๋ถ€ ์‚ญ์ œ

Project Template - Definition of Table

ํ† ํฐ ์‚ฌ์šฉ์„ ์œ„ํ•ด ํšŒ์›๊ฐ€์ž… ํ›„ ๋กœ๊ทธ์ธ ์ง„ํ–‰
ํ…Œ์ด๋ธ” ์ •์˜์„œ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •
ํ”„๋กœ์ ํŠธ ID์™€ ํ…Œ์ด๋ธ” ์ •์˜์„œ ๋ฒˆํ˜ธ๋กœ ํ…Œ์ด๋ธ” ์ •์˜์„œ ์‚ญ์ œ
ํ”„๋กœ์ ํŠธ ID๋กœ ํ•ด๋‹นํ•˜๋Š” ํ…Œ์ด๋ธ” ์ •์˜์„œ ์ „๋ถ€ ์‚ญ์ œ

Project Template - Requirement

์š”๊ตฌ์‚ฌํ•ญ ์ถ”๊ฐ€
์š”๊ตฌ์‚ฌํ•ญ ์ˆ˜์ •
์š”๊ตฌ์‚ฌํ•ญ ์ˆœ์„œ ์ˆ˜์ •
ํ”„๋กœ์ ํŠธ ID์™€ ์š”๊ตฌ์‚ฌํ•ญ ๋ฒˆํ˜ธ๋กœ ์š”๊ตฌ์‚ฌํ•ญ ์‚ญ์ œ
ํ”„๋กœ์ ํŠธ ID๋กœ ํ•ด๋‹นํ•˜๋Š” ์š”๊ตฌ์‚ฌํ•ญ ์ „๋ถ€ ์‚ญ์ œ

Project Template - Testcase

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ถ”๊ฐ€
ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆ˜์ •
ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ˆœ์„œ ์ˆ˜์ •
ํ”„๋กœ์ ํŠธ ID์™€ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ๋ฒˆํ˜ธ๋กœ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์‚ญ์ œ
ํ”„๋กœ์ ํŠธ ID๋กœ ํ•ด๋‹นํ•˜๋Š” ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ „๋ถ€ ์‚ญ์ œ



5. ๊ฐœ์„ ์‚ฌํ•ญ ๋ฐ ํšŒ๊ณ 

๊ฐœ์„ ์‚ฌํ•ญ

feign client -> put delete mapping์—๋„ ์ ์šฉ

ํšŒ๊ณ 

๐Ÿ˜Ž๊ณฝ์œค๊ฒฝ
์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” MyBatis, JPA, REST API ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฑ์—”๋“œ ๊ธฐ์ˆ ์„ ์ ์šฉํ•˜๊ณ  ์ตํžˆ๋Š” ๋ฐ์— ์ฃผ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ํ”„๋ก ํŠธ์—”๋“œ ์—†์ด๋„ ๋ชจ๋“  ๊ณ„์‚ฐ์ด ๋ฐฑ์—”๋“œ์—์„œ ์ด๋ฃจ์–ด์ง€๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋ชฉํ‘œ์˜€๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฅผ ์‹คํ˜„ํ•˜๊ธฐ ์œ„ํ•ด CRUD ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ์— ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์กฐํšŒ๋Š” MyBatis๋กœ, ์ถ”๊ฐ€, ์ˆ˜์ •, ์‚ญ์ œ๋Š” JPA๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)์˜ ๋ฐฉ๋ฒ• ์ค‘ ์ด๋ฒคํŠธ์Šคํ† ๋ฐ๊ณผ ์ปจํ…์ŠคํŠธ ๋งคํ•‘์„ ํ™œ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์‹œ๊ฐํ™”ํ•˜๊ณ , ๊ฐ ๋„๋ฉ”์ธ ๊ฐ„์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋„๋ก ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ™์€ ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋ผ๋„ ๊ฐ ํŒ€์›์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํฐ ๊ทธ๋ฆผ์ด๋‚˜ ์„ค๊ณ„๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ ์ปจํ…์ŠคํŠธ์˜ ๊ฒฝ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜๊ณ  ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ , ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ํŒ€ ๊ฐ„์˜ ์˜์‚ฌ์†Œํ†ต์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์— ๋ชจ๋‘๊ฐ€ ๋™์ผํ•œ ๋น„์ „์„ ๊ณต์œ ํ•˜๊ณ  ๊ทธ์— ๋งž์ถฐ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜์‚ฌ์†Œํ†ต์ด ํ™•์‹คํžˆ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ธ์›์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์ด๋ฅผ ๋”์šฑ ํ™•์‹คํžˆ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„(DDD)๋ฅผ ์‹œ์ž‘์œผ๋กœ ํŒ€์›๋“ค๊ณผ์˜ ์†Œํ†ต์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์—์„œ๋„ ๊พธ์ค€ํ•œ ์˜๊ฒฌ ๊ณต์œ ์™€ ์˜๋ฌธ ํ•ด๊ฒฐ์„ ์œ„ํ•œ ์‹œ๊ฐ„์„ ํŒ€์›๋“ค๊ณผ ์ž์ฃผ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐ์ž๊ฐ€ ๋งก์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ์ปจ๋ฒค์…˜์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ์ ํŠธ๊ฐ€ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ธ์‹ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŒ€์› ๊ฐ„์˜ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช…ํ™•ํ•œ ๋ฉ”์†Œ๋“œ ๋ช…๊ณผ ์ฃผ์„, ๊ทธ๋ฆฌ๊ณ  ์ผ๊ด€๋œ ์ปจ๋ฒค์…˜์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ณ„์†ํ•ด์„œ ์ฝ”๋“œ ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋ฐœ์ „์‹œํ‚ฌ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ๋“ค์„ ๋‹จ์ˆœํžˆ ์—ฌ๊ธฐ์„œ ๋งˆ๋ฌด๋ฆฌํ•˜์ง€ ์•Š๊ณ , ์•ž์œผ๋กœ๋„ ๋ฐœ์ „์‹œ์ผœ ๋‚˜๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ์—”๋“œ๊นŒ์ง€ ์ ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹ค์ œ ์„œ๋น„์Šค ์ˆ˜์ค€๊นŒ์ง€ ๋ฐœ์ „์‹œํ‚ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽธ์ด๊ธฐ์—ฐ
์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๊ธฐํšํ•œ ์„œ๋น„์Šค๋ฅผ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๋ฐฉ์‹์œผ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„๊ฐ€ ์ดˆ๊ธฐ ๊ตฌ์กฐ ์„ค๊ณ„์— ํ•„์ˆ˜์ ์ด๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ถ”์ƒ์ ์ธ ์„ค๊ณ„ ํ˜•ํƒœ๊ฐ€ ์•„๋‹Œ ๊ตฌ์ฒด์ ์ธ ๊ธฐ๋Šฅ ๋„๋ฉ”์ธ ๋‹จ์œ„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ช…ํ™•ํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™๋‹ค. ์ดํ›„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •์—์„œ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๋„ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋ชจ๋†€๋ฆฌ๋”• ํ˜•ํƒœ๋กœ ์‹œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์ถ”ํ›„ ํ™•์žฅํ•  ๊ธฐ๋Šฅ๋“ค์„ ์ƒ๊ฐํ•˜์—ฌ โ€˜MSAโ€™ ์„ค๊ณ„ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€๋‹ค. ์ฒ˜์Œ์—๋Š” โ€˜MSAโ€™๋Š” ๊ฒƒ์ด ๊ทธ์ € ๊ธฐ๋Šฅ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ ๊ธฐ๋Šฅ๋งˆ๋‹ค ๋…๋ฆฝ์„ฑ์„ ์ฃผ๋Š” ๊ฒƒ์— ๋ชฉ์ ์„ ๋‘”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋งŽ์ด ๋‚˜๋ˆ„๋ฉด ๋‚˜๋ˆŒ์ˆ˜๋ก ํŒ€ ๋‹จ์œ„ ์ธ๋ ฅ์„ ํฌํ•จํ•œ ์ธํ”„๋ผ๊ฐ€ ์ถ”๊ฐ€ ๋˜์–ด์•ผ ํ•จ์„ ์•Œ๊ฒŒ๋˜์—ˆ๊ณ , ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž์ฃผ ์“ฐ์ด๋Š” ๊ธฐ๋Šฅ ๋˜๋Š” ์ง€์†์ ์œผ๋กœ ์ด์Šˆ๊ฐ€ ์žฆ์€ ๊ธฐ๋Šฅ๋“ค์— ๋Œ€ํ•ด โ€˜MSAโ€™๋ฅผ ์ ์šฉํ•˜๋Š”๊ฒƒ์ด โ€˜๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜โ€™๋ฅผ ์ž˜ ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์ด๋ผ ์ƒ๊ฐํ•˜๊ฒŒ๋˜์—ˆ๋‹ค. ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋Š” ์ง€๊ธˆ ๋์ด ์•„๋‹Œ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ณ„๊นŒ์ง€ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ ํ•  ์˜ˆ์ •์ด๋‹ค. ๊ณผ์ •์—์„œ Code ๋ฆฌํŒฉํ† ๋ง, Github ์‚ฌ์šฉ์‹œ ์ปจ๋ฒค์…˜ ํ†ต์ผ ๋“ฑ์„ ์ง„ํ–‰ํ•˜๋ฉฐ ๋” ๋ฐœ์ „ ์‹œํ‚ค๊ณ ์ž ํ•œ๋‹ค.

๐Ÿฐ์ด์˜ˆ์›
์Šคํ”„๋ง๋ถ€ํŠธ์™€ MSA๋ฅผ ์ ์šฉํ•œ ํ”„๋กœ์ ํŠธ๋Š” ์ฒ˜์Œ ๊ฒฝํ—˜ํ•ด๋ณด๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์„œ๋น„์Šค๋ผ๋ฆฌ์˜ ์ „๋‹ฌ DTO, Entity, VO๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„๋˜๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ rest api ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜์ค‘์— ์–ด๋–ค ํ”„๋ก ํŠธ์—”๋“œ์™€๋„ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค. Feign Client๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ MSA๋กœ ๋‚˜๋ˆ„์–ด์ง„ ์„œ๋ฒ„๋ผ๋ฆฌ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”ํ›„ ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ ๋™์•ˆ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  html๊นŒ์ง€ ์ ์šฉํ•˜์—ฌ ๋ฐœ์ „ ์‹œํ‚ฌ ์˜ˆ์ •์ด๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๊ฒƒ์„ ๋ณต์Šตํ•˜๊ณ  ์ ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ตํ•œ ์‹œ๊ฐ„์ด์—ˆ๋‹ค.

๐Ÿ˜บ์ž„์›์žฌ
์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ์ด์ „์— ๋ฐฐ์šด ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ REST API, MSA์™€ MyBatis, JPA ๋“ฑ์„ ์ง์ ‘ ์ ์šฉ์‹œํ‚ค๊ณ  ๋ณต์Šตํ•˜๋ฉฐ ๊ฐœ๋…์„ ๋‹ค์‹œ ์žก๋Š” ์‹œ๊ฐ„์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Spring Security์— ๋Œ€ํ•œ ๋ถ€์กฑํ•จ๊ณผ ํ•„์š”์„ฑ์„ ์ ˆ์‹คํžˆ ๋Š๋ผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋งŒ์„ ์ฐธ์กฐํ•ด ๊ตฌํ˜„ํ•˜๋ ค ํ•˜๋‹ˆ ๊ฐœ๋…๊ณผ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•˜์—ฌ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์— ์ œ๊ฐ€ ๊ตฌํ˜„ํ–ˆ๋˜ NodeJS ์„œ๋ฒ„์™€๋Š” ๋‹ค๋ฅด๊ฒŒ Spring Security๊ฐ€ ๋งŽ์€ ์ž‘์—…์„ ๋Œ€์‹  ํ•ด์ฃผ๊ณ  ์ €๋Š” ๊ทธ ์ž‘์—…์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ์„ค์ •๋“ค์„ ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ตฌ๋™ ์›๋ฆฌ์˜ ์ดํ•ด๊ฐ€ ์—†์œผ๋‹ˆ ํ™œ์šฉ์€ ์‚ฌ์‹ค์ƒ ๋ถˆ๊ฐ€๋Šฅ์— ๊ฐ€๊นŒ์› ์Šต๋‹ˆ๋‹ค. ์•„์ง ์ตœ์ข… ํ”„๋กœ์ ํŠธ๊ฐ€ ์ง„ํ–‰์ค‘์ธ ๋งŒํผ ๊ฐœ๋…์„ ํ™•์‹คํžˆ ์žก๊ณ  ๊ตฌํ˜„์— ๋“ค์–ด๊ฐ€์•ผํ•  ํ•„์š”์„ฑ์„ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ, ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ •๋…ํ•˜๋Š” ๊ฒƒ์˜ ํ•„์š”์„ฑ์„ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ „์— ์–ธ๊ธ‰ํ•œ๋ฐ”์™€ ๊ฐ™์ด ๊ฐœ๋…์„ ๊ณต๊ณ ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ž…๋‹ˆ๋‹ค. ์ง€ํ•˜์ฒ ์„ ํƒˆ ๋•Œ, ์ž๊ธฐ ์ „, ์‰ฌ๋Š” ์‹œ๊ฐ„ ๋“ฑ ์—ฌ์œ ์žˆ์„ ๋•Œ ์กฐ๊ธˆ์”ฉ์ด๋ผ๋„ ๊ณ„์† ์ œ๊ฐ€ ํ™œ์šฉํ•˜๋Š”, ํ™œ์šฉํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์— ๋Œ€ํ•ด ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํŠผํŠผํžˆ ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์„ธ ๋ฒˆ์งธ๋กœ, ๊ธฐ๋Šฅ ์šฐ์„  ์ฃผ์˜์— ๋Œ€ํ•œ ๊นจ๋‹ฌ์Œ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•  ๋‹น์‹œ Spring Security๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋กœ๊ทธ์ธ ์ฐฝ์ด ๋œจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ฒ ๋‹ค๊ณ  ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๋Š๋ผ ์ •์ž‘ ๊ตฌํ˜„ํ•ด์•ผํ•  ๊ธฐ๋Šฅ๋“ค์€ ์ฐจ์ผํ”ผ์ผ ๋ฏธ๋ค„์ ธ๋งŒ ๊ฐ”์Šต๋‹ˆ๋‹ค. ์ด์— ๋งŽ์€ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ๋ฐ›์€ ์‹œ์ ์— ํ˜„ ์ƒํ™ฉ์— ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์ค‘์š”์น˜ ์•Š๋‹ค๋Š” ์กฐ์–ธ์„ ์–ป์—ˆ๊ณ , RESTํ•œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์˜ˆ์ •์ด๋ฏ€๋กœ ํ•ด๋‹น ๊ธฐ๋Šฅ ๋˜ํ•œ ํ™œ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ž€ ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ํฌ์ŠคํŠธ๋งจ์„ ํ™œ์šฉํ–ˆ์„ ๋• ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์ด ์ž‘๋™๋˜๋ฏ€๋กœ ๋„˜๊ธธ ์ˆ˜ ์žˆ์—ˆ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ์˜ ๊ฐœ๋ฐœ ์ธ์ƒ๋™์•ˆ ํ˜„์žฌ ์ค‘์š”ํ•˜๊ณ  ์šฐ์„ ์ ์ธ ๊ธฐ๋Šฅ๋“ค์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‹œ๊ฐ„ ๋ถ„๋ฐฐ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ฐฐ์šฐ๊ธฐ๋„ ๋งŽ์ด ๋ฐฐ์› ์ง€๋งŒ ์•„์‰ฌ์šด ์ ๋„ ๋งŽ์€ ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ ์„ ์ง€๊ธˆ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ํ–‰๋ณตํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์˜ ๋ฐฐ์›€์€ ์ œ๊ฐ€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ๊ธธ์— ์ข‹์€ ์–‘๋ถ„์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌด์—‡๋ณด๋‹ค ํŒ€์›๋“ค์˜ ์ค‘์š”์„ฑ๊ณผ ๊ฐ์‚ฌํ•จ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ํŒ€์›๋“ค์ด ์žˆ๊ธฐ์— ์ฃผ์ € ์•‰์ง€๋งŒ ์•Š๋Š”๋‹ค๋ฉด ๋”๋””๋”๋ผ๋„, ์กฐ๊ธˆ์”ฉ์ด๋ผ๋„ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๊ณ  ๊ธฐ๊ฐ„ ๋™์•ˆ ์ œ๊ฐ€ ๋ฒ„ํ‹ธ ์ˆ˜ ์žˆ๋˜ ์ด์œ ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๊ฐ์‚ฌํ•จ์„ ์žŠ์ง€ ์•Š๊ณ  ์ € ๋˜ํ•œ ํŒ€์›๋“ค์ด ์˜์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿถ์ •์šฐ์ง„
์ €ํฌ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์งง์€ ๊ธฐ๊ฐ„ ๋™์•ˆ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ถ€ํŠธ, MyBatis, Spring Data JPA, ๊ทธ๋ฆฌ๊ณ  REST API ๋“ฑ ์ˆ˜์—… ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ๋‚ด์šฉ์„ ์‹ค์ œ๋กœ ํ™œ์šฉํ•ด ๋ณด๋Š” ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์ดˆ๋ฅผ ์ข€ ๋” ํƒ„ํƒ„ํ•˜๊ฒŒ ๋‹ค์งˆ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ์œผ๋กœ DDD ์„ค๊ณ„๋ฅผ ๋„์ž…ํ•˜์—ฌ ๋„๋ฉ”์ธ์„ ์„ค๊ณ„ํ•˜๊ณ , MSA๋ฅผ ์ ์šฉํ•˜์—ฌ feign client, ์œ ๋ ˆ์นด ์„œ๋ฒ„, ํด๋ผ์ด์–ธํŠธ, ๊ทธ๋ฆฌ๊ณ  ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝํ—˜๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ˜‘์—…์„ ์œ„ํ•ด git๊ณผ GitHub์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ, ์ด๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ํŒ€์›๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŒ€์›๋“ค์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ '์•„, ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ๋„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ตฌ๋‚˜'๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋ฐฐ์šด ๊ฒƒ์„ ํ™œ์šฉํ•˜๊ณ , ๋‹ค๋ฅธ ์ฝ”๋“œ๋„ ๋ณด๋ฉฐ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๋Šฅ๋ ฅ์ด ๋Š˜์–ด๋‚œ ๊ฒƒ์„ ๋Š๋‚„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋” ์„ฑ์žฅํ•˜์—ฌ ๋” ๋‚˜์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.