Skip to content

๐Ÿ‚ ๋ฐฐ์„ฑ๋ฏผ, ๐Ÿ… ํ•œ์†Œํ˜œ, ๐Ÿ‡ ์œค์žฌ์€, ๐Ÿ‰ ์กฐ์ˆ˜๋นˆ, ๐Ÿ„ ๊น€์žฌํ˜„

Notifications You must be signed in to change notification settings

beyond-sw-camp/be04-2nd-6candoit-plrecipe

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

โšฝPlrecipe๐Ÿ“œ

Plrecipe๋Š” "๋†€๋‹ค"๋ฅผ ์˜๋ฏธํ•˜๋Š” Play์™€ "์š”๋ฆฌ๋ฒ•"์„ ์˜๋ฏธํ•˜๋Š” Recipe์˜ ํ•ฉ์„ฑ์–ด๋กœ, ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ค์–‘ํ•œ ๋†€๊ฑฐ๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์Œ์‹์ , ์นดํŽ˜, ์‚ฐ์ฑ…, ์•กํ‹ฐ๋น„ํ‹ฐ ๋“ฑ์„ ์กฐํ•ฉํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์ฝ”์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒŒ์‹œ๊ธ€์„ ์ž‘์„ฑํ•˜์—ฌ ๋‹ค๋ฅธ ํšŒ์›๋“ค๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž๋Š” ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜์—ฌ ํ˜ผ์ž ๋˜๋Š” ์นœ๊ตฌ๋“ค๊ณผ ํ•จ๊ป˜ ๊ฒŒ์‹œ๋ฌผ์„ ๊ณต์œ ํ•˜๊ณ  ์ถ”์–ต์„ ์Œ“์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ™Œ๐Ÿป ํŒ€๋ช… : 6CanDoIt!

๐Ÿ˜ ํŒ€์›

๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

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


ย ์ €ํฌ ํ”„๋กœ์ ํŠธ๋Š” 'ํ”Œ๋ ˆ์‹œํ”ผ'๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ, JAVA Spring, MyBatis, JPA, ์™ธ๋ถ€ API๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ํ”„๋ก ํŠธ์—”๋“œ๊นŒ์ง€ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ตฌ์ฒด์ ์ด๊ณ  ๊ธฐ๋Šฅ์˜ ๊ณ ๋„ํ™”๋ณด๋‹ค๋Š” ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฃผ์š” ๊ธฐ๋Šฅ ์ค‘ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ธฐ๋Šฅ์„ ์šฐ์„ ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ย 'ํ”Œ๋ ˆ์‹œํ”ผ' ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์žฅ์†Œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์ž์‹ ๋งŒ์˜ ์ฝ”์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ์ด๋ฅผ ๊ฒŒ์‹œ๊ธ€ ํ˜•์‹์œผ๋กœ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค๊ณผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์‚ฌ์šฉ์ž๋“ค์€ ํšŒ์›๋ผ๋ฆฌ ๋ชจ์ธ ๊ทธ๋ฃน ๋˜๋Š” ํ˜ผ์ž๋งŒ์˜ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜์—ฌ ์ถ”์–ต์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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


2. ํ”„๋กœ์ ํŠธ ํ•„์š”์„ฑ



ย ์œ„์˜ ์ž๋ฃŒ๋Š” 2021๋…„๊นŒ์ง€์˜ ์—ฌํ–‰์ž ๋น„์œจ๊ณผ ๋ ˆ์ €์‹œ์„ค ์ด์šฉ๋ฅ ์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ํ•˜๋ฝํ•˜๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” COVID-19์˜ ์˜ํ–ฅ์œผ๋กœ ์ธํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ž์œ ๋กœ์šด ์—ฌํ–‰์ด๋‚˜ ํ™œ๋™์ด ์ œํ•œ๋˜์—ˆ๊ณ , ์ด๋Š” ์—ฌํ–‰์ž ๋น„์œจ๊ณผ ๋ ˆ์ €์‹œ์„ค ์ด์šฉ๋ฅ ์— ์˜ํ–ฅ์„ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

ย ํ•˜์ง€๋งŒ ํ˜„์žฌ COVID-19์ด ์ข…์‹๋˜๋ฉด์„œ, ์‚ฌ๋žŒ๋“ค์€ ๊ทธ ๋™์•ˆ ํ•˜์ง€ ๋ชปํ•œ ์—ฌํ–‰์ด๋‚˜ ๋ ˆ์ € ํ™œ๋™์„ ์ฆ๊ธฐ๋ ค๋Š” ์›€์ง์ž„์ด ๋‚˜ํƒ€๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ข…์‹๋œ ์ง€ ์•ฝ 1๋…„์ด ์ง€๋‚œ ์ง€๊ธˆ, ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์นœ๊ตฌ๋“ค๊ณผ์˜ ์ถ”์–ต์„ ์Œ“๊ฑฐ๋‚˜ ์ŠคํŠธ๋ ˆ์Šค๋ฅผ ํ•ด์†Œํ•˜๊ณ ์ž ํ•˜๋Š” ์š•๊ตฌ๊ฐ€ ์ปค์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ย ์ด๋Ÿฌํ•œ ๊ฒฝํ–ฅ์€ ํ–ฅํ›„ ์—ฌํ–‰ ์—…๊ณ„ ๋ฐ ๋ ˆ์ € ์‚ฐ์—…์— ๊ธ์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ข…์‹๋œ COVID-19์œผ๋กœ ์ธํ•œ ์ œ์•ฝ์ด ํ’€๋ฆฌ๋ฉด์„œ ์‚ฌ๋žŒ๋“ค์˜ ์—ฌํ–‰๊ณผ ๋ ˆ์ € ํ™œ๋™์— ๋Œ€ํ•œ ์ˆ˜์š”๊ฐ€ ์ฆ๊ฐ€ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋ฉฐ, ์ด๋Š” ๊ด€๋ จ ์‚ฐ์—…์˜ ํšŒ๋ณต๊ณผ ์„ฑ์žฅ์„ ๋„๋ชจํ•  ๊ฒƒ์œผ๋กœ ์ „๋ง๋ฉ๋‹ˆ๋‹ค.

ย ์•„๋ž˜๋Š” ์ด๋Ÿฌํ•œ ๊ฒฝํ–ฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ž๋ฃŒ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.


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

ย ์ €ํฌ ํ”„๋กœ์ ํŠธ๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž๋“ค์˜ ๊ณ ๋ฏผ์„ ํ•ด์†Œํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ์ถ”์–ต์„ ๊ณต์œ ํ•˜๊ณ  ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐํš๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌํ–‰์„ ๋˜๋Š” ๋†€์ด๋ฅผ ๊ณ„ํšํ•˜๊ธฐ ์ „์—๋Š” ๋‘๊ทผ๊ฑฐ๋ฆฌ๋Š” ๋งˆ์Œ์œผ๋กœ ์ƒˆ๋กœ์šด ์—ฌํ–‰์ง€๋ฅผ ๊ณ ๋ฏผํ•˜๊ณ , ์—ฌํ–‰์ด๋‚˜ ์ฆ๊ฑฐ์šด ์‹œ๊ฐ„์˜ ์—ฌ์šด์„ ๋‚จ๊ธฐ๋ฉฐ ์ฆ๊ธฐ๋Š” ๊ฒƒ์„ ๋•๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

