--- id: P-REINFORCE-WIKI-5E7BAB1F category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['software-architecture-erosion-(μ†Œν”„νŠΈμ›¨μ–΄-μ•„ν‚€ν…μ²˜-침식)', 'technical-debt', 'software-architecture-recovery', 'static-code-analysis', 'refactoring', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Software Architecture Erosion (μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 침식)]] ## πŸ“Œ Brief μž„λ¬΄ Summary μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 침식(Software Architecture Erosion)은 μ‹œκ°„μ΄ 지남에 따라 μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ˜ μ΄ˆκΈ°μ— μ˜λ„λœ μ•„ν‚€ν…μ²˜μ™€ μ‹€μ œ κ΅¬ν˜„λœ μ•„ν‚€ν…μ²˜ 사이에 점진적인 격차가 λ°œμƒν•˜λŠ” ν˜„μƒμ„ μ˜λ―Έν•©λ‹ˆλ‹€ [1]. μ΄λŠ” μ•„ν‚€ν…μ²˜ μœ„λ°˜, 기술 λΆ€μ±„μ˜ λˆ„μ , 지식 증발(knowledge vaporization)κ³Ό 같은 μš”μΈλ“€λ‘œ 인해 개발 생λͺ…μ£ΌκΈ°(SDLC) μ „λ°˜μ— 걸쳐 λ°œμƒν•©λ‹ˆλ‹€ [1]. 이 ν˜„μƒμ„ λ°©μΉ˜ν•  경우 μ†Œν”„νŠΈμ›¨μ–΄μ˜ μ„±λŠ₯이 μ €ν•˜λ˜κ³  μœ μ§€λ³΄μˆ˜ 및 μ§„ν™” λΉ„μš©μ΄ κΈ‰κ²©νžˆ μ¦κ°€ν•˜λ―€λ‘œ, μ μ ˆν•œ 예방적 및 치료적 쑰치λ₯Ό ν†΅ν•œ 관리가 ν•„μˆ˜μ μž…λ‹ˆλ‹€ [2, 3]. ## πŸ“– Core Content * **κ°œλ…μ˜ 기원:** μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 침식 ν˜„μƒμ€ 1992λ…„ Perry와 Wolfκ°€ μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜μ˜ κ°œλ…μ„ μ •μ˜ν•  λ•Œ 처음 μ‘°λͺ…λ˜μ—ˆμŠ΅λ‹ˆλ‹€ [1]. * **λ°œμƒ 원인 및 영ν–₯:** μ•„ν‚€ν…μ²˜ 침식은 μ†Œν”„νŠΈμ›¨μ–΄ 개발 생λͺ…μ£ΌκΈ°(SDLC)의 각 λ‹¨κ³„μ—μ„œ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ£Όμš” μ›μΈμœΌλ‘œλŠ” μ•„ν‚€ν…μ²˜ κ·œμΉ™ μœ„λ°˜, 기술 뢀채(Technical Debt)의 좕적, κ΄€λ ¨ μ§€μ‹μ˜ 증발 등이 μžˆμŠ΅λ‹ˆλ‹€ [1]. 이둜 인해 μ†Œν”„νŠΈμ›¨μ–΄ ν’ˆμ§ˆμ΄ λ–¨μ–΄μ§€κ³ , μ„±λŠ₯이 μ €ν•˜λ˜λ©°, ν–₯ν›„ μ‹œμŠ€ν…œμ„ μ§„ν™”μ‹œν‚€λŠ” 데 λ“œλŠ” λΉ„μš©μ΄ μƒλ‹Ήνžˆ μ¦κ°€ν•˜κ²Œ λ©λ‹ˆλ‹€ [2]. * **λŒ€ν‘œμ  μ‹€νŒ¨ 사둀:** Mozilla μ›Ή λΈŒλΌμš°μ €μ˜ μ‹€νŒ¨λŠ” μ•„ν‚€ν…μ²˜ μΉ¨μ‹μ˜ 유λͺ…ν•œ μ‚¬λ‘€μž…λ‹ˆλ‹€. λ„·μŠ€μΌ€μ΄ν”„(Netscape)κ°€ λ§Œλ“  이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 지속적인 λ³€κ²½μœΌλ‘œ 인해 μ½”λ“œλ² μ΄μŠ€κ°€ λ³΅μž‘ν•΄μ§€κ³  μœ μ§€λ³΄μˆ˜κ°€ μ–΄λ €μ›Œμ‘ŒμŠ΅λ‹ˆλ‹€ [1]. κ²°κ΅­ 초기 μ„€κ³„μ˜ 결함과 μ‹¬ν™”λ˜λŠ” μ•„ν‚€ν…μ²˜ μΉ¨μ‹μœΌλ‘œ 인해 λ„·μŠ€μΌ€μ΄ν”„λŠ” 2λ…„μ˜ μ‹œκ°„μ„ λ“€μ—¬ λΈŒλΌμš°μ €λ₯Ό μž¬κ°œλ°œν•΄μ•Όλ§Œ ν–ˆμŠ΅λ‹ˆλ‹€ [1]. * **탐지 및 식별 접근법:** μ•„ν‚€ν…μ²˜ 침식을 κ°μ§€ν•˜κΈ° μœ„ν•œ λ‹€μ–‘ν•œ 도ꡬ와 접근법은 크게 4κ°€μ§€λ‘œ λΆ„λ₯˜λ©λ‹ˆλ‹€ [2]. 1. 일관성 기반(Consistency-based) 접근법 2. μ§„ν™” 기반(Evolution-based) 접근법 3. 결함 기반(Defect-based) 접근법 4. κ²°μ • 기반(Decision-based) 접근법 * **λŒ€μ‘ 및 ν•΄κ²° 쑰치:** μ•„ν‚€ν…μ²˜ 침식을 λ‹€λ£¨λŠ” λ°©μ•ˆμ€ 두 κ°€μ§€ λ²”μ£Όλ‘œ λ‚˜λ‰©λ‹ˆλ‹€ [3]. * **예방적 쑰치(Preventative measures):** μ•„ν‚€ν…μ²˜ κ·œμΉ™ κ°•μ œ 적용, 정기적인 μ½”λ“œ 리뷰, μžλ™ν™”λœ ν…ŒμŠ€νŠΈ 등이 ν¬ν•¨λ©λ‹ˆλ‹€. μžλ™ν™”λœ μ•„ν‚€ν…μ²˜ 적합성 검사와 정적 μ½”λ“œ 뢄석 도ꡬ 등은 침식을 쑰기에 μ‹λ³„ν•˜κ³  μ™„ν™”ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€ [2, 3]. * **치료적 쑰치(Remedial measures):** 이미 μ§„ν–‰λœ 침식을 λ°”λ‘œμž‘κΈ° μœ„ν•œ λ¦¬νŒ©ν† λ§, μž¬μ„€κ³„(Redesign), λ¬Έμ„œ μ—…λ°μ΄νŠΈ 등이 ν¬ν•¨λ©λ‹ˆλ‹€ [3]. ## βš–οΈ Trade-offs & Caveats μ•„ν‚€ν…μ²˜ 침식을 λ°©μ§€ν•˜κΈ° μœ„ν•œ μ„ μ œμ  관리(μžλ™ν™”λœ 적합성 검사, 정기적 μ½”λ“œ 리뷰, 정적 μ½”λ“œ 뢄석 λ“±)λŠ” 개발 및 μœ μ§€λ³΄μˆ˜ κ³Όμ •μ—μ„œ 지속적인 μ‹œκ°„κ³Ό λ¦¬μ†ŒμŠ€ 투자λ₯Ό μš”κ΅¬ν•©λ‹ˆλ‹€ [2, 3]. ν•˜μ§€λ§Œ μ΄λŸ¬ν•œ 예방적 λΉ„μš©μ„ μ§€λΆˆν•˜μ§€ μ•Šκ³  단기적인 개발 μ†λ„λ§Œμ„ μš°μ„ μ‹œν•  경우, 기술 뢀채가 λˆ„μ λ˜μ–΄ λ„·μŠ€μΌ€μ΄ν”„(Mozilla)의 μ‚¬λ‘€μ²˜λŸΌ ꢁ극적으둜 전체 μ‹œμŠ€ν…œμ„ μž¬μ„€κ³„ν•˜κ³  μž¬κ°œλ°œν•˜λŠ” 데 μˆ˜λ…„μ˜ μ‹œκ°„κ³Ό λ§‰λŒ€ν•œ μ§„ν™” λΉ„μš©(evolutionary costs)을 μ§€λΆˆν•΄μ•Ό ν•˜λŠ” μ‹¬κ°ν•œ λ°˜λŒ€ κΈ‰λΆ€(Trade-off)κ°€ λ°œμƒν•©λ‹ˆλ‹€ [1, 2]. λ”°λΌμ„œ ν”„λ‘œμ νŠΈ νŒ€μ€ 단기적 μ‚°μΆœ 속도와 μž₯기적 μ•„ν‚€ν…μ²˜ 무결성 μœ μ§€ λΉ„μš© μ‚¬μ΄μ—μ„œ μ μ ˆν•œ κ· ν˜•μ„ μ°Ύμ•„μ•Ό ν•©λ‹ˆλ‹€. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜ 뢀채 및 μƒνƒœ 관리] * [[Technical Debt]] * μ—°κ²° 이유: 기술 λΆ€μ±„μ˜ 지속적인 λˆ„μ μ€ μ•„ν‚€ν…μ²˜ 침식을 μœ λ°œν•˜λŠ” κ°€μž₯ 직접적이고 핡심적인 원인 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€ [1]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: κ΅¬ν˜„μ˜ 편의λ₯Ό μœ„ν•΄ μ„€κ³„λœ μ•„ν‚€ν…μ²˜ 원칙을 λ¬΄μ‹œν•˜λŠ” 결정이 μ–΄λ–»κ²Œ μž₯기적인 μ‹œμŠ€ν…œ λΆ•κ΄΄λ‘œ μ΄μ–΄μ§€λŠ”μ§€ κ·Έ 인과관계λ₯Ό 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. * [[Software Architecture Recovery]] * μ—°κ²° 이유: λ¬Έμ„œκ°€ λ‚‘κ±°λ‚˜ μ•„ν‚€ν…μ²˜ 침식이 λ°œμƒν•˜μ—¬ μ‹€μ œ κ΅¬ν˜„κ³Ό μ˜λ„λœ 섀계가 어긋났을 λ•Œ, μ‹œμŠ€ν…œμ˜ ν˜„μž¬ μƒνƒœλ₯Ό νŒŒμ•…ν•˜κΈ° μœ„ν•΄ 역곡학(Reverse engineering)을 μˆ˜ν–‰ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [3]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 이미 μ‹¬ν•˜κ²Œ μΉ¨μ‹λœ μ•„ν‚€ν…μ²˜ ν™˜κ²½μ—μ„œ 기쑴의 섀계 μ½”λ“œλ₯Ό 정적 뢄석 등을 톡해 μ–΄λ–»κ²Œ μž¬κ΅¬μ„±ν•˜κ³  볡원해 λ‚΄λŠ”μ§€ νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. #### [침식 탐지 및 예방 도ꡬ] * [[Static Code Analysis]] * μ—°κ²° 이유: μ•„ν‚€ν…μ²˜μ˜ 적합성을 ν™•μΈν•˜κ³  μ½”λ“œ 내에 μ‘΄μž¬ν•˜λŠ” μ•„ν‚€ν…μ²˜ 침식 μ§•ν›„λ₯Ό μ΄ˆκΈ°μ— μžλ™ μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€ [2]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 예방적 쑰치 쀑 ν•˜λ‚˜λ‘œμ„œ, μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ§€ μ•Šκ³ λ„ ꡬ쑰적 μœ„λ°˜ 사항을 μΆ”μ ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ 배울 수 μžˆμŠ΅λ‹ˆλ‹€. * [[Refactoring]] * μ—°κ²° 이유: λ°œμƒν•œ μ•„ν‚€ν…μ²˜ 침식을 λ°”λ‘œμž‘κ³  ν›Όμ†λœ ꡬ쑰λ₯Ό λ³΅κ΅¬ν•˜κΈ° μœ„ν•΄ ν•„μˆ˜μ μΈ '치료적 쑰치(Remedial measure)'의 λŒ€ν‘œμ  κΈ°λ²•μž…λ‹ˆλ‹€ [2, 3]. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ™ΈλΆ€ κΈ°λŠ₯을 λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ λΆ€νŒ¨ν•œ λ‚΄λΆ€ ꡬ쑰λ₯Ό μ•ˆμ „ν•˜κ²Œ μž¬μ„€κ³„ν•˜μ—¬ μ•„ν‚€ν…μ²˜μ˜ 수λͺ…을 μ—°μž₯ν•˜λŠ” 방법을 νŒŒμ•…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ### Deeper Research Questions * μ•„ν‚€ν…μ²˜ 침식을 νƒμ§€ν•˜λŠ” 4κ°€μ§€ μ£Όμš” 접근법(일관성, μ§„ν™”, 결함, κ²°μ • 기반 접근법)의 ꡬ체적인 탐지 λ©”μ»€λ‹ˆμ¦˜κ³Ό 차이점은 무엇인가? * μ•„ν‚€ν…μ²˜ 침식을 κ°€μ†ν•˜λŠ” '지식 증발(Knowledge vaporization)' ν˜„μƒμ„ 막기 μœ„ν•΄ 효율적인 μ•„ν‚€ν…μ²˜ λ¬Έμ„œν™” 및 μ˜μ‚¬κ²°μ • 곡유 체계λ₯Ό μ–΄λ–»κ²Œ ꡬ좕할 수 μžˆλŠ”κ°€? * 예방적 쑰치(μ½”λ“œ 리뷰, μžλ™ν™”λœ ν…ŒμŠ€νŠΈ)와 치료적 쑰치(λ¦¬νŒ©ν† λ§, μž¬μ„€κ³„)λ₯Ό μ–΄λŠ 주기둜, μ–΄λ–»κ²Œ 병행해야 κ°€μž₯ 효율적으둜 μ§„ν™” λΉ„μš©(Evolutionary costs)을 ν†΅μ œν•  수 μžˆλŠ”κ°€? * Mozilla μ›Ή λΈŒλΌμš°μ €μ˜ μ‹€νŒ¨ μ‚¬λ‘€μ—μ„œ μ•„ν‚€ν…μ²˜ 침식을 μΈμ§€ν•œ μ‹œμ κ³Ό, 2λ…„μ˜ 재개발 κΈ°κ°„ λ™μ•ˆ μ–΄λ–€ μƒˆλ‘œμš΄ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ μ „λž΅μ΄ λ„μž…λ˜μ–΄ ꡬ쑰적 λ³΅μž‘μ„±μ„ ν•΄κ²°ν–ˆλŠ”κ°€? * μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 볡ꡬ(Architecture recovery) μ‹œ 정적 ν”„λ‘œκ·Έλž¨ 뢄석(Static program analysis) 외에 동적 λŸ°νƒ€μž„ 뢄석 κΈ°μˆ μ€ μ–΄λ–»κ²Œ ν™œμš©λ  수 μžˆλŠ”κ°€? ### Practical Application Contexts * **Implementation:** κ΅¬ν˜„ λ‹¨κ³„μ—μ„œλŠ” μ•„ν‚€ν…μ²˜ κ·œμΉ™μ΄ ν›Όμ†λ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ CI/CD νŒŒμ΄ν”„λΌμΈμ— 정적 μ½”λ“œ 뢄석 도ꡬ와 μžλ™ν™”λœ μ•„ν‚€ν…μ²˜ 적합성 검사(Conformance checks)λ₯Ό μ—°λ™ν•˜μ—¬ 예방 쑰치λ₯Ό μ·¨ν•΄μ•Ό ν•©λ‹ˆλ‹€ [2, 3]. * **System Design:** μ‹œμŠ€ν…œ 섀계 μ΄ˆκΈ°λΆ€ν„° μ•„ν‚€ν…μ²˜ κ·œμΉ™μ„ κ°•μ œν•  수 μžˆλŠ” 섀계 μ œμ•½μ„ 두어 κ°œλ°œμžλ“€μ΄ μ˜λ„λœ μ•„ν‚€ν…μ²˜λ₯Ό μ‰½κ²Œ μ€€μˆ˜ν•  수 μžˆλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€ [3]. * **Operation / Maintenance:** μœ μ§€λ³΄μˆ˜ κ³Όμ •μ—μ„œ λ¬΄λΆ„λ³„ν•œ ν•«ν”½μŠ€λ‘œ 인해 침식이 λ°œμƒν•˜λŠ” 것을 막기 μœ„ν•΄, 지속적인 μ½”λ“œ 리뷰λ₯Ό μ‹€ν–‰ν•˜κ³  λ¬Έμ„œ μ—…λ°μ΄νŠΈμ™€ λ³‘ν–‰ν•˜λŠ” 주기적 λ¦¬νŒ©ν† λ§ κ³„νšμ„ μˆ˜λ¦½ν•΄μ•Ό ν•©λ‹ˆλ‹€ [3]. * **Learning Path:** μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…νŠΈ 및 μ—”μ§€λ‹ˆμ–΄λŠ” 기술 뢀채 관리, 정적 μ½”λ“œ 뢄석 ν™œμš©, 그리고 μΉ¨μ‹λœ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ— λŒ€ν•œ μ•„ν‚€ν…μ²˜ 볡ꡬ(Architecture recovery) κΈ°μˆ μ„ ν•„μˆ˜μ μœΌλ‘œ ν•™μŠ΅ν•΄μ•Ό ν•©λ‹ˆλ‹€ [1-3]. * **My Project Relevance:** 'μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ 지식'을 싀무에 λ„μž…ν•  λ•Œ, νŒ¨ν„΄μ„ μ„±κ³΅μ μœΌλ‘œ μ±„νƒν•˜λŠ” κ²ƒλ§ŒνΌμ΄λ‚˜ μ§€μ†ν•΄μ„œ νŒ¨ν„΄μ˜ 무결성을 μ§€ν‚€κ³  λ³€μ§ˆμ„ κ°μ‹œν•˜λŠ” κ±°λ²„λ„ŒμŠ€(Governance)λ₯Ό ν•¨κ»˜ ꡬ좕해야 함을 μƒκΈ°μ‹œμΌœ μ€λ‹ˆλ‹€. ### Adjacent Topics * [[Architecture Decision Records (ADR)]] * ν™•μž₯ λ°©ν–₯: μ•„ν‚€ν…μ²˜ κ²°μ •κ³Ό κ·Όκ±°λ₯Ό κΈ°λ‘ν•˜λŠ” λ°©λ²•λ‘ μœΌλ‘œ, μ•„ν‚€ν…μ²˜ μΉ¨μ‹μ˜ μ£Όμš” 원인인 '지식 증발(Knowledge vaporization)'을 λ°©μ§€ν•˜λŠ” λ¬Έμ„œν™” μ „λž΅μœΌλ‘œ μ—°κ²°ν•˜μ—¬ 쑰사 [1, 4]. * [[Software Development Life Cycle (SDLC)]] * ν™•μž₯ λ°©ν–₯: μ†Œν”„νŠΈμ›¨μ–΄ 생λͺ…μ£ΌκΈ°μ˜ ꡬ체적인 μ–΄λŠ 지점(κ³„νš, 개발, ν…ŒμŠ€νŒ…, 운영)μ—μ„œ 주둜 μ–΄λ–€ ν˜•νƒœμ˜ μ•„ν‚€ν…μ²˜ 침식이 λ°œμƒν•˜λŠ”μ§€ 생애주기 κ΄€μ μ—μ„œ 심화 뢄석 [1]. --- *Last updated: 2026-05-02*