๐Ÿ‘จ‍๐Ÿ‘ฉ‍๐Ÿ‘ง‍๐Ÿ‘ฆ Project/๐Ÿ“ฉ DevTalk

ํ—ฅ์‚ฌ๊ณ ๋‚ (Hexagonal) ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณต๋ถ€ํ•ด๋ณด์ž (with Layered, Clean Architecture)

DevPoong 2023. 7. 6. 19:52

โœข ๋ฐ๋ธŒํ†ก ํ”„๋กœ์ ํŠธ์—์„œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•ด ๋ณด์ž๊ณ  ์ œ์•ˆํ•ด ๋ณด๊ธฐ ์œ„ํ•ด ๊ณต๋ถ€ํ•˜์˜€๊ณ  ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜์˜€๋‹ค. ์ ์šฉํ•ด๋ณด๊ณ ์ž ํ•˜๋Š” ์ด์œ ๋Š” ๋ฐ๋ธŒํ†ก์€ MSA๋กœ์จ Port&Adapter ์•„ํ‚คํ…์ฒ˜์ธ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์ข‹์„ ๊ฒƒ ๊ฐ™์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

(1) ์ „ํ†ต์ ์ธ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์˜ ๋ฌธ์ œ

์ผ๋ฐ˜์ ์ธ 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฃผ๋„ ์„ค๊ณ„๋ฅผ ์œ ๋„ํ•œ๋‹ค.

์ „ํ†ต์ ์ธ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์˜ ํ† ๋Œ€๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋‹ค.
์›น ๊ณ„์ธต์€ ๋„๋ฉ”์ธ ๊ณ„์ธต์— ์˜์กดํ•˜๊ณ , ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ์˜์†์„ฑ ๊ณ„์ธต์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ DB์— ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค.

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

ORM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋„๋ฉ”์ธ ๊ณ„์ธต์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜์†์„ฑ ๊ณ„์ธต๊ณผ์˜ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ์œ ๋ฐœํ•œ๋‹ค.

 

2. ๊ณ„์ธต์˜ ๊ฒฝ๊ณ„๋ฅผ ๊ฐ•์ œํ•  ์ˆ˜ ์—†๋‹ค.

์ „ํ†ต์ ์ธ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ์ „์ฒด์ ์œผ๋กœ ์ „์šฉ๋˜๋Š” ์œ ์ผํ•œ ๊ทœ์น™์€, ํŠน์ •ํ•œ ๊ณ„์ธต์—์„œ๋Š” ๊ฐ™์€ ๊ณ„์ธต์— ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋‚˜ ์•„๋ž˜์— ์žˆ๋Š” ๊ณ„์ธต์—๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ๋งŒ์•ฝ์— ์ƒ์œ„ ๊ณ„์ธต์— ์œ„์น˜ํ•œ ์ปดํฌ๋„ŒํŠธ์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ฐ„๋‹จํžˆ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์•„๋ž˜ ๊ณ„์ธต์œผ๋กœ ๋‚ด๋ฆฌ๋ฉด ๋œ๋‹ค.
ํ•˜์ง€๋งŒ, ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ์ˆจ์–ด์žˆ๋‹ค๊ฐ€ ์ ์  ์Œ“์—ฌ ํฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.


  3.   ๊ณ„์ธต์„ ๊ฑด๋„ˆ๋›ฐ์–ด ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

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

์›น ๊ณ„์ธต์— ๋„๋ฉ”์ธ ๋กœ์ง์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜์–ด ์‘์ง‘๋„๊ฐ€ ๋งŽ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ, ์›น ๊ณ„์ธต์„ ๋‹จ์œ„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒฝ์šฐ ์˜์†์„ฑ ๊ณ„์ธต๊นŒ์ง€ Mocking ํ•ด์•ผ ํ•˜๋Š” ๋ณต์žก๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ„๋‹ค.

 

(2) ์ „ํ†ต์ ์ธ ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์˜ ๋Œ€์•ˆ

 1. ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (SRP : Single Responsibility Principle)

"์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ์˜ค์ง ํ•œ ๊ฐ€์ง€๋ฟ์ด์–ด์•ผ ํ•œ๋‹ค."