ย ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์€ ์—ฌํ–‰์ด๋‚˜ ๋†€์ด๋ฅผ ์ฆ๊ธฐ๋Š” ๋™์•ˆ ์ถ”์–ต์„ ์ €์žฅํ•˜๊ณ  ๋‚˜๋ˆ„๋ฉฐ, ๊ฐœ์ธ์˜ ํ–‰๋ณตํ•œ ์‹œ๊ฐ„์„ ๋‘ ๋ฐฐ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋Š” ๊ฒฝํ—˜์„ ์ œ๊ณต๋ฐ›๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์—ฌํ–‰์— ๋Œ€ํ•œ ์ฆ๊ฑฐ์›€์„ ๋”์šฑ ํ’์š”๋กญ๊ฒŒ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

3. ํ”„๋กœ์ ํŠธ ์ฃผ์š” ๊ธฐ๋Šฅ

1. ์ฝ”์Šค ์ƒ์„ฑ :
ํšŒ์›์€ ์ž์‹ ์ด ์›ํ•˜๋Š” ์žฅ์†Œ๋“ค์„ ์กฐํ•ฉํ•˜์—ฌ ๋†€๊ฑฐ๋ฆฌ ์ฝ”์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2. ๊ทธ๋ฃน :
ํšŒ์›์€ ํ•จ๊ป˜ํ•˜๋Š” ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜์—ฌ, ๊ทธ๋ฃน ๋‚ด์—์„œ ์ฝ”์Šค๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ฐœ์ธ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜์—ฌ ํ˜ผ์ž์„œ๋„ ์ฝ”์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๊ฒŒ์‹œ๊ธ€ :
ํšŒ์›์€ ๊ฒŒ์‹œ๊ธ€ ํ˜•์‹์œผ๋กœ ์ž์‹ ์˜ ์ฝ”์Šค๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฆฐ ์ฝ”์Šค๋„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ํŒ”๋กœ์šฐ :
ํšŒ์›์€ ๋‹ค๋ฅธ ํšŒ์›์„ ํŒ”๋กœ์šฐํ•˜์—ฌ ๊ทธ ํšŒ์›์ด ์˜ฌ๋ฆฐ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ๊ด€๊ณ„๋ฅผ ํ˜•์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’พ ๊ธฐ์ˆ ์Šคํƒ

DA# Ubuntu MariaDB Java JavaSpring MyBatis JPA

์ถ”๊ฐ€์ ์ธ ํ•™์Šต ๋‚ด์šฉ ๋˜๋Š” ๊ด€๋ จ ๊ธฐ์ˆ  ์„ค๋ช… WIKI ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ—“๏ธ WBS

๐Ÿ“ ์š”๊ตฌ์‚ฌํ•ญ

