# [[Hexagonal Architecture]] ## ๐Ÿ“Œ Brief Summary ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜(ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด)๋Š” ์•Œ๋ฆฌ์Šคํ…Œ์–ด ์ฝ”ํฌ๋ฒˆ(Alistair Cockburn)์ด ๊ณ ์•ˆํ•œ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์œผ๋กœ, ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค(๋„๋ฉ”์ธ) ๋กœ์ง์„ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ™์€ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ์™„์ „ํžˆ ๊ณ ๋ฆฝ์‹œํ‚ค๋Š” ๊ตฌ์กฐ๋‹ค [1-3]. ์‹œ์Šคํ…œ์˜ ๊ฐ ์š”์†Œ๊ฐ€ ์ •์˜๋œ 'ํฌํŠธ'์™€ '์–ด๋Œ‘ํ„ฐ'๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ†ต์‹ ํ•˜๋„๋ก ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ๋ชฉ์ ์ด๋‹ค [1, 3]. ## ๐Ÿ“– Core Content * **์•„ํ‚คํ…์ฒ˜ ์ฒ ํ•™๊ณผ ๊ตฌ์กฐ์  ํŠน์ง•**: ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋Š” ์ „ํ†ต์ ์ธ N-Tier(๊ณ„์ธตํ˜•) ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ ์œก๊ฐํ˜• ๋ชจ์–‘์€ ๊ณ„์ธต์  ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—ฐ๊ฒฐ ์ง€์ (ํฌํŠธ)์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”ํƒ€ํฌ๋‹ค [4]. ์ด ํŒจํ„ด์€ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)์„ ํ™œ์šฉํ•˜์—ฌ ๋„๋ฉ”์ธ ๋กœ์ง์ด ์™ธ๋ถ€ ์ฝ˜ํฌ๋ฆฌํŠธ ํด๋ž˜์Šค์— ์ง์ ‘ ์˜์กดํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑ์ž ๋“ฑ์„ ํ†ตํ•ด ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋„๋ก ๊ตฌ์„ฑ๋œ๋‹ค [5]. * **ํฌํŠธ(Ports)์™€ ์–ด๋Œ‘ํ„ฐ(Adapters)**: * **ํฌํŠธ(Ports)**: ์‹œ์Šคํ…œ์ด ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ์œ ์ฆˆ์ผ€์ด์Šค์™€ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ค [6, 7]. ์‹œ์Šคํ…œ์ด *๋ฌด์—‡์„* ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ช…์‹œํ•˜๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์œผ๋กœ ์ง„์ž…ํ•˜๋Š” ์ž…๊ตฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [6]. * **์–ด๋Œ‘ํ„ฐ(Adapters)**: ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์™ธ๋ถ€ ์„ธ๊ณ„ ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋ณ€ํ™˜ํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ๊ตฌํ˜„์ฒด๋‹ค [7, 8]. * **ํ”„๋ผ์ด๋จธ๋ฆฌ ์–ด๋Œ‘ํ„ฐ(Primary Adapters)**: ์™ธ๋ถ€ ์š”์ฒญ์„ ๋ฐ›์•„ ์‹œ์Šคํ…œ ๋‚ด๋ถ€๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, HTTP ์ปจํŠธ๋กค๋Ÿฌ, API ๊ฒŒ์ดํŠธ์›จ์ด, CLI ๋“ฑ์ด ์ด์— ํ•ด๋‹นํ•œ๋‹ค [8, 9]. * **์„ธ์ปจ๋”๋ฆฌ ์–ด๋Œ‘ํ„ฐ(Secondary Adapters)**: ์‹œ์Šคํ…œ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์™ธ๋ถ€ API, ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋“ฑ์˜ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์œผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์—ญํ• ์„ ๋‹ด๋‹นํ•œ๋‹ค [9]. * **์‹ค๋ฌด์  ๊ณ„์ธต ๋ถ„๋ฆฌ์™€ DTO(๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด) ์ฒ˜๋ฆฌ**: ์‹ค์ „ ํ”„๋กœ์ ํŠธ์—์„œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋Š” ์ฃผ๋กœ ๋„๋ฉ”์ธ(Domain), ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Application), ์ธํ”„๋ผ/์–ด๋Œ‘ํ„ฐ(Infrastructure/Adapter) ๊ณ„์ธต์œผ๋กœ ๋‚˜๋‰œ๋‹ค [3, 10]. ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์™ธ๋ถ€ ํ†ต์‹ ์— ์ง์ ‘ ๋…ธ์ถœํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ์ „์†ก ๊ฐ์ฒด(DTO)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด DTO๋“ค์€ ์™ธ๋ถ€ ์ธํ„ฐ๋ž™์…˜๊ณผ ์ธํ”„๋ผ์˜ ๊ฒฐํ•ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต(Application Layer)์— ์ •์˜๋˜๊ณ  ์œ ์ง€๋˜์–ด์•ผ ํ•œ๋‹ค [11, 12]. ## โš–๏ธ Trade-offs & Caveats * **์žฅ์  (Trade-offs/Benefits)**: ํ•ต์‹ฌ ๋„๋ฉ”์ธ ์ฝ”๋“œ๊ฐ€ ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ์ˆ ์— ์˜์กดํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ธฐ์ˆ  ์Šคํƒ ๋ณ€๊ฒฝ ์‹œ(์˜ˆ: RDBMS์—์„œ NoSQL๋กœ ์ „ํ™˜) ๋„๋ฉ”์ธ ๋กœ์ง์„ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ์ ์‘์„ฑ์ด ๋งค์šฐ ๋›ฐ์–ด๋‚˜๋‹ค [10, 13, 14]. ๋˜ํ•œ ๊ฐœ๋ณ„ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฌ์›Œ์ง„๋‹ค [13, 15]. * **์ œ์•ฝ ์‚ฌํ•ญ (Caveats)**: ๋„๋ฉ”์ธ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ์ธํ”„๋ผ ๊ฐ„์— ํฌํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  DTO์™€ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ƒ๋‹นํ•œ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [10, 16, 17]. ๋”ฐ๋ผ์„œ ๋งˆ๊ฐ ๊ธฐํ•œ์ด ๋งค์šฐ ์ด‰๋ฐ•ํ•˜๊ฑฐ๋‚˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด ๋‹จ์ˆœํ•˜๊ณ  ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์—„๊ฒฉํ•œ ๋ถ„๋ฆฌ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณต์žก์„ฑ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค [17]. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์˜คํžˆ๋ ค ๋‹จ์ˆœํ•œ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)๊ฐ€ ๋” ๋‚˜์€ ๋Œ€์•ˆ์ด ๋  ์ˆ˜ ์žˆ๋‹ค [17]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [๊ด€๊ณ„ ์œ ํ˜• A: ์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] - [[Clean Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ๋กœ๋ฒ„ํŠธ C. ๋งˆํ‹ด์˜ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜๋Š” ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๋„๋ฉ”์ธ ๋กœ์ง์„ ๋ณดํ˜ธํ•˜๋Š” ์ฒ ํ•™์„ ๊ณต์œ ํ•˜๋Š” ๊ตฌ์กฐ์  ํŒจํ„ด์ด๋‹ค [2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์•„ํ‚คํ…์ฒ˜์˜ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‚ด๋ถ€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์™ธ๋ถ€์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ DB๋กœ๋ถ€ํ„ฐ ๊ณ ๋ฆฝ์‹œํ‚ค๋Š” ์„ค๊ณ„ ์›์น™์˜ ๋ณธ์งˆ์„ ํญ๋„“๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [2]. - [[Layered Architecture]] - ์—ฐ๊ฒฐ ์ด์œ : ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ๋ณต์žก์„ฑ์ด ๋ถ€๋‹ด๋  ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์  ์„ค๊ณ„ ๋ฐฉ์‹์ด์ž ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ทน๋ณตํ•˜๊ณ ์ž ํ–ˆ๋˜ ์ „ํ†ต์ ์ธ ํŒจํ„ด์ด๋‹ค [2, 17]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ˆ˜์ง์  ๋‹ค์ธต ๊ตฌ์กฐ(N-Tier)๊ฐ€ ๊ฐ–๋Š” ์˜์กด์„ฑ์˜ ํ•œ๊ณ„์™€ ์ด๋ฅผ ๋‹ค๊ฐ๋„์˜ ์ž…์ถœ๋ ฅ(ํฌํŠธ) ๊ตฌ์กฐ๋กœ ์žฌํŽธํ•œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ๊ตฌ์กฐ์  ์ฐจ์ด์ ์„ ๋ช…ํ™•ํžˆ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค [2, 4]. #### [๊ด€๊ณ„ ์œ ํ˜• B: ๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - [[Spring Boot]] - ์—ฐ๊ฒฐ ์ด์œ : ์‹ค์ „ ๋ฐฑ์—”๋“œ ํ™˜๊ฒฝ์—์„œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด ๊ฐ€์žฅ ํ™œ๋ฐœํ•˜๊ฒŒ ์ฑ„ํƒ๋˜๊ณ  ๊ตฌํ˜„๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ Java ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์˜์กด์„ฑ ์ฃผ์ž…(DI) ์ปจํ…Œ์ด๋„ˆ์™€ Spring Data JPA ๋“ฑ์„ ํ™œ์šฉํ•ด ์‹ค์ œ ์ฝ”๋“œ ์ƒ์—์„œ ์–ด๋–ป๊ฒŒ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ํ…œํ”Œ๋ฆฟ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค [3, 18, 19]. - [[DTO (Data Transfer Object)]] - ์—ฐ๊ฒฐ ์ด์œ : ํ—ฅ์‚ฌ๊ณ ๋‚  ๊ตฌ์กฐ์—์„œ ์ƒํ˜ธ์ž‘์šฉ ๊ณ„์ธต(UI/Controller)๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์Аํ™”ํ•˜์—ฌ ๋„๋ฉ”์ธ์„ ๋ณดํ˜ธํ•˜๋Š” ๋ฐ ์“ฐ์ด๋Š” ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ ์ „์†ก ๋งค๊ฐœ์ฒด๋‹ค [11, 20]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ปจํŠธ๋กค๋Ÿฌ, ์œ ์ฆˆ์ผ€์ด์Šค, ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋งคํ•‘ํ•˜๊ณ  ์ „๋‹ฌํ•ด์•ผ ์•„ํ‚คํ…์ฒ˜์˜ ์บก์Аํ™” ๊ฒฝ๊ณ„๊ฐ€ ํŒŒ๊ดด๋˜์ง€ ์•Š๋Š”์ง€ ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค [11, 12]. ### Deeper Research Questions - ๋Œ€๊ทœ๋ชจ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ DTO์™€ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ๋ฐ์ดํ„ฐ ๋งคํ•‘(Mapper) ๋กœ์ง์ด ์ดˆ๋ž˜ํ•˜๋Š” ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ์™€ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ํ†ต์ œํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - Spring Boot ์ƒํƒœ๊ณ„์˜ AOP(๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)๋‚˜ ์ธํ„ฐ์…‰ํ„ฐ ๊ฐ™์€ ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ ๊ธฐ์ˆ ์„ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์˜ ์–ด๋А ๊ณ„์ธต(Layer)์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์•„ํ‚คํ…์ฒ˜ ์›์น™์— ๊ฐ€์žฅ ๋ถ€ํ•ฉํ•˜๋Š”๊ฐ€? - ๋„๋ฉ”์ธ ๊ณ„์ธต ๋‚ด๋ถ€์— ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์†์ ์ธ ๊ฒ€์ฆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์˜ˆ: Jakarta Validation)์˜ ์‚ฌ์šฉ์„ ์–ด๋””๊นŒ์ง€ ํ—ˆ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€? - ํ”„๋ผ์ด๋จธ๋ฆฌ ์–ด๋Œ‘ํ„ฐ(Controller ๋“ฑ)์—์„œ ์ˆ˜์‹ ํ•œ ์™ธ๋ถ€ ์š”์ฒญ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต์˜ DTO๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฑ…์ž„์€ ์ •ํ™•ํžˆ ์–ด๋–ค ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹ด๋‹นํ•ด์•ผ ๊ฒฐํ•ฉ๋„๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - NestJS์™€ Spring Boot ํ™˜๊ฒฝ์—์„œ ๊ฐ๊ฐ ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์˜์กด์„ฑ ์ฃผ์ž…(DI) ์‹œ์Šคํ…œ ์ฐจ์ด๊ฐ€ ํฌํŠธ์™€ ์–ด๋Œ‘ํ„ฐ ์—ฐ๊ฒฐ ๋ฐฉ์‹์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** Java ๋ฐ Spring Boot ํ™˜๊ฒฝ์—์„œ ๊ตฌํ˜„ํ•  ๋•Œ, ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(๋„๋ฉ”์ธ ์„œ๋น„์Šค)์€ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์ˆœ์ˆ˜ํ•œ ํ˜•ํƒœ(POJO)๋กœ ์ž‘์„ฑํ•˜๊ณ  ์™ธ๋ถ€ DB์™€์˜ ํ†ต์‹ ์€ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์–ด๋Œ‘ํ„ฐ(Repository Adapter)๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค [3, 18, 19]. - **System Design:** ๋‹ค์ˆ˜์˜ UI ํ”Œ๋žซํผ(์›น, ์•ฑ)๊ณผ ๋‹ค์ˆ˜์˜ ์™ธ๋ถ€ ์—ฐ๋™(๊ฒฐ์ œ API, ๋ฉ”์‹œ์ง• ํ)์„ ๋™์‹œ์— ์ง€์›ํ•ด์•ผ ํ•˜๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์‹œ, ์ฝ”์–ด ๋กœ์ง์€ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ ์ƒˆ๋กœ์šด ํ†ต์‹  ๊ทœ๊ฒฉ์— ๋งž๋Š” ์–ด๋Œ‘ํ„ฐ๋งŒ ์ถ”๊ฐ€(Plug-in)ํ•˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค [13]. - **Operation / Maintenance:** ์„œ๋น„์Šค ์šด์˜ ๋„์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์„œ๋น„์Šค ์ œ๊ณต์ž๋ฅผ ๊ต์ฒดํ•˜๋”๋ผ๋„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต๊ณผ ๋„๋ฉ”์ธ ๊ณ„์ธต์˜ ์ฝ”๋“œ๋Š” ์ผ์ ˆ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ณ  ์ธํ”„๋ผ ์–ด๋Œ‘ํ„ฐ๋งŒ ๊ต์ฒดํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜ ๋ฆฌ์Šคํฌ๋ฅผ ๊ทน์ ์œผ๋กœ ๋‚ฎ์ถ˜๋‹ค [10, 16]. - **Learning Path:** ์ „ํ†ต์ ์ธ MVC ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ•™์Šตํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜์กด์„ฑ ์—ญ์ „ ์›์น™(DIP)๊ณผ ๋„๋ฉ”์ธ ๋ถ„๋ฆฌ์˜ ์ค‘์š”์„ฑ์„ ๊นจ๋‹ฌ์€ ํ›„, ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ์—ญ๋Ÿ‰์„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€์œผ๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜๋กœ ๊ฑฐ์ณ์•ผ ํ•˜๋Š” ์‹ฌํ™” ํ•™์Šต ๊ณผ์ •์ด๋‹ค [2, 5]. - **My Project Relevance:** ์š”๊ตฌ์‚ฌํ•ญ์ด ์ง€์†์ ์œผ๋กœ ๋ณ€๋™ํ•˜๊ณ  ์™ธ๋ถ€ ์‹œ์Šคํ…œ ํ†ตํ•ฉ์ด ์žฆ์œผ๋ฉฐ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋ฃฐ์„ ์žฅ๊ธฐ์ ์œผ๋กœ ํ™•์žฅํ•ด์•ผ ํ•˜๋Š” ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ์— ํ•ต์‹ฌ์ ์ธ ๊ธฐ๋ณธ ๋ผˆ๋Œ€๋กœ ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค [13]. ### Adjacent Topics - [[Domain-Driven Design (DDD)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ—ฅ์‚ฌ๊ณ ๋‚  ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ฐ€์žฅ ์•ˆ์ชฝ์— ๊ณ ๋ฆฝ๋˜๋Š” '๋„๋ฉ”์ธ'์„ ์–ด๋–ป๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ๊ฐ’ ๊ฐ์ฒด(Value Object)๋‚˜ ์• ๊ทธ๋ฆฌ๊ฑฐํŠธ(Aggregate)๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ชจ๋ธ๋งํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์‹ฌ์ธต์ ์ธ ๋น„์ฆˆ๋‹ˆ์Šค ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์œผ๋กœ ํ•™์Šต์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. --- *Last updated: 2026-05-03*