๋ณ€๊ฒฝํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ผ๋ฉด ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ๋Š” ๋”ฑ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ, ์–ด๋– ํ•œ ๋‹ค๋ฅธ ์ด์œ ๋กœ๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด์„œ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

 2.  ์˜์กด์„ฑ ์—ญ์ „ ์›์น™ (DIP: Dependency Inversion Principle)

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

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ์˜์†์„ฑ ๊ณ„์ธต์— ์˜์กดํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜์†์„ฑ ๊ณ„์ธต์ด ๋ณ€๊ฒฝ๋  ๋•Œ๋งˆ๋‹ค ์ž ์žฌ์ ์œผ๋กœ ๋„๋ฉ”์ธ ๊ณ„์ธต๋„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.
ํ•˜์ง€๋งŒ, ๋„๋ฉ”์ธ ์ฝ”๋“œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ์ธ๋ฐ ์ด๊ฒƒ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์€ ์ผ์ด๋‹ค.

๋”ฐ๋ผ์„œ, DIP: "์ฝ”๋“œ์ƒ์˜ ์–ด๋– ํ•œ ์˜์กด์„ฑ์ด๋“  ๊ทธ ๋ฐฉํ–ฅ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค." ์›์น™์„ ์ ์šฉํ•˜์—ฌ ์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
์—”ํ‹ฐํ‹ฐ๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๋„๋ฉ”์ธ ์ฝ”๋“œ๋Š” ์ด ์—”ํ‹ฐํ‹ฐ๋“ค์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ผ์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋„๋ฉ”์ธ ๊ณ„์ธต์œผ๋กœ ์˜ฌ๋ฆฐ๋‹ค.


์ด์ œ ์˜์†์„ฑ ๊ณ„์ธต์˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„๋ฉ”์ธ ๊ณ„์ธต์— ๋‘์–ด์„œ ์„œ๋น„์Šค๋Š” ๊ฐ™์€ ๊ณ„์ธต์— ์žˆ๋Š” ๋ ˆํฌ์ง€ํ† ๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋ฏ€๋กœ ๋” ์ด์ƒ ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ์˜์†์„ฑ ๊ณ„์ธต์— ์˜์กดํ•˜์ง€ ์•Š๊ณ ,
์˜คํžˆ๋ ค ์˜์†์„ฑ ๊ณ„์ธต์ด ๋„๋ฉ”์ธ ๊ณ„์ธต์— ์˜์กดํ•˜๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.(์—ญ์ „๋ผ๋ฒ„๋ฆผ)


(3) ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜

1. ์˜์กด์„ฑ ๊ทœ์น™

๋ชจ๋“  ์†Œ์Šค์ฝ”๋“œ ์˜์กด์„ฑ์€ ์™ธ๋ถ€์—์„œ ๋‚ด๋ถ€๋กœ, ๊ณ ์ˆ˜์ค€ ์ •์ฑ…์„ ํ–ฅํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์€ ํ”„๋ ˆ์ž„์›Œํฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, UI ๊ธฐ์ˆ , ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ์—๋„ DIP์˜ ๋„์›€์œผ๋กœ ๋ชจ๋“  ์˜์กด์„ฑ์ด ๋„๋ฉ”์ธ ์ฝ”๋“œ๋ฅผ ํ–ฅํ•˜๊ณ  ์žˆ๋‹ค.

ํ•ด๋‹น ์•„ํ‚คํ…์ฒ˜์˜ Core์—๋Š” ์ฃผ๋ณ€ UseCase์—์„œ ์ ‘๊ทผํ•˜๋Š” ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋“ค์ด ์žˆ๋‹ค.
UseCase๋Š” ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋น„์Šค๋ผ๊ณ  ๋ถˆ๋ €๋˜ ๊ฒƒ๋“ค์ธ๋ฐ, SRP ์›์น™์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ์œ ์Šค์ผ€์ด์Šค๋ณ„๋กœ ์„ธ๋ถ„ํ™”๋˜์–ด ๊ทธ๋ ‡๊ฒŒ ๋ถ€๋ฅธ๋‹ค.