Plrecipe ์ƒ์„ธ์ •์ฑ…
  • ๊ฒŒ์‹œ๊ธ€

    • ๊ฒŒ์‹œ๊ธ€์—๋Š”ย (1๊ฐœย ์ด์ƒ์˜ย ์žฅ์†Œ๋ฅผย ๋‹ด์€)ย ์ฝ”์Šค๊ฐ€ย ํ•„์ˆ˜๋กœย ํฌํ•จ๋˜์–ด์•ผย ํ•œ๋‹ค.

    • ๊ฒŒ์‹œ๊ธ€ย ๋‚ด์šฉ์€ย 0๊ธ€์žย ์ด์ƒย ์ž‘์„ฑ๋˜์–ด์•ผย ํ•œ๋‹ค.(๋‚ด์šฉย ํ•„์ˆ˜ย ์•„๋‹˜)

    • ๊ฒŒ์‹œ๊ธ€ย ์ด๋ฏธ์ง€๋Š”ย 0๊ฐœย ์ด์ƒย ํฌํ•จ๋ ย ์ˆ˜ย ์žˆ๋‹ค.(์ด๋ฏธ์ง€ย ํ•„์ˆ˜ย ์•„๋‹˜)

    • ๊ฒŒ์‹œ๊ธ€์€ย ๊ณต๊ฐœ/๋น„๊ณต๊ฐœย ์„ค์ •์ดย ๊ฐ€๋Šฅํ•˜๋‹ค.

      • ๊ทธ๋ฃนย ๊ฒŒ์‹œ๋ฌผ์˜ย ๊ฒฝ์šฐ
        • ๊ณต๊ฐœย ->ย ๋ชจ๋“ ย ์‚ฌ๋žŒ์—๊ฒŒย ๊ณต๊ฐœย ๋ฐย ๊ทธ๋ฃน์—ย ์ถ”๊ฐ€
        • ๋น„๊ณต๊ฐœย ->ย ๊ทธ๋ฃน์—๊ฒŒ๋งŒย ๊ณต๊ฐœ
    • ๊ฒŒ์‹œ๊ธ€ย ์ˆ˜์ •์€ย ๊ฒŒ์‹œ๊ธ€์„ย ์ž‘์„ฑํ•œย ํšŒ์›/(๊ทธ๋ฃนย ๊ฒŒ์‹œ๋ฌผ์˜ย ๊ฒฝ์šฐ)๊ทธ๋ฃน์›๋งŒย ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ๊ฒŒ์‹œ๊ธ€ย ์‚ญ์ œ๋Š”ย ๊ฒŒ์‹œ๊ธ€์„ย ์ž‘์„ฑํ•œย ํšŒ์›/(๊ทธ๋ฃนย ๊ฒŒ์‹œ๋ฌผ์˜ย ๊ฒฝ์šฐ)๊ทธ๋ฃน์›/๊ด€๋ฆฌ์ž๋งŒย ๊ฐ€๋Šฅํ•˜๋‹ค.

    • ๊ฒŒ์‹œ๊ธ€ย ์‚ญ์ œ์˜ย ๊ฒฝ์šฐย ์‹ค์ œย DB์—์„œย ์‚ญ์ œ๋˜์ง€ย ์•Š๊ณ ย ์‚ญ์ œ ์ผ์ž๊ฐ€ย ์—…๋ฐ์ดํŠธย ๋œ๋‹ค.

      ->ย ์‚ญ์ œ ์ผ์ž๊ฐ€ย ์—…๋ฐ์ดํŠธย ๋œย ๊ฒŒ์‹œ๊ธ€์€ย ํŽ˜์ด์ง€์—์„œย ๋ณด์ด์ง€ย ์•Š๋Š”๋‹ค.

  • ํ•ด์‹œํƒœ๊ทธ

    • ๊ฒŒ์‹œ๊ธ€์—๋Š” ํ•ด์‹œํƒœ๊ทธ๊ฐ€ 0๊ฐœ ์ด์ƒ ๋“ฑ๋ก๋˜์–ด์•ผ ํ•œ๋‹ค.(ํ•ด์‹œํƒœ๊ทธ ํ•„์ˆ˜ ์•„๋‹˜)
    • ์ด๋ฏธ ์ €์žฅ๋œ ํ•ด์‹œํƒœ๊ทธ ์ค‘ ์›ํ•˜๋Š” ํƒœ๊ทธ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, ํƒœ๊ทธ๋ฅผ ํšŒ์›์ด ์ง์ ‘ ๋“ฑ๋กํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
    • ๊ฒŒ์‹œ๊ธ€์˜ ํ•ด์‹œํƒœ๊ทธ๋Š” 10๊ฐœ๊นŒ์ง€ ๋“ฑ๋ก ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํšŒ์›

    • ํšŒ์›์˜ ID๋Š” ์ด๋ฉ”์ผ ํ˜•์‹์œผ๋กœ ์ค‘๋ณต๋  ์ˆ˜ ์—†๋‹ค.
    • ํšŒ์›์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์˜์–ด์™€ ์ˆซ์ž๋ฅผ ๊ฐ™์ด ์จ์•ผ ํ•˜๊ณ  15์ž๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์—†๋‹ค.
    • ํšŒ์›์˜ ๋‹‰๋„ค์ž„์€ ์ค‘๋ณต ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํšŒ์›์˜ ๋‹‰๋„ค์ž„์€ ๋ถ€์ ์ ˆํ•œ ๋‹‰๋„ค์ž„์ผ์‹œ ์ œ์žฌ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • ํšŒ์›๋“ฑ๊ธ‰์€ ์ผ๋ฐ˜ํšŒ์›๊ณผ ๊ด€๋ฆฌ์ž๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
    • ํšŒ์›์ƒํƒœ๋Š” ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™”(์ž„์‹œ์ •์ง€, ์˜๊ตฌ์ •์ง€)๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
    • ํšŒ์›์ƒํƒœ๊ฐ€ ์ž„์‹œ์ •์ง€/๋น„ํ™œ์„ฑํ™”์ผ ๊ฒฝ์šฐ์—๋Š” ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ ์‚ฌ์šฉ์ด ์ œํ•œ ๋˜๊ณ  ๊ณ ๊ฐ์„ผํ„ฐ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ํšŒ์›์ด ํƒˆํ‡ดํ•  ์‹œ์—๋„ ์ •๋ณด๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.
    • ์ „ํ™”๋ฒˆํ˜ธ๋Š” ๋ฐ˜๋“œ์‹œ ๊ธฐ์ž…ํ•ด์•ผ ํ•œ๋‹ค.
    • ํšŒ์›์€ ํŒ”๋กœ์šฐ, ํŒ”๋กœ์›Œ๋ฅผ ๊ฐ–๋Š”๋‹ค.
    • ํŒ”๋กœ์›Œ๋Š” ํŒ”๋กœ์šฐ ํ•˜๋Š” ๋Œ€์ƒ์˜ ๊ณต๊ฐœ๋œ ์ •๋ณด๋ฅผ ์—ด๋žŒํ•  ์ˆ˜ ์žˆ๋‹ค(ํšŒ์›์ด ์†ํ•œ ๊ทธ๋ฃน, ํšŒ์›์ด ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ, ํšŒ์› ๋‹‰๋„ค์ž„)
  • ๊ทธ๋ฃน

    • ๊ทธ๋ฃน์€ ์ฒ˜์Œ์— ์ƒ์„ฑ๋  ๋•Œ ๋ณธ์ธ๋งŒ ํฌํ•จ๋˜์–ด ์žˆ๋Š”(1์ธ) ๊ทธ๋ฃน์ด ์ƒ์„ฑ๋œ๋‹ค. -๊ทธ๋ฃน์— ๋‹ค๋ฅธ ํšŒ์›์„ ์ดˆ๋Œ€ํ•  ์‹œ ํšŒ์›ID๋กœ ์ดˆ๋Œ€ํ•œ๋‹ค.
    • ๊ทธ๋ฃน ์ด๋ฆ„์„ ๋”ฐ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š์„ ์‹œ "(๊ทธ๋ฃน์„ ์ƒ์„ฑํ•œ ํšŒ์› ๋‹‰๋„ค์ž„)์˜ ๊ทธ๋ฃน"์œผ๋กœ ํ‘œ์‹œ๋œ๋‹ค.
    • ๊ทธ๋ฃน์— ๊ตฌ์„ฑ์›์„ ์ดˆ๋Œ€ ํ–ˆ์„ ๋•Œ '์ดˆ๋Œ€ ์ˆ˜๋ฝ' ํ›„์— ๊ทธ๋ฃน์— ํฌํ•จ๋œ๋‹ค.
    • ํšŒ์›(๋ณธ์ธ)์ด ์†ํ•œ ๊ทธ๋ฃน์„ ๊ณต๊ฐœ/๋น„๊ณต๊ฐœ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํšŒ์›(๋ณธ์ธ)์€ ๊ทธ๋ฃน์„ (์ƒ๋‹จ)๊ณ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๊ทธ๋ฃน์›์€ (๊ทธ๋ฃน ๋‚ด ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก, ๋ณธ์ธ์ด ์“ด ๊ฒŒ์‹œ๊ธ€ ์‚ญ์ œ, ๊ฒŒ์‹œ๊ธ€ ์ˆ˜์ •(๋ณธ์ธ ํฌํ•จ ๊ทธ๋ฃน์›), ๊ทธ๋ฃน ํƒˆํ‡ด, ๊ทธ๋ฃน ๋‚ด ๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ ์ž‘์„ฑ) ๊ถŒํ•œ์„ ๊ฐ–๋Š”๋‹ค.
    • ๊ทธ๋ฃน์žฅ์€ ๊ทธ๋ฃน์›์˜ ๊ถŒํ•œ์„ ํฌํ•จํ•ด ๊ทธ๋ฃน์› ์ถ”๋ฐฉ, ๊ทธ๋ฃน ์ด๋ฆ„ ์ˆ˜์ •, ๊ทธ๋ฃน์› ์ดˆ๋Œ€ ๊ถŒํ•œ, ๊ทธ๋ฃน ๊ณต๊ฐœ ์—ฌ๋ถ€ ๊ถŒํ•œ, ๊ทธ๋ฃน์žฅ ์œ„์ž„์„ ๊ฐ–๋Š”๋‹ค.
    • ๊ทธ๋ฃน์žฅ์ด ๊ทธ๋ฃน์„ ํƒˆํ‡ดํ•œ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ๋กœ ๊ทธ๋ฃน์— ํฌํ•จ๋œ ์‚ฌ๋žŒ์ด ๊ทธ๋ฃน์žฅ์ด ๋œ๋‹ค.
    • ์ด๋ฏธ ์ดˆ๋Œ€ํ•œ ๊ทธ๋ฃน์›์ด ์ˆ˜๋ฝ ๋˜๋Š” ๊ฑฐ์ ˆ์„ ํ•˜๊ธฐ ์ „(๋Œ€๊ธฐ ์ค‘)์ธ ๊ฒฝ์šฐ, ์žฌ์ดˆ๋Œ€๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์ฝ”์Šค

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

    • ์žฅ์†Œ ์นดํ…Œ๊ณ ๋ฆฌ(์Œ์‹์ , ์นดํŽ˜, ๋ฌธํ™”, ์•กํ‹ฐ๋น„ํ‹ฐ, ์‚ฐ์ฑ…, ๊ธฐํƒ€)
    • ์™ธ๋ถ€ API์—์„œ ๋ฐ›์•„์˜จ ์žฅ์†Œ๋ฅผ ์‚ฌ์šฉ์ž๊ฐ€ ์ ์ ˆํ•œ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ถ™์—ฌ ์žฅ์†Œ ๋“ฑ๋ก
    • ์žฅ์†Œ ๋“ฑ๋ก์‹œ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋ฌด์กฐ๊ฑด ๋ถ™์—ฌ์•ผ ํ•จ.
    • ์žฅ์†Œ๋ฅผ ๋“ฑ๋กํ•˜๊ธฐ ์ „์— ๋™์ผํ•œ ์ฃผ์†Œ ๋˜๋Š” ์ด๋ฆ„์œผ๋กœ ์ด๋ฏธ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š” ์ •๋ณด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•œ๋ฒˆ ํ™•์ธ ์‹œํ‚ค๊ณ  ๋“ฑ๋กํ•˜๋Š” ์ ˆ์ฐจ๋กœ ์ง„ํ–‰(๋™์ผํ•œ ์ฃผ์†Œ, ์ด๋ฆ„์ด ์—†๋Š” ๊ฒฝ์šฐ ํ™•์ธํ•˜์ง€ ์•Š์Œ)
    • ์žฅ์†Œ ๋ณ„์ ์„ ๋‚จ๊ธธ ๋•Œ ๊ฐ„๋‹จํ•œ ํ•œ ์ค„ ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑ ๊ฐ€๋Šฅ (๋ณ„์ ์€ 1 ~ 5๊ฐœ)

