# [[Mock Objects (๊ฐ€์งœ ๊ฐ์ฒด)]] ## ๐Ÿ“Œ Brief Summary Mock Objects(๊ฐ€์งœ ๊ฐ์ฒด)๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(Unit Test)๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์™„๋ฒฝํ•œ ๊ฒฉ๋ฆฌ(Isolation)๋ฅผ ๋‹ฌ์„ฑํ•˜๊ณ  ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์ œ ํ˜‘๋ ฅ ๊ฐ์ฒด(Collaborator)๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ํ…Œ์ŠคํŠธ ๋Œ€์—ญ(Test Double)์˜ ์ผ์ข…์ž…๋‹ˆ๋‹ค [1, 2]. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์‹ค์ œ ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ์š”์†Œ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค๊ณ , ํ…Œ์ŠคํŠธ ์ž‘์„ฑ์ž๊ฐ€ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋‘” ์‘๋‹ต(canned responses)์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •๋ฉ๋‹ˆ๋‹ค [2]. ๋ฆฌํŒฉํ† ๋ง์˜ ๋งฅ๋ฝ์—์„œ๋Š” ํŠนํžˆ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์—์„œ ๋ณต์žกํ•œ ์™ธ๋ถ€ ์ž์›(DB, ๋„คํŠธ์›Œํฌ ๋“ฑ)์˜ ์˜์กด์„ฑ์„ ๋Š์–ด๋‚ด๊ณ  ์•ˆ์ „ํ•œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [3, 4]. ## ๐Ÿ“– ๊ธฐCore Content * **ํ…Œ์ŠคํŠธ ๊ฒฉ๋ฆฌ์™€ ๋ถ€์ˆ˜ ํšจ๊ณผ(Side Effect) ๋ฐฉ์ง€** ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ์‹œ, ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์ด ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ ๋“ฑ ๋А๋ฆฌ๊ฑฐ๋‚˜ ๋ถ€์ˆ˜ ํšจ๊ณผ๊ฐ€ ํฐ ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, ์ด๋ฅผ Mock ๊ฐ์ฒด๋‚˜ Stub(์Šคํ…)์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค [1]. ์ด๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์„ค์ • ์—†์ด ์‹œ์Šคํ…œ์„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ฒฉ๋ฆฌ(solitary)ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [1, 2]. * **๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์—์„œ์˜ ์˜์กด์„ฑ ๋ถ„๋ฆฌ ๋„๊ตฌ** ํ…Œ์ŠคํŠธ๊ฐ€ ์—†๋Š” ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ๊ธฐ์กด ๋™์ž‘์„ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. ๋งˆ์ดํด ํŽ˜๋”์Šค(Michael Feathers)๋Š” ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” '์ ‘์ (Seam)'์„ ์ฐพ์•„, ์™ธ๋ถ€ API ํ˜ธ์ถœ ๋“ฑ์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™”ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์‹œ์— ๊ฐ€์งœ ๊ฐ์ฒด(Mock)๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค [3]. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฌด๊ฑฐ์šด ์ž์›์˜ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๊ฐ€๋ฒผ์šด ๋Œ€์ฒด๋ฌผ๋กœ ๊ฐˆ์•„ ๋ผ์›Œ ํ…Œ์ŠคํŠธ๋ผ๋Š” ์•ˆ์ „๋ง์„ ํ™•๋ณดํ•œ ๋’ค์— ๋ฆฌํŒฉํ† ๋ง์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [4]. * **ํ…Œ์ŠคํŠธ์˜ ๊ตฌ์กฐํ™” ๋ฐ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ ํ–ฅ์ƒ** Mock ๊ฐ์ฒด๋Š” ์‹ค์ œ ์ƒ์‚ฐ ์ฝ”๋“œ์— ์‚ฌ์šฉ๋  ๊ฐ์ฒด๋ฅผ ๊ฐ€์งœ๋กœ ๊ต์ฒดํ•˜์—ฌ, ์˜ˆ์ƒ ๊ฐ€๋Šฅํ•œ ๋ฐ˜์‘์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค [2]. ์˜ˆ๋ฅผ ๋“ค์–ด, Mockito ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ €์žฅ์†Œ ๋Œ€์‹  ์Šคํ…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ ์ •์˜๋œ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋‹จ์ˆœํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค [5]. * **AI ๊ธฐ๋ฐ˜ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ์—์„œ์˜ ํ™œ์šฉ** ์ตœ๊ทผ LLM(๊ฑฐ๋Œ€์–ธ์–ด๋ชจ๋ธ)์„ ํ†ตํ•œ ์ž๋™ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ ์‹œ์—๋„ Mock ๊ฐ์ฒด๊ฐ€ ์ค‘์š”ํ•˜๊ฒŒ ๋‹ค๋ค„์ง‘๋‹ˆ๋‹ค. ์—ฐ๊ตฌ์— ๋”ฐ๋ฅด๋ฉด ๋ชจ๋ธ์ด ๊ณตํ†ต์˜ ์„ค์ • ๋กœ์ง, ํ‘œ์ค€ํ™”๋œ Mocking ํŒจํ„ด, ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ์™€ ๋กœ์ง์˜ ๋ถ„๋ฆฌ๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜๋Š” ์ธํ”„๋ผ๋ฅผ ์ž๊ฐ€ ์ƒ์„ฑํ•˜๊ธฐ๋„ ํ•˜๋ฉฐ, ์š”์ฒญ ๊ฐ€๋กœ์ฑ„๊ธฐ์— ๊ธฐ๋ฐ˜ํ•œ API Mocking ๊ณ„์ธต์„ ๊ตฌ์„ฑํ•˜์—ฌ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค [6, 7]. ## โš–๏ธ Trade-offs & Caveats * **๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ๊ณผ์˜ ๊ณผ๋„ํ•œ ๊ฒฐํ•ฉ (Brittleness)** ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์— ๋„ˆ๋ฌด ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜๋ฉด(์˜ˆ: ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ Mocking ์‚ฌ์šฉ), ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ๊ฐ€ ๊นจ์ง€๋Š” ์ทจ์•ฝ์„ฑ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๋ฒˆ๊ฑฐ๋กœ์›Œ์ง‘๋‹ˆ๋‹ค [8]. * **Mock๊ณผ Stub์˜ ์šฉ์–ด ํ˜ผ์šฉ** Mock๊ณผ Stub์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ํ…Œ์ŠคํŠธ ๋Œ€์—ญ(Test Double)์ด์ง€๋งŒ, ๊ฐœ๋ฐœ์ž๋“ค ์‚ฌ์ด์—์„œ ์ข…์ข… ์šฉ์–ด๊ฐ€ ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„๋˜์ง€ ์•Š๊ณ  ํ˜ผ์šฉ๋˜์–ด ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [2]. * **AI ํ…Œ์ŠคํŠธ ์ƒ์„ฑ ์‹œ์˜ ํ•œ๊ณ„** LLM์„ ํ™œ์šฉํ•ด ์ž๋™ํ™”๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๋ชจ๋ธ์ด ์ถฉ๋ถ„ํ•œ Mocking ๋Šฅ๋ ฅ์„ ๋ณด์ด์ง€ ๋ชปํ•˜๋Š”(insufficient mocking capabilities) ๋ฌธ์ œ์ ์ด ๋ณด๊ณ ๋œ ๋ฐ” ์žˆ์Šต๋‹ˆ๋‹ค [9]. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ํ›…(internal hooks)์— ๋Œ€ํ•œ Mocking์„ ๊ธˆ์ง€ํ•˜๋Š” ๋“ฑ์˜ ๋ช…์‹œ์ ์ธ ํ”„๋กฌํ”„ํŠธ ๋ฐ ๊ทœ์น™(rule file) ์„ค์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [10]. ## ๐Ÿ”— Knowledge Connections ### Related Concepts #### [ํ…Œ์ŠคํŠธ ๋ฐ ํ’ˆ์งˆ ๊ด€๋ฆฌ ์•„ํ‚คํ…์ฒ˜] - [[Test Doubles (ํ…Œ์ŠคํŠธ ๋Œ€์—ญ)]] - ์—ฐ๊ฒฐ ์ด์œ : Mock Objects์™€ Stub ๋ชจ๋‘ ํ…Œ์ŠคํŠธ ๋Œ€์—ญ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ˜„ ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค [2]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ํ‰๋‚ด ๋‚ด์–ด ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ์›๋ฆฌ์™€ ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฉ๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜. - [[Seam (์ ‘์ )]] - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง ์‹œ, ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  Mock ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค [3]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ๋‹จ์ ˆ์‹œํ‚ค๊ณ  ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„ ๊ธฐ๋ฒ• ๋ฐ ๋ฆฌํŒฉํ† ๋ง์˜ ์ค€๋น„ ๊ณผ์ •. - [[Unit Tests (๋‹จ์œ„ ํ…Œ์ŠคํŠธ)]] - ์—ฐ๊ฒฐ ์ด์œ : Mock Objects๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„์˜ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ์˜์กด์„ฑ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด ์ง‘์ค‘์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 11]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ…Œ์ŠคํŠธ ํ”ผ๋ผ๋ฏธ๋“œ์˜ ๊ธฐ์ดˆ์ด์ž, ๋น ๋ฅธ ๋ฆฌํŒฉํ† ๋ง ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ํ™˜๊ฒฝ. #### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] - [[Mockito]] - ์—ฐ๊ฒฐ ์ด์œ : Java ํ™˜๊ฒฝ์—์„œ ์‹ค์ œ ํด๋ž˜์Šค๋ฅผ ๋Œ€์ฒดํ•˜์—ฌ ๊นกํ†ต ์‘๋‹ต(canned responses)์„ ์ •์˜ํ•˜๋Š” Stub/Mock์„ ์ƒ์„ฑํ•  ๋•Œ ๋„๋ฆฌ ์“ฐ์ด๋Š” ํ‘œ์ค€ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค [5]. - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ฝ”๋“œ ์ƒ์—์„œ Mock ๊ฐ์ฒด๋ฅผ ์‹ค์ œ๋กœ ์„ค์ •ํ•˜๊ณ , 'Arrange, Act, Assert' ํŒจํ„ด์„ ์ ์šฉํ•˜๋Š” ๊ตฌ์ฒด์  ๊ตฌํ˜„ ๋ฐฉ์‹. ### Deeper Research Questions - Mock ๊ฐ์ฒด์™€ Stub ๊ฐ์ฒด์˜ ๊ตฌ์กฐ์ , ํ–‰๋™์  ์ฐจ์ด์ ์€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ด๋ฉฐ ๊ฐ๊ฐ ์–ด๋–ค ํ…Œ์ŠคํŠธ ์ƒํ™ฉ์—์„œ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ธ๊ฐ€? - ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ ์‹œ์Šคํ…œ์—์„œ ์ ‘์ (Seam)์„ ์ฐพ์•„๋‚ด๊ณ  ๊ธฐ์กด ๊ตฌ์กฐ๋ฅผ ๋ง๊ฐ€๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ Mock ๊ฐ์ฒด๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฆฌํŒฉํ† ๋ง ํŒจํ„ด์€ ๋ฌด์—‡์ธ๊ฐ€? - ๋‚ด๋ถ€ ๊ตฌํ˜„๊ณผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ณผ๋„ํ•œ Mocking์ด ๋ฆฌํŒฉํ† ๋ง ์‹œ ํ…Œ์ŠคํŠธ๋ฅผ ๊นจ์ง€๊ฒŒ ๋งŒ๋“œ๋Š” ์ทจ์•ฝ์„ฑ(Brittleness)์„ ์–ด๋–ป๊ฒŒ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? - AI ์ฝ”๋”ฉ ์—์ด์ „ํŠธ์—๊ฒŒ ๋ณต์žกํ•œ ์˜์กด์„ฑ ๊ตฌ์กฐ์˜ ์ฝ”๋“œ๋ฅผ ์ฃผ๊ณ  Mocking ๊ธฐ๋ฐ˜์˜ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ์„ ์ง€์‹œํ•  ๋•Œ, ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์„ ๋ง‰๊ณ  ์ •ํ™•๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•œ ํ”„๋กฌํ”„ํŒ… ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? - ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์˜์กด์„ฑ์„ Mockingํ•˜๋Š” ๊ณ ๋ฆฝํ˜•(Solitary) ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ์‹ค์ œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ˜‘๋ ฅํ˜•(Sociable) ํ…Œ์ŠคํŠธ ์‚ฌ์ด์˜ ๋ฐธ๋Ÿฐ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ์กฐ์ •ํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ### Practical Application Contexts - **Implementation:** Mockito์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋„์ž…ํ•˜์—ฌ ์˜์กด ๊ฐ์ฒด๋ฅผ ์Šคํ…(stub)์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ํŠน์ • ์ž…๋ ฅ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ์˜ˆ์ƒ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ’์„ ์ •์˜ํ•ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [5]. - **System Design:** ํ…Œ์ŠคํŠธ ์‹œ์ ์— ์ง„์งœ ์ž์›(DB ๋“ฑ) ๋Œ€์‹  ๊ฐ€์งœ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก, ์™ธ๋ถ€ ์„œ๋น„์Šค๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ˜ธ์ถœ๋ถ€๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค [3, 4]. - **Operation / Maintenance:** ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด๋‚˜ ๋ฌด๊ฑฐ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋กœ๋”ฉ ์—†์ด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋…๋ฆฝ์  ํ™˜๊ฒฝ์„ ์กฐ์„ฑํ•˜์—ฌ, ๋ฆฌํŒฉํ† ๋ง์ด๋‚˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ์‹œ ํšŒ๊ท€ ๋ฒ„๊ทธ๋ฅผ ์ฆ‰๊ฐ ํŒŒ์•…ํ•˜๋Š” ์ง€์†์ ์ธ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค [1, 3, 12]. - **Learning Path:** TDD ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ(Arrange, Act, Assert) ํ•™์Šต โ†’ ํ…Œ์ŠคํŠธ ๋Œ€์—ญ(Test Doubles) ๊ฐœ๋… ์ดํ•ด โ†’ ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ์˜ ์˜์กด์„ฑ ์ œ๊ฑฐ(Seam) ํ›ˆ๋ จ โ†’ ์•ˆ์ „ํ•˜๊ณ  ๊ณผ๊ฐํ•œ ๋ฆฌํŒฉํ† ๋ง ์ˆ˜ํ–‰ ์ˆœ์„œ๋กœ ๋‚˜์•„๊ฐ‘๋‹ˆ๋‹ค [2, 3, 13]. - **My Project Relevance:** ๋ฐฉ๋Œ€ํ•˜๊ฒŒ ์–ฝํ˜€ ์žˆ๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๊ธฐ ์œ„ํ•ด, ๋จผ์ € ์™ธ๋ถ€ API์™€ ํ†ต์‹ ํ•˜๋Š” ๋ถ€๋ถ„์˜ ์˜์กด์„ฑ์„ ๋Š๊ณ  Mock ๊ฐ์ฒด๋กœ ํ…Œ์ŠคํŠธ ์•ˆ์ „๋ง์„ ๊ตฌ์ถ•ํ•˜์—ฌ ๊ตฌ์กฐ ๊ฐœ์„ ์˜ ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค [3, 4]. ### Adjacent Topics - [[Test-Driven Development (TDD)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•œ ํ›„ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋ง(Red-Green-Refactor)ํ•˜๋Š” ๋ฐ˜๋ณต ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ดํ•ด [14]. - [[Technical Debt (๊ธฐ์ˆ  ๋ถ€์ฑ„)]] - ํ™•์žฅ ๋ฐฉํ–ฅ: ํ…Œ์ŠคํŠธ ์—†์ด ์ž‘์„ฑ๋˜์–ด ์˜์กด์„ฑ์ด ์—‰์ผœ์žˆ๋Š” ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๊ฐ€ ์‹œ์Šคํ…œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์–ด๋–ป๊ฒŒ ๋–จ์–ด๋œจ๋ฆฌ๋Š”์ง€(์—”ํŠธ๋กœํ”ผ ์ฆ๊ฐ€), ์ด๋ฅผ ๋ฆฌํŒฉํ† ๋ง์œผ๋กœ ์ƒํ™˜ํ•˜๋Š” ๊ฐœ๋…์— ๋Œ€ํ•œ ํƒ๊ตฌ [15]. --- *Last updated: 2026-05-03*