Core ์ฃผ๋ณ€์œผ๋กœ๋Š” ๋น„์ง€๋‹ˆ์Šค ๊ทœ์น™์„ ์ง€์›(ex: ์˜์†์„ฑ, UI)ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์žˆ๋‹ค. ์˜์กด์„ฑ์ด ์•ˆ์ชฝ์œผ๋กœ๋งŒ ํ๋ฆ„์œผ๋กœ์จ ์™ธ๋ถ€์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๋„๋ฉ”์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋„๋ฉ”์ธ ๊ณ„์ธต์ด ์˜์†์„ฑ์ด๋‚˜ UI ๊ฐ™์€ ์™ธ๋ถ€ ๊ณ„์ธต๊ณผ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌ๋ผ์•ผ ํ•˜๋ฏ€๋กœ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ๋ชจ๋ธ์„ ๊ฐ ๊ณ„์ธต์—์„œ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค.

์˜์†์„ฑ ๊ณ„์ธต์—์„œ ORM์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, DB์— ๊ด€๋ จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ, ๋„๋ฉ”์ธ ๊ณ„์ธต์—์„œ๋Š” ORM์„ ์“ฐ๋˜์ง€ ๋ญ˜ ์“ฐ๋˜์ง€ ๊ด€์‹ฌ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜์†์„ฑ ๊ณ„์ธต๊ณผ๋Š” ๋‹ค๋ฅธ ์ˆœ์ˆ˜ํ•œ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ด๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋„๋ฉ”์ธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ค€๋‹ค.

๋‚ด ์ƒ๊ฐ์„ ์ž ๊น ๋งํ•˜์ž๋ฉด ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๊ณ  ์ถ”ํ›„์— ๋ณ€๊ฒฝ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” "๊ตณ์ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ?"๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํ•˜๋‚˜๋กœ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

 

(4) ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜

์œก๊ฐํ˜• ์•„ํ‚คํ…์ฒ˜ ๋˜๋Š” Port&Adapter ์•„ํ‚คํ…์ฒ˜๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š”๋ฐ, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์—์„œ ์กฐ๊ธˆ ๋” ์ผ๋ฐ˜์ ์ธ ์šฉ์–ด๋กœ ์„ค๋ช…ํ•œ ์•„ํ‚คํ…์ฒ˜์ด๋‹ค.

์œก๊ฐํ˜• ๋‚ด์—๋Š” ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ์™€ ์ด์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” UseCase๊ฐ€ ์กด์žฌํ•œ๋‹ค. ์œก๊ฐํ˜•์—์„œ ์™ธ๋ถ€๋กœ ํ–ฅํ•˜๋Š” ์˜์กด์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— Clean Architecture์—์„œ ์ œ์‹œํ•œ ์˜์กด์„ฑ ๊ทœ์น™์ด ๊ทธ๋Œ€๋กœ ์ ์šฉ๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์œก๊ฐํ˜• ๋ฐ”๊นฅ์—๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์›น ์–ด๋Œ‘ํ„ฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์›น ์–ด๋Œ‘ํ„ฐ, ์ธ์ปค๋ฐ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์–ด๋Œ‘ํ„ฐ, ์•„์›ƒ๊ณ ์ž‰ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ฝ”์–ด์™€ ์™ธ๋ถ€์˜ ์–ด๋Œ‘ํ„ฐ ๊ฐ„์˜ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด ํฌํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค.

์ธ์ปค๋ฐ ์–ด๋Œ‘ํ„ฐ์—๊ฒŒ๋Š” ํฌํŠธ๊ฐ€ ์ฝ”์–ด์— ์žˆ๋Š” ์œ ์Šค์ผ€์ด์Šค ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์— ์˜ํ•ด ๊ตฌํ˜„๋˜๊ณ  ์–ด๋Œ‘ํ„ฐ์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋œ๋‹ค.
์•„์›ƒ๊ณ ์ž‰ ์–ด๋Œ‘ํ„ฐ์—๊ฒŒ๋Š” ํฌํŠธ๊ฐ€ ์–ด๋Œ‘ํ„ฐ์— ์˜ํ•ด ๊ตฌํ˜„๋˜๊ณ  ์ฝ”์–ด์— ์˜ํ•ด์„œ ํ˜ธ์ถœ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋œ๋‹ค.

 

๋‹ค์Œ ํŽธ์—์„œ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.