๐Ÿ“ฑ DDD(Event-Storming/Context-Map) ์„ค๊ณ„

DDD ์„ค๊ณ„ ๊ณผ์ •

  • ์ •์ฑ… ์ถ”๊ฐ€
  • ๋ฉ”๋ชจ ์ถ”๊ฐ€(๊ธฐ๋Šฅ์˜ ์ •ํ™•ํ•œ ์ •์˜, ๊ณ ๋„ํ™” ๊ฐ€๋Šฅ์„ฑ)
  • ๊ฒŒ์‹œ๊ธ€ / ๊ฒŒ์‹œ๊ธ€(๋ถ€๊ฐ€๊ธฐ๋Šฅ) / ๊ฒŒ์‹œ๊ธ€ ๋Œ“๊ธ€ / ์žฅ์†Œ / ํšŒ์› / ๊ทธ๋ฃน / ๊ณ„์ • ์ •๋ณด
  • Domain์œผ๋กœ ๋ถ„๋ฆฌ
  • Boundary(๊ฒฝ๊ณ„): ๊ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ๊ฒฝ๊ณ„๋ฅผ ์ •์˜ํ•จ. ์ด๋Š” ๋ชจ๋ธ์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ๋‚˜ํƒ€๋ƒ„.
  • Relationships(๊ด€๊ณ„): ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๋ชจ๋ธ๊ณผ์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•จ. ์ด๋Š” ๋ชจ๋ธ ๊ฐ„์— ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ†ต์‹ ์ด ํ•„์š”ํ•œ์ง€๋ฅผ ๋ณด์—ฌ์คŒ.
  • Shared Kernel(๊ณต์œ  ์ปค๋„): ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ฐ„์— ๊ณต์œ ๋˜๋Š” ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋ƒ„. ์ด๋Š” ๊ฐ ๋ชจ๋ธ์ด ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ณตํ†ต ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ„.
  • Customer/Supplier Relationships(๊ณ ๊ฐ/๊ณต๊ธ‰์ž ๊ด€๊ณ„): ์„œ๋กœ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ฐ„์— ๋ฐœ์ƒํ•˜๋Š” ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ํ๋ฆ„์„ ๋‚˜ํƒ€๋ƒ„. ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ชจ๋ธ ๊ฐ„์— ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ†ต์‹ ์ด ์ด๋ฃจ์–ด์ง€๋Š”์ง€๋ฅผ ๋ณด์—ฌ์คŒ.

์œ„์˜ 4๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ด์„œ Context Mapping


* Context Map

  • ํ•ต์‹ฌ ๊ธฐ๋Šฅ ์šฐ์„  ๊ตฌํ˜„
  • Root๊ฐ„ 1:N, 1:1 ๊ด€๊ณ„ ์„ค์ •

โš™๏ธ ๋ชจ๋ธ๋ง

1. ๊ฐœ๋… ๋ชจ๋ธ๋ง

2. ๋…ผ๋ฆฌ ๋ชจ๋ธ๋ง

3. ๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง

ERD Cloud ํ™œ์šฉ

๐Ÿ“œ DDL

DDL
CREATE TABLE `member_info` (
   `member_id`   INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `member_email`   VARCHAR(127)   NOT NULL UNIQUE,
   `password`   VARCHAR(31)   NOT NULL,
   `member_name`   VARCHAR(63)   NOT NULL,
   `member_nickname`   VARCHAR(31)   NOT NULL UNIQUE,
   `member_number`   VARCHAR(15)   NOT NULL,
   `join_date`   VARCHAR(255)   NOT NULL,
   `withdrawal_date`   VARCHAR(255)   NULL,
   `member_grade`   ENUM('ROLL_MEMBER', 'ROLL_ADMIN')   NOT NULL,
   `member_status`  CHAR(1) NOT NULL    DEFAULT 'Y'
);

CREATE TABLE `post` (
   `post_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `post_title`   VARCHAR(255)   NOT NULL,
   `post_content`   VARCHAR(255)   NOT NULL,
   `post_date`   VARCHAR(255)   NOT NULL,
   `post_delete_date`   VARCHAR(255)   NULL,
   `member_id`   INT   NOT NULL,
   `course_id`   INT   NOT NULL,
   `is_post_public`   CHAR(1) NOT NULL    DEFAULT 'Y',
   `member_count`   ENUM('ONE', 'TWO', 'MANY')   NOT NULL,
   `group_id` INT NULL
);

CREATE TABLE `plrecipe_group` (
   `group_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `group_name`   VARCHAR(255)   NOT NULL,
   `is_group_public`   CHAR(1) NOT NULL    DEFAULT 'Y',
   `group_create_date`   VARCHAR(255)   NOT NULL,
   `group_withdrawal_date` VARCHAR(255) NULL,
   `group_comment`   VARCHAR(255)   NULL,
   `group_status`  CHAR(1) NOT NULL    DEFAULT 'Y'
);

CREATE TABLE `follow_info` (
   `follow_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `user_follow`   INT   NOT NULL,
   `user_follower`  INT   NOT NULL,
   UNIQUE KEY unique_follow_info(user_follow, user_follower)
);

CREATE TABLE `place_star` (
   `star_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `star_point`   INT   NOT NULL,
   `star_comment`   VARCHAR(255)   NULL,
   `place_id`   INT   NOT NULL,
   `member_id`   INT   NOT NULL,
   UNIQUE KEY unique_place_star(place_id, member_id)
);

CREATE TABLE `place` (
   `place_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `place_name`   VARCHAR(127)   NOT NULL,
   `place_location`   VARCHAR(255)   NOT NULL,
   `place_phone_num`   VARCHAR(15)   NULL,
   `place_category_id`   INT   NOT NULL,
   UNIQUE KEY unique_place (place_name, place_location)
);

CREATE TABLE `image` (
   `image_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `image_location`   VARCHAR(255)   NOT NULL,
   `image_name`   VARCHAR(255)   NOT NULL,
   `post_id`   INT   NOT NULL,
   `member_id`   INT   NOT NULL,
   `group_id`   INT   NOT NULL,
   `image_rename`   VARCHAR(255)   NULL
);

CREATE TABLE `course` (
   `course_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `course_name`   VARCHAR(127)   NULL,
   `member_id`   INT   NOT NULL
);

CREATE TABLE `group_member` (
   `group_member_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `groupmember_sequence`   INT   NOT NULL,
   `invite_state_id`   ENUM('ACCEPT', 'WAITING', 'DENY')   NOT NULL  DEFAULT 'WAITING',
   `group_id`   INT   NOT NULL,
   `member_id`   INT NOT NULL,
    UNIQUE KEY unique_group_member (group_id, member_id)
);

CREATE TABLE `course_place` (
   `place_course_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `place_id`   INT   NOT NULL,
   `course_id`   INT   NOT NULL,
   `place_sequence`   INT   NOT NULL
);

CREATE TABLE `place_category` (
   `place_category_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `place_category_name`   VARCHAR(63)   NOT NULL
);

CREATE TABLE `hashtag` (
   `hashtag_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `hashtag_title`   VARCHAR(255)   NOT NULL UNIQUE
);

CREATE TABLE `post_hashtag` (
   `post_hashtag_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `hashtag_id`   INT   NOT NULL,
   `post_id`   INT   NOT NULL,
   UNIQUE KEY unique_post_hashtag (hashtag_id, post_id)
);

CREATE TABLE `post_like` (
   `post_like_id`   INT   NOT NULL AUTO_INCREMENT PRIMARY KEY,
   `member_id`   INT   NOT NULL,
   `post_id`   INT   NOT NULL
);

-- ALTER TABLE `member_info` ADD CONSTRAINT `PK_MEMBER_INFO` PRIMARY KEY (
--    `member_id`
-- );
ALTER TABLE `post` ADD CONSTRAINT `FK_plrecipe_group_TO_post_1` FOREIGN KEY (
   `group_id`
)
REFERENCES `plrecipe_group` (
   `group_id`
);

ALTER TABLE `post` ADD CONSTRAINT `FK_member_info_TO_post_1` FOREIGN KEY (
   `member_id`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `post` ADD CONSTRAINT `FK_course_TO_post_1` FOREIGN KEY (
   `course_id`
)
REFERENCES `course` (
   `course_id`
);

ALTER TABLE `follow_info` ADD CONSTRAINT `FK_member_info_TO_follow_info_1` FOREIGN KEY (
   `user_follow`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `follow_info` ADD CONSTRAINT `FK_member_info_TO_follow_info_2` FOREIGN KEY (
   `user_follower`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `place_star` ADD CONSTRAINT `FK_place_TO_place_star_1` FOREIGN KEY (
   `place_id`
)
REFERENCES `place` (
   `place_id`
);

ALTER TABLE `place_star` ADD CONSTRAINT `FK_member_info_TO_place_star_1` FOREIGN KEY (
   `member_id`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `place` ADD CONSTRAINT `FK_place_category_TO_place_1` FOREIGN KEY (
   `place_category_id`
)
REFERENCES `place_category` (
   `place_category_id`
);


ALTER TABLE `image` ADD CONSTRAINT `FK_post_TO_image_1` FOREIGN KEY (
   `post_id`
)
REFERENCES `post` (
   `post_id`
);

ALTER TABLE `image` ADD CONSTRAINT `FK_member_info_TO_image_1` FOREIGN KEY (
   `member_id`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `image` ADD CONSTRAINT `FK_plrecipe_group_TO_image_1` FOREIGN KEY (
   `group_id`
)
REFERENCES `plrecipe_group` (
   `group_id`
);

ALTER TABLE `course` ADD CONSTRAINT `FK_member_info_TO_course_1` FOREIGN KEY (
   `member_id`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `group_member` ADD CONSTRAINT `FK_plrecipe_group_TO_group_member_1` FOREIGN KEY (
   `group_id`
)
REFERENCES `plrecipe_group` (
   `group_id`
);

ALTER TABLE `group_member` ADD CONSTRAINT `FK_member_info_TO_group_member_1` FOREIGN KEY (
   `member_id`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `course_place` ADD CONSTRAINT `FK_place_TO_course_place_1` FOREIGN KEY (
   `place_id`
)
REFERENCES `place` (
   `place_id`
);

ALTER TABLE `course_place` ADD CONSTRAINT `FK_course_TO_course_place_1` FOREIGN KEY (
   `course_id`
)
REFERENCES `course` (
   `course_id`
);

ALTER TABLE `post_hashtag` ADD CONSTRAINT `FK_hashtag_TO_post_hashtag_1` FOREIGN KEY (
   `hashtag_id`
)
REFERENCES `hashtag` (
   `hashtag_id`
);

ALTER TABLE `post_hashtag` ADD CONSTRAINT `FK_post_TO_post_hashtag_1` FOREIGN KEY (
   `post_id`
)
REFERENCES `post` (
   `post_id`
);

ALTER TABLE `post_like` ADD CONSTRAINT `FK_member_info_TO_post_like_1` FOREIGN KEY (
   `member_id`
)
REFERENCES `member_info` (
   `member_id`
);

ALTER TABLE `post_like` ADD CONSTRAINT `FK_post_TO_post_like_1` FOREIGN KEY (
   `post_id`
)
REFERENCES `post` (
   `post_id`
);

โšช Project Architecture(ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜)

1. Monolith Architecture(๋ชจ๋†€๋ฆฌ์Šค ์•„ํ‚คํ…์ฒ˜) 2. MicroService Architecture(๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜)
- ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋“ค์ด '์• ํ”Œ๋ฆฌ์ผ€์ด์…˜' ํ•˜๋‚˜์— ์ „๋ถ€ ๋ชจ์—ฌ์žˆ์Œ
- ๊ฐ ์„œ๋น„์Šค ์‹คํ–‰ํ•  ๊ฒฝ์šฐ ํ•˜๋‚˜๋กœ ๋ชจ์—ฌ์žˆ๋Š” ์„œ๋ฒ„๋กœ ์š”์ฒญ
- ์„œ๋ฒ„์—์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
- ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์„ ๊ธฐ์ค€์œผ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์„œ๋น„์Šค
- ์„œ๋น„์Šค๋“ค์€ ๋…๋ฆฝ์ ์ธ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅ
- ์„œ๋น„์Šค๋“ค์€ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์„œ๋กœ ํ†ต์‹ 
- ์„œ๋น„์Šค๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†Œ์œ 

ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜


  • ์œ ๋ ˆ์นด ์„œ๋ฒ„์™€ ์œ ๋ ˆ์นด ํด๋ผ์ด์–ธํŠธ๋กœ ๊ตฌ์„ฑ๋จ
  • ์œ ์ €๋Š” ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์„œ๋น„์Šค์™€ ๋งค์นญ๋จ(Member, Group, Post, Place)
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฐ ๋กœ๊ทธ์ธ ์ธ์ฆ์„ ๊ตฌํ˜„ํ•จ(Spring Security 6 version ํ™œ์šฉ)
  • ๋กœ๊ทธ์ธ ์‹œ, ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•„ ์ดํ›„ ์ธ์ฆ์ด ํ•„์š”ํ•œ ์„œ๋น„์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•จ(JWT(java web token) ํ™œ์šฉ)
  • ์žฅ์†Œ ์„œ๋น„์Šค๋Š” API๋ฅผ ํ†ตํ•ด ์žฅ์†Œ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ด(์™ธ๋ถ€ Api๋Š” Kakaomap api ์‚ฌ์šฉ)
  • ๊ฐ ์„œ๋น„์Šค๋ผ๋ฆฌ ํ†ต์‹ ํ•˜์—ฌ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์Œ
  • (ํ˜„์žฌ DB๋Š” ํ•˜๋‚˜์˜ DB๋ฅผ ์‚ฌ์šฉํ•จ)

๐ŸŸก Eureka Server

  1. ์„œ๋น„์Šค ๋“ฑ๋ก: ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ, ํ•ด๋‹น ์„œ๋น„์Šค๋ฅผ Eureka ์„œ๋ฒ„์— ๋“ฑ๋ก.

  2. ์„œ๋น„์Šค ๊ฒ€์ƒ‰: ํด๋ผ์ด์–ธํŠธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ์œ„์น˜๋ฅผ ๊ฒ€์ƒ‰. ์ด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋Š” ๋™์ ์œผ๋กœ ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ํ†ต์‹ .

  3. ์„œ๋น„์Šค ์ƒํƒœ ๊ฐ์‹œ: Eureka๋Š” ๋“ฑ๋ก๋œ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋“ค์˜ ์ƒํƒœ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐ์‹œํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์ธ์Šคํ„ด์Šค๋“ค์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜๊ณ  ์ œ๊ฑฐํ•จ.

๐ŸŸ  API ๊ฐœ๋ฐœ ๋ฐ ์„ค๊ณ„ ๋„๊ตฌ

Postman Swagger
1. API ์š”์ฒญ ๋ฐ ์‘๋‹ต ํ…Œ์ŠคํŠธ: Postman์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ HTTP ๋ฉ”์„œ๋“œ(GET, POST, PUT, DELETE ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API ์—”๋“œํฌ์ธํŠธ์— ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ  ํ—ค๋”, ์ฟ ํ‚ค, ์ธ์ฆ ๋“ฑ ๋‹ค์–‘ํ•œ ์š”์ฒญ ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ฐ›์€ ์‘๋‹ต์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.
2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฐ ๋ณ€์ˆ˜ ํ™œ์šฉ: Postman์—์„œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ(๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ํ”„๋กœ๋•์…˜ ๋“ฑ)์— ๋Œ€ํ•œ ์„ค์ •์„ ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์š”์ฒญ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅ. ๋˜ํ•œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ์š”์ฒญ์„ ์ƒ์„ฑ ๊ฐ€๋Šฅ.
3. ๋ชจ๋‹ˆํ„ฐ๋ง: Postman์—์„œ๋Š” API์˜ ์„ฑ๋Šฅ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋„ ์ œ๊ณต.
1. ๋ฌธ์„œ ์ž๋™ ์ƒ์„ฑ: Swagger๋Š” API์˜ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž๋™์œผ๋กœ API ๋ฌธ์„œ๋ฅผ ์ƒ์„ฑ. ์ด ๋ฌธ์„œ์—๋Š” API์˜ ์—”๋“œํฌ์ธํŠธ, ๋งค๊ฐœ๋ณ€์ˆ˜, ์‘๋‹ต ํ˜•์‹, ์ธ์ฆ ๋ฐฉ๋ฒ• ๋“ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ด ํฌํ•จ.
2. ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ API ํ…Œ์ŠคํŠธ: Swagger UI๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด API๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒํ•œ ํ™˜๊ฒฝ์„ ์ œ๊ณต. ๊ฐœ๋ฐœ์ž๋“ค์€ Swagger UI๋ฅผ ํ†ตํ•ด API ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์‘๋‹ต์„ ํ™•์ธ.

๐Ÿ”ด ํ…Œ์ŠคํŠธ

ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์ •์˜
Member

Login

Regist Member

Modify Member

Password Encryption

All Member Select

Select By MemberId

Withdraw Member

Follow
Insert Follow

Search Follower

Search Follwing

Search By FollowID

Delete Follow

Post

Regist Post

Modify Post

Regist Post Like

Select All Post

Delete Post

Insert HashTag

Select Like By Post

Select Member Posts

Select HashTag By Post

Select Post By MemberCount

Select Post By Status

HashTag
Insert HashTag

Select HashTag By Post

Delete HashTag

Place

Regist Place

Place Using KakaoAPI

Regist Star (To place)

Modify Star

Delete Place

Delete Star

Select All Place

Select Place By PlaceId

Select Place By Filter

Select Star By MemberId

Select Star By Place

Course
Regist Course

Modify Course

Delete Course

Select Course Bt Member

Select Place By CourseID

Select Places By CourseID

Group

Regist Group

Invite Group

Modify Group

Delete Group

Accept Request

Select All Group

Select Group By Public Status

Withdrawal Group

๐Ÿ’Ž ํšŒ๊ณ 

ย ย ํŒ€ย ์›ย ย ย  ํšŒ๊ณ ๋ก
๋ฐฐ์„ฑ๋ฏผ ย ์ฃผ์ œ๋Š” 'ํ•„์š”์„ฑ'์„ ๊ณ ๋ คํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ, ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ์ฆ๊ฒ๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ธก๋ฉด๋„ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜(MSA) ํ˜•ํƒœ๋กœ ์ง„ํ–‰ํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ์‰ฝ์ง€ ์•Š์•˜์ง€๋งŒ ํŒ€์›๋“ค๊ณผ์˜ ๊ต๋ฅ˜๋ฅผ ์ด‰์ง„ํ•˜๊ณ  ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•œ MSA๋ฅผ ๊ตฌ์ถ•ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ, ๋‹ค์–‘ํ•œ ์„ธ๋ถ„ํ™” ๋ฐฉ์‹์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ๊ตฌํ˜„ ๊ธฐ๊ฐ„์˜ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์ง€ ๋ชปํ•œ ์ ์ด ์•„์‰ฌ์› ์ง€๋งŒ, ์ด๋ฅผ ๊ณ ๋„ํ™”ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ๋” ๋‚˜์€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ณ ์ž ํ•˜๋Š” ์š•์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ย ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ  ์Šคํƒ์„ ํ™œ์šฉํ•˜๋ฉด์„œ ์ด์ „์— ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ๋ณต์Šตํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ํŠนํžˆ MyBatis(์กฐํšŒ)์™€ JPA(์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ)๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์œ ๋ ˆ์นด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์„ ์ ์šฉํ–ˆ๋Š”๋ฐ, ์ด๋ฅผ ํ†ตํ•ด ์‹ค์ œ ํšŒ์‚ฌ์—์„œ์˜ ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ย ์ œ๊ฐ€ ๋งก์€ ์—ญํ•  ์ค‘์—์„œ๋Š” ์•”ํ˜ธํ™”์™€ ์•„ํ‚คํ…์ฒ˜ ์ œ์ž‘์ด ๊ธฐ์–ต์— ๋‚จ์Šต๋‹ˆ๋‹ค. Spring Security์˜ ์ง€์†์ ์ธ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์•”ํ˜ธํ™” ๋ถ€๋ถ„์ด ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๊ณ , MSA๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ ํ† ํฐ ๋ฐฉ์‹(JWT)์„ ํ†ตํ•œ ์ธ์ฆ ๋ฐ ์ธ๊ฐ€๊ฐ€ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค. ์•„ํ‚คํ…์ฒ˜๋Š” ์ •ํ•ด์ง„ ํ˜•์‹์ด ์—†์—ˆ์ง€๋งŒ ์‹ค์ œ ์‚ฌ๋ก€์™€ ์„ฑ๊ณต ์‚ฌ๋ก€๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ตฌ์„ฑํ–ˆ์œผ๋‚˜, ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ณ ๋ คํ•œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์‹ถ์€ ์•„์‰ฌ์›€์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.
ย ํŒ€ ํ”„๋กœ์ ํŠธ๋Š” ๊ธ์ •์ ์ธ ๋ถ„์œ„๊ธฐ ์†์—์„œ ํŒ€์›๋“ค์€ ๊ฐ์ž์˜ ์—ญํ• ์„ ์ž˜ ์ˆ˜ํ–‰ํ•˜๊ณ  ์˜๊ฒฌ์„ ๋‚˜๋ˆ„์–ด์ฃผ์–ด ํ”„๋กœ์ ํŠธ๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋Œ์–ด๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์ธ์ง€ ํ”„๋กœ์ ํŠธ ์ดํ›„์—๋„ ๋” ๋ฐœ์ „ํ•˜๊ณ ์ž ํ•˜๋Š” ์š•์‹ฌ์ด ์ƒ๊ฒผ์œผ๋ฉฐ, ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ๊ณผ ๋„๊ตฌ์— ๋Œ€ํ•œ ํ•™์Šต์— ๋Œ€ ํฅ๋ฏธ๋ฅผ ๋Š๋ผ๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๋ถ€์กฑํ•œ ๋ถ€๋ถ„๊ณผ ๊ถ๊ธˆํ•œ ๋ถ€๋ถ„์„ ๋ณด์™„ํ•˜๊ณ  ๋ฐœ์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊พธ์ค€ํžˆ ๋…ธ๋ ฅํ•ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ๋„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•œ์†Œํ˜œ ย ์ด๋ฒˆ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ์ด์ „๋ณด๋‹ค๋Š” ์ƒ์†Œํ•˜์ง€ ์•Š์€ ์ฃผ์ œ๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜์–ด์„œ ๊ณผ์ •์„ ์ข€ ๋” ์ฆ๊ธธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด์ „์˜ ๊ฒฝํ—˜์„ ํ† ๋Œ€๋กœ ๋ฏธ๋ฆฌ ์žฅ์†Œ ๋ธ”๋Ÿญ๊ณผ ์ฝ”์Šค ๋“ฑ ์ฃผ์š”ํ•œ ๊ฐœ๋…์„ ํŒ€์›๋“ค๊ณผ ๋งž์ถฐ๊ฐ€๋ฉฐ ์ข€ ๋” ์ˆ˜์›”ํ•˜๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ย jsp, servlet์„ ์ด์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ์ ์ด ์žˆ์—ˆ๋Š”๋ฐ, ์Šคํ”„๋ง์„ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋‹ˆ ๊ฐ™์€ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•ด ๋” ์ œ๋Œ€๋กœ ๋œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด ์‹ ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ์กฐํšŒ๋Š” MyBatis, ์‚ฝ์ž…/์ˆ˜์ •/์‚ญ์ œ๋Š” JPA๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•˜๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์„ ํ™œ์šฉํ•˜๋ฉฐ ๊ฐ ์žฅ๋‹จ์ ์„ ์ง์ ‘ ๋Š๋ผ๊ณ  ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ž˜ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ๊ณ ๋ฏผํ•ด๋ณผ ์ˆ˜ ์žˆ๋˜ ์‹œ๊ฐ„์ด์—ˆ์Šต๋‹ˆ๋‹ค.
ย ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ€์žฅ ์ข‹์•˜๋˜ ์ ์€ msa ๋ฐฉ์‹์„ ๋ฐฐ์šฐ๊ณ  ๊ฐ ์„œ๋น„์Šค๋ฅผ ๋‚˜๋ˆ ์„œ ๊ตฌํ˜„ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ๋ ˆ์นด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ด์šฉํ•˜๊ณ  ๊ฒŒ์ดํŠธ์›จ์ด๊นŒ์ง€ ์ง์ ‘ ์„ค์ •ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋˜ ์˜๋ฏธ์žˆ๋Š” ๊ฒฝํ—˜์ด์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. feign client๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ์„œ๋น„์Šค์™€ ํ†ต์‹ ํ•˜๊ณ  ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ณผ์ •๋„ ๋ฟŒ๋“ฏํ•˜๊ณ  ์žฌ๋ฐŒ์—ˆ์Šต๋‹ˆ๋‹ค.
ย ์ด์ „ ํ”„๋กœ์ ํŠธ๋ณด๋‹ค ๋” ๋ฐœ์ „๋œ ๋ชจ์Šต์œผ๋กœ ์ด๋ฒˆ ๊ตฌํ˜„์„ ํ†ตํ•ด ํŒ€์›๋“ค๊ณผ ํ•จ๊ป˜ ๊ณ ๋ฏผํ•˜๊ณ  ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
์œค์žฌ์€ ย ๋†€๊ฑฐ๋ฆฌ ์ฝ”์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ฃผ์ œ๋กœ ํ•˜๋Š” ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ์ˆ˜์—…์—์„œ ๋ฐฐ์› ๋˜ MyBatis์˜ remix ๋ฐฉ์‹์„ ์ฑ„ํƒํ•œ ๋‹ค์ค‘์—ด ์กฐํšŒ, JPA๋ฅผ ์‚ฌ์šฉํ•œ CRUD ์—์„œ ๋งŽ์€ ์˜ค๋ฅ˜๋ฅผ ๊ฒช์œผ๋ฉฐ myBatis์™€ JPA์˜ ์žฅ๋‹จ์ ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๊ณ  resultMap ์ž‘์„ฑ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๋“ฑ ์•„์ง ํ™•์‹คํžˆ ์•Œ์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•ด๋ณด๋ฉฐ ๊นจ์šฐ์น  ์ˆ˜ ์žˆ์–ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค.
ย ๋˜ํ•œ Eureka cloud๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ MSA๋กœ ๋‚˜๋ˆ„์–ด server์™€ gateway๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ํ›„ DB์—์„œ join์„ ์ด์šฉํ•ด ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ feign client๋ฅผ ์‚ฌ์šฉํ•ด ์ฃผ๊ณ ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ์ ์šฉํ•ด๋ณด๋ฉฐ ํฅ๋ฏธ๋ฅผ ๋งŽ์ด ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค.
์กฐ์ˆ˜๋นˆ ย ๊ธฐํš ๋‹จ๊ณ„์—์„œ ๊ธฐ์กด ์„œ๋น„์Šค์™€๋Š” ์ฐจ๋ณ„์„ฑ์ด ์žˆ๋˜ ์–ด๋Š์ •๋„ ์ฐธ์กฐํ•  ๋ ˆํผ๋Ÿฐ์Šค๋„ ์žˆ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜๋Š” ๊ฒŒ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ต๊ณ  ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ๊ณผ์ •์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํŒ€์›๋“ค์ด ๊ฐ์ž ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งŒ์กฑํ–ˆ๋˜ ์„œ๋น„์Šค์™€ ์•„์‰ฌ์› ๋˜ ์ ์„ ๊ณต์œ ํ•˜๋ฉฐ ์ ํ•ฉํ•œ ์ฃผ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ดํ›„ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋”๋ผ๋„ ๊ธฐํš ๋‹จ๊ณ„๋ฅผ ๊ผผ๊ผผํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์ค‘์š”ํ•œ์ง€ ๊นจ๋‹ฌ์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ย ๋˜ํ•œ, ๊ตฌํ˜„ํ•  ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์‚ฌ์†Œํ•œ ๊ฐœ๋…์ด๋ผ๋„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•œ ์ƒํƒœ์—์„œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ๋„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ๋ชปํ–ˆ๋˜ ์„œ๋ฒ„ ๋ฐ ํ†ต์‹  ์ด์Šˆ๋“ค์„ ์ง์ ‘ ๋‹ค๋ค„๋ณด๋ฉฐ ์ˆ˜์—…์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ๋‚ด์šฉ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ž์—ฐ์Šค๋ ˆ ๋ณต์Šตํ•˜๋ฉฐ ์ฒดํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.
ย MSA ๋ฐฉ์‹์œผ๋กœ ํŒ€์›๋ณ„๋กœ ํ•œ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ๋งก์•„ ๊ตฌํ˜„ํ•˜๋ฉฐ ์ฑ…์ž„๊ฐ์„ ๊ฐ€์ง€๊ณ  ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋Š” ๋ณธ์ธ์˜ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋”๋ผ๋„ ์„œ๋กœ ์˜๊ฒฌ์„ ๊ณต์œ ํ•˜๋ฉฐ ์ œ๋Œ€๋กœ ๋œ ํ˜‘์—…์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๊ฐ„๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๊ธฐ๋Šฅ์„ ๋งก์•„ ์ง์ ‘ ์ค‘๊ฐ„๊ฐ์ฒด ๊ตฌํ˜„ ๋ฐ ํ†ต์‹ ์„ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ์•„์‰ฌ์›€์ด ์žˆ์–ด ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์—๋Š” ์–‘์ด ๋ถ€๋‹ด์ด ๋˜์–ด๋„ ๊ตฌํ˜„ํ•  ๋ถ„๋Ÿ‰์ด ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๋งก์•„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
๊น€์žฌํ˜„ ย ์ฒ˜์Œ์— ๋ฌด์Šจ ์ฃผ์ œ๋ฅผ ํ• ์ง€ ํ† ๋ก ํ•˜๋Š” ์‹œ๊ฐ„๋„ ์ฆ๊ฑฐ์› ๊ณ , ์ปคํ”Œ ์•ฑ ์•„์ด๋””์–ด๋กœ ์‹œ์ž‘ํ•ด์„œ ์ €ํฌ PLRECIPE ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ์˜ค๊ฒŒ๋œ ๊ณผ์ •๋„ ๊ต‰์žฅํžˆ ์žฌ๋ฐŒ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ทธ๋™์•ˆ ์ˆ˜์—…ํ—ค์„œ ๋ฐฐ์› ๋˜ Mybatis ๋ฐฉ์‹์œผ๋กœ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋ฉฐ, ํŠนํžˆ xml ํŒŒ์ผ์—์„œ ์ˆ˜๋งŽ์€ resultMap ์˜ค๋ฅ˜๋ฅผ ์ ‘ํ•˜๊ณ  sql ์ฟผ๋ฆฌ๋ฌธ์„ ๋ณต์Šตํ•  ์ˆ˜ ์žˆ์—ˆ๋˜์ ์ด ์ข‹์•˜์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ JPA ๋ฐฉ์‹์œผ๋กœ C(R)UD ๊ธฐ๋Šฅ๋˜ํ•œ ๊ตฌํ˜„ํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๋ฉฐ mybatis ๋ฐฉ์‹๊ณผ ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ย ๋‹ค๋งŒ ์ œ๊ฐ€ ๋งก์€ ๊ทธ๋ฃน ์„œ๋น„์Šค ๊ธฐ๋Šฅ์—์„œ db์—์„œ ์กฐ์ธ์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๊ฐ’๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฒŒ ์•„๋‹Œ ์™„๋ฒฝํ•˜์ง„ ์•Š์ง€๋งŒ ์ค€ msa ๋ฐฉ์‹์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ feignclient๋ฅผ ํ†ตํ•ด ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ ๊ทธ ๊ธฐ๋Šฅ์€ ๊ธฐํ•œ๋‚ด ๋ชปํ•ด์„œ ์ข€ ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ํ”„๋ก ํŠธ ๊ฐœ๋ฐœ ๋‹จ๊ณ„๊นŒ์ง€ ์ด์–ด๋‚˜๊ฐ„๋‹ค๋ฉด ๋” ๊ณ ๋„ํ™” ํ•ด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹ค๋“ค ์ •๋ง ๊ณ ์ƒ๋งŽ์œผ์…จ์Šต๋‹ˆ๋‹ค!!

About

๐Ÿ‚ ๋ฐฐ์„ฑ๋ฏผ, ๐Ÿ… ํ•œ์†Œํ˜œ, ๐Ÿ‡ ์œค์žฌ์€, ๐Ÿ‰ ์กฐ์ˆ˜๋นˆ, ๐Ÿ„ ๊น€์žฌํ˜„

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 77.8%
  • HTML 14.0%
  • CSS 4.5%
  • JavaScript 3.4%
  • Vue 0.3%