--- id: P-REINFORCE-WIKI-517471F1 category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['software-architecture-erosion', 'technical-debt', 'architectural-violations', 'software-architecture-recovery', 'refactoring', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Software Architecture Erosion]] ## πŸ“Œ Brief Summary μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 침식(Software Architecture Erosion)은 μ‹œκ°„μ΄ 지남에 따라 μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ˜ 'μ˜λ„λœ μ•„ν‚€ν…μ²˜'와 'μ‹€μ œ κ΅¬ν˜„λœ μ•„ν‚€ν…μ²˜' 사이에 μ μ§„μ μœΌλ‘œ 격차가 λ°œμƒν•˜λŠ” ν˜„μƒμ„ μ˜λ―Έν•œλ‹€ [1]. 이 ν˜„μƒμ€ 1992λ…„ Perry와 Wolf에 μ˜ν•΄ 처음 μ •μ˜λ˜μ—ˆμœΌλ©°, μ†Œν”„νŠΈμ›¨μ–΄ 개발 생λͺ…μ£ΌκΈ°(SDLC)의 각 λ‹¨κ³„μ—μ„œ λ°œμƒν•˜μ—¬ 개발 속도와 μœ μ§€λ³΄μˆ˜ λΉ„μš©μ— μ•…μ˜ν–₯을 λ―ΈμΉœλ‹€ [1]. 주둜 μ•„ν‚€ν…μ²˜ μœ„λ°˜, 기술 λΆ€μ±„μ˜ 좕적, μ§€μ‹μ˜ 증발(Knowledge Vaporization)κ³Ό 같은 μš”μΈλ“€λ‘œ 인해 μœ λ°œλœλ‹€ [1]. ## πŸ“– Core Content **μ•„ν‚€ν…μ²˜ μΉ¨μ‹μ˜ 원인과 영ν–₯** * **원인:** μ•„ν‚€ν…μ²˜ 침식은 μ•„ν‚€ν…μ²˜ κ·œμΉ™ μœ„λ°˜(Architectural Violations), 기술 λΆ€μ±„μ˜ 좕적(Accumulation of Technical Debt), 그리고 지식 증발(Knowledge Vaporization) λ“± λ‹€μ–‘ν•œ 이유둜 λ°œμƒν•œλ‹€ [1]. λΉˆμ•½ν•œ 초기 섀계와 지속적인 μ‹œμŠ€ν…œ λ³€κ²½ λ˜ν•œ ꡬ쑰적 침식을 κ°€μ†ν•˜λŠ” μ£Όμš” 원인이 λœλ‹€ [1]. * **영ν–₯ 및 κ²°κ³Ό:** μ•„ν‚€ν…μ²˜κ°€ μΉ¨μ‹λ˜λ©΄ μ†Œν”„νŠΈμ›¨μ–΄ μ„±λŠ₯이 μ €ν•˜λ˜κ³ , ν’ˆμ§ˆμ΄ λ–¨μ–΄μ§€λ©°, μ§„ν™” λΉ„μš©(Evolutionary Costs)이 μ‹€μ§ˆμ μœΌλ‘œ μ¦κ°€ν•œλ‹€ [2]. λŒ€ν‘œμ μΈ μ•„ν‚€ν…μ²˜ 침식 μ‚¬λ‘€λ‘œλŠ” λ„·μŠ€μΌ€μ΄ν”„(Netscape)κ°€ κ°œλ°œν•œ λͺ¨μ§ˆλΌ(Mozilla) μ›Ή λΈŒλΌμš°μ €μ˜ μ‹€νŒ¨κ°€ μžˆλ‹€ [1]. 지속적인 λ³€κ²½μœΌλ‘œ 인해 μ½”λ“œλ² μ΄μŠ€κ°€ λ„ˆλ¬΄ λ³΅μž‘ν•΄μ Έ μœ μ§€λ³΄μˆ˜κ°€ νž˜λ“€μ–΄μ‘Œκ³ , κ²°κ΅­ λ„·μŠ€μΌ€μ΄ν”„λŠ” λͺ¨μ§ˆλΌ λΈŒλΌμš°μ €λ₯Ό μž¬κ°œλ°œν•˜λŠ” 데만 2λ…„μ΄λΌλŠ” μ‹œκ°„μ„ μ†Œλͺ¨ν•΄μ•Ό ν–ˆλ‹€ [1]. **침식 탐지 및 ν•΄κ²° λ°©μ•ˆ** * **탐지 접근법:** μ•„ν‚€ν…μ²˜ 침식을 κ°μ§€ν•˜κΈ° μœ„ν•œ 접근법과 λ„κ΅¬λŠ” 크게 일관성 기반(Consistency-based), μ§„ν™” 기반(Evolution-based), 결함 기반(Defect-based), κ²°μ • 기반(Decision-based) 방식 λ“± 4κ°€μ§€ λ²”μ£Όλ‘œ λΆ„λ₯˜λœλ‹€ [2]. * **예방 및 치료:** 침식에 λŒ€μ‘ν•˜λŠ” 방법은 예방적 쑰치(Preventative Measures)와 치료적 쑰치(Remedial Measures)둜 λ‚˜λ‰œλ‹€ [3]. * 예방적 μ‘°μΉ˜μ—λŠ” μ•„ν‚€ν…μ²˜ κ·œμΉ™μ˜ κ°•μ œ, 정기적인 μ½”λ“œ 리뷰, μžλ™ν™”λœ ν…ŒμŠ€νŠΈ 적용 등이 ν¬ν•¨λœλ‹€ [3]. μžλ™ν™”λœ μ•„ν‚€ν…μ²˜ 적합성 κ²€μ‚¬λ‚˜ 정적 μ½”λ“œ 뢄석 도ꡬλ₯Ό 톡해 침식을 쑰기에 μ‹λ³„ν•˜κ³  μ™„ν™”ν•  수 μžˆλ‹€ [2]. * 치료적 μ‘°μΉ˜μ—λŠ” λ¦¬νŒ©ν† λ§, μž¬μ„€κ³„, 그리고 λ¬Έμ„œ μ—…λ°μ΄νŠΈκ°€ ν¬ν•¨λœλ‹€ [3]. * **μ•„ν‚€ν…μ²˜ 볡ꡬ(Architecture Recovery):** λ¬Έμ„œκ°€ λ…Έν›„ν™”λ˜κ±°λ‚˜ μ˜λ„ν•œ μ•„ν‚€ν…μ²˜μ—μ„œ λ²—μ–΄λ‚œ 침식이 심각할 경우, 합리적인 μ˜μ‚¬κ²°μ •μ„ 내리기 μœ„ν•΄ κΈ°μ‘΄ κ΅¬ν˜„ 및 λ¬Έμ„œλ₯Ό 톡해 μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜λ₯Ό μž¬κ΅¬μ„±ν•˜λŠ” μ•„ν‚€ν…μ²˜ 볡ꡬ(λ˜λŠ” λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§) 과정이 ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λœλ‹€ [3]. ## βš–οΈ Trade-offs & Caveats μ•„ν‚€ν…μ²˜ 침식을 λ°©μ§€ν•˜κ±°λ‚˜ ν•΄κ²°ν•˜κΈ° μœ„ν•œ μ‘°μΉ˜μ—λŠ” λΆ„λͺ…ν•œ κΈ°νšŒλΉ„μš©κ³Ό μ œμ•½ 사항이 μ‘΄μž¬ν•œλ‹€. 예방적 쑰치(μ•„ν‚€ν…μ²˜ κ·œμΉ™ κ°•μ œ, μ½”λ“œ 리뷰, μžλ™ν™” ν…ŒμŠ€νŠΈ λ“±)와 μ‘°κΈ° 탐지 도ꡬ(정적 μ½”λ“œ 뢄석 λ“±)λ₯Ό λ„μž…ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‹œμŠ€ν…œ 개발 λ‹¨κ³„μ—μ„œ 지속적인 μ‹œκ°„κ³Ό 인λ ₯의 νˆ¬μž…μ΄ μš”κ΅¬λœλ‹€ [2, 3]. λ°˜λŒ€λ‘œ, μ΄λŸ¬ν•œ 예방 및 관리 λΉ„μš©μ„ μ ˆκ°ν•˜κΈ° μœ„ν•΄ μ•„ν‚€ν…μ²˜ 침식을 λ°©μΉ˜ν•  경우, λͺ¨μ§ˆλΌ μ›Ή λΈŒλΌμš°μ €μ˜ μ‚¬λ‘€μ²˜λŸΌ κ²°κ΅­ μ‹œμŠ€ν…œμ„ μœ μ§€λ³΄μˆ˜ν•  수 μ—†λŠ” 지경에 이λ₯΄λŸ¬ 재개발(λ¦¬λ””μžμΈ 및 λ¦¬νŒ©ν† λ§)에 μˆ˜λ…„μ˜ μ‹œκ°„κ³Ό μ²œλ¬Έν•™μ μΈ λΉ„μš©μ„ μ§€λΆˆν•΄μ•Ό ν•˜λŠ” 치λͺ…적인 νŠΈλ ˆμ΄λ“œμ˜€ν”„κ°€ λ°œμƒν•œλ‹€ [1, 3]. λ˜ν•œ, λ¬Έμ„œκ°€ μ œλŒ€λ‘œ κ°±μ‹ λ˜μ§€ μ•Šμ€ μ±„λ‘œ 침식이 μ§„ν–‰λ˜λ©΄, κ°œλ°œνŒ€μ€ μ˜¬λ°”λ₯Έ μ˜μ‚¬κ²°μ •μ„ 내리기 μœ„ν•΄ 정적 ν”„λ‘œκ·Έλž¨ 뢄석 등을 λ™μ›ν•˜μ—¬ μ›λž˜μ˜ μ•„ν‚€ν…μ²˜λ₯Ό μ—­μΆ”μ ν•˜λŠ” λ³΅μž‘ν•œ 'μ•„ν‚€ν…μ²˜ 볡ꡬ' μž‘μ—…μ— 좔가적인 μžμ›μ„ μ†Œλͺ¨ν•΄μ•Ό ν•œλ‹€ [3]. ## πŸ”— Knowledge Connections ### Related Concepts #### [λ°œμƒ 원인 및 μœ„ν—˜ μš”μΈ] - [[Technical Debt]] - μ—°κ²° 이유: μ•„ν‚€ν…μ²˜ 섀계와 κ΅¬ν˜„μ˜ 뢈일치λ₯Ό μ΄ˆλž˜ν•˜λŠ” '기술 λΆ€μ±„μ˜ 좕적'은 μ•„ν‚€ν…μ²˜ 침식을 μΌμœΌν‚€λŠ” 핡심 원인 쀑 ν•˜λ‚˜μ΄λ‹€ [1]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: 초기 개발 속도λ₯Ό μœ„ν•΄ νƒ€ν˜‘ν•œ 섀계 결정이 μž₯기적인 μ§„ν™” λΉ„μš© 증가와 ꡬ쑰적 λΆ•κ΄΄λ‘œ μ΄μ–΄μ§€λŠ” κ³Όμ •. - [[Architectural Violations]] - μ—°κ²° 이유: 개발 κ³Όμ •μ—μ„œ μ˜λ„λœ μ•„ν‚€ν…μ²˜ 섀계 μ§€μΉ¨κ³Ό κ·œμΉ™μ„ μ§€ν‚€μ§€ μ•Šκ³  μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” μœ„λ°˜ ν–‰μœ„λ‘œ, μ•„ν‚€ν…μ²˜ μΉ¨μ‹μ˜ 직접적인 원인이 λœλ‹€ [1]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ •κ·œν™”λœ ꡬ쑰λ₯Ό λ¬΄μ‹œν•œ κ°œλ³„ μ»΄ν¬λ„ŒνŠΈ μΆ”κ°€λ‚˜ μˆ˜μ •μ΄ μ‹œμŠ€ν…œ μ „λ°˜μ˜ ν’ˆμ§ˆμ— λ―ΈμΉ˜λŠ” μ•…μ˜ν–₯. #### [λŒ€μ‘ 기술 및 볡ꡬ λ°©μ•ˆ] - [[Software Architecture Recovery]] - μ—°κ²° 이유: μ•„ν‚€ν…μ²˜ 침식과 λ¬Έμ„œμ˜ λ…Έν›„ν™”κ°€ μ§„ν–‰λœ μ‹œμŠ€ν…œμ—μ„œ, μ˜¬λ°”λ₯Έ μœ μ§€λ³΄μˆ˜ 및 μ˜μ‚¬κ²°μ •μ„ μœ„ν•΄ ν˜„μž¬ κ΅¬ν˜„λœ μƒνƒœλ‘œλΆ€ν„° 본래의 μ•„ν‚€ν…μ²˜λ₯Ό 역곡학(Reverse Engineering)ν•˜μ—¬ λ³΅μ›ν•˜λŠ” 기법이닀 [3]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: ν›Όμ†λœ μ‹œμŠ€ν…œ ꡬ쑰λ₯Ό λ‹€μ‹œ κ°€μ‹œν™”ν•˜κ³  정적 ν”„λ‘œκ·Έλž¨ 뢄석(Static Program Analysis)κ³Ό μ†Œν”„νŠΈμ›¨μ–΄ μΈν…”λ¦¬μ „μŠ€ 싀무λ₯Ό μ μš©ν•˜λŠ” 방법 [3]. - [[Refactoring]] - μ—°κ²° 이유: μΉ¨μ‹λœ μ•„ν‚€ν…μ²˜λ₯Ό 치료(Remedial measure)ν•˜κ³  좔가적인 μ•…ν™”λ₯Ό 쑰기에 μ™„ν™”(Mitigate)ν•˜κΈ° μœ„ν•΄ μ μš©λ˜λŠ” ν•„μˆ˜μ μΈ μ†Œν”„νŠΈμ›¨μ–΄ 곡학 기법이닀 [2, 3]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ½”λ“œμ˜ μ™ΈλΆ€ λ™μž‘μ„ λ°”κΎΈμ§€ μ•ŠμœΌλ©΄μ„œ λ‚΄λΆ€μ˜ μ•„ν‚€ν…μ²˜ ꡬ쑰λ₯Ό κ°œμ„ ν•˜μ—¬ μžƒμ–΄λ²„λ¦° μœ μ§€λ³΄μˆ˜μ„±μ„ νšŒλ³΅ν•˜λŠ” 절차. ### Deeper Research Questions - μ•„ν‚€ν…μ²˜ 침식을 νƒμ§€ν•˜λŠ” 4κ°€μ§€ μ£Όμš” 접근법(Consistency-based, Evolution-based, Defect-based, Decision-based)의 ꡬ체적인 원리와 각각의 μž₯단점은 무엇인가? [2] - 지식 증발(Knowledge Vaporization) ν˜„μƒμ„ λ°©μ§€ν•˜μ—¬ μ•„ν‚€ν…μ²˜ 침식을 막기 μœ„ν•΄, 쑰직적 μ°¨μ›μ—μ„œ λ„μž…ν•  수 μžˆλŠ” 지식 관리 및 μ•„ν‚€ν…μ²˜ λ¬Έμ„œν™” μ „λž΅μ€ 무엇인가? [1, 3] - λ„·μŠ€μΌ€μ΄ν”„ λͺ¨μ§ˆλΌ(Mozilla) μ›Ή λΈŒλΌμš°μ € μ‚¬λ‘€μ—μ„œ ꡬ체적으둜 μ–΄λ–€ 초기 μ„€κ³„μ˜ ν•œκ³„μ™€ λ³€κ²½ 사항듀이 μ•„ν‚€ν…μ²˜ 침식을 μœ λ°œν–ˆμœΌλ©°, μ΄λ‘œλΆ€ν„° λ„μΆœλœ κ°€μž₯ 큰 κ΅ν›ˆμ€ 무엇인가? [1] - 예방적 쑰치인 μžλ™ν™”λœ μ•„ν‚€ν…μ²˜ 적합성 검사(Automated architecture conformance checks)λ₯Ό μ΅œμ‹  CI/CD νŒŒμ΄ν”„λΌμΈμ— μ μš©ν•  λ•Œ λ°œμƒν•˜λŠ” ν•œκ³„μ κ³Ό 이λ₯Ό κ·Ήλ³΅ν•˜λŠ” 방법은 무엇인가? [2, 3] - μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 볡ꡬ(Architecture Recovery) κ³Όμ •μ—μ„œ 정적 μ½”λ“œ 뢄석 이외에 μ–΄λ–€ 도ꡬ와 정보가 ν™œμš©λ˜μ–΄μ•Ό 원본 μ•„ν‚€ν…μ²˜λ₯Ό μ„±κ³΅μ μœΌλ‘œ μž¬κ±΄ν•  수 μžˆλŠ”κ°€? [3] ### Practical Application Contexts - **Implementation:** μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” λ‹¨κ³„μ—μ„œλŠ” λ‹¨μˆœνžˆ κΈ°λŠ₯을 μ™„μ„±ν•˜λŠ” 데 κ·ΈμΉ˜μ§€ μ•Šκ³ , μžλ™ν™”λœ ν…ŒμŠ€νŠΈμ™€ 정적 μ½”λ“œ 뢄석 도ꡬλ₯Ό ν™œμš©ν•΄ μ•„ν‚€ν…μ²˜ κ·œμΉ™μ΄ μœ„λ°˜λ˜μ§€ μ•Šμ•˜λŠ”μ§€ μ§€μ†μ μœΌλ‘œ 확인해야 ν•œλ‹€ [2, 3]. - **System Design:** 초기 μ‹œμŠ€ν…œ 섀계 μ‹œ λͺ¨μ§ˆλΌ λΈŒλΌμš°μ € 사둀λ₯Ό λ°˜λ©΄κ΅μ‚¬ μ‚Όμ•„, 지속적인 μš”κ΅¬μ‚¬ν•­ 변경에도 λ³΅μž‘λ„κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ μ¦κ°€ν•˜μ§€ μ•Šλ„λ‘ λŠ₯동적인 μ•„ν‚€ν…μ²˜ 관리 κ³„νšμ„ μˆ˜λ¦½ν•΄μ•Ό ν•œλ‹€ [1]. - **Operation / Maintenance:** μ‹œμŠ€ν…œ 운영 및 μœ μ§€λ³΄μˆ˜ κ³Όμ •μ—μ„œλŠ” 정기적인 μ½”λ“œ 리뷰λ₯Ό 톡해 기술 λΆ€μ±„μ˜ 좕적을 막아야 ν•˜λ©°, μ½”λ“œκ°€ 변경될 λ•Œλ§ˆλ‹€ λ¬Έμ„œ μ—…λ°μ΄νŠΈλ₯Ό μˆ˜ν–‰ν•΄ λ¬Έμ„œμ™€ κ΅¬ν˜„μ˜ 뢈일치λ₯Ό μ˜ˆλ°©ν•΄μ•Ό ν•œλ‹€ [3]. - **Learning Path:** μ•„ν‚€ν…μ²˜ μΉ¨μ‹μ˜ κ°œλ…κ³Ό λ°œμƒ 원인(기술 뢀채, 지식 증발 λ“±)을 μˆ™μ§€ν•œ ν›„, μ˜ˆλ°©μ„ μœ„ν•œ 쑰치(μ½”λ“œ 뢄석, μžλ™ν™” ν…ŒμŠ€νŠΈ)와 치료 기법(λ¦¬νŒ©ν† λ§, μž¬μ„€κ³„, μ•„ν‚€ν…μ²˜ 볡ꡬ) 순으둜 심화 ν•™μŠ΅μ„ μ§„ν–‰ν•œλ‹€ [1-3]. - **My Project Relevance:** ν˜„μž¬ μœ μ§€λ³΄μˆ˜ 쀑인 ν”„λ‘œμ νŠΈμ—μ„œ κΈ°λŠ₯ μΆ”κ°€ λΉ„μš©μ΄ κΈ‰μ¦ν•˜κ³  μžˆλ‹€λ©΄ μ•„ν‚€ν…μ²˜ 침식을 μ˜μ‹¬ν•΄ λ³Ό 수 있으며, λ¦¬νŒ©ν† λ§ 및 λ…Έν›„ν™”λœ λ¬Έμ„œμ˜ μ—…λ°μ΄νŠΈ(λ˜λŠ” 볡ꡬ μž‘μ—…)λ₯Ό μ„ ν–‰ν•˜μ—¬ μ§„ν™” λΉ„μš©μ„ 감좕해야 ν•œλ‹€ [2, 3]. ### Adjacent Topics - [[Software Maintenance]] - ν™•μž₯ λ°©ν–₯: μœ μ§€λ³΄μˆ˜ λ‹¨κ³„μ—μ„œ λ°œμƒν•˜λŠ” 잘λͺ»λœ κ΅¬ν˜„ 결정이 μ–΄λ–»κ²Œ μ•„ν‚€ν…μ²˜ μΉ¨μ‹μœΌλ‘œ μ΄μ–΄μ§€λŠ”μ§€, 그리고 μœ μ§€λ³΄μˆ˜ λΉ„μš©κ³Ό ν’ˆμ§ˆ κ°„μ˜ 상관관계λ₯Ό 탐ꡬ [3]. - [[Static Code Analysis Tools]] - ν™•μž₯ λ°©ν–₯: μ•„ν‚€ν…μ²˜μ˜ μ˜λ„μ™€ μ‹€μ œ μ½”λ“œ κ°„μ˜ ν‹ˆ(Gap)을 λ°œκ²¬ν•˜κ³ , μ•„ν‚€ν…μ²˜ 침식을 쑰기에 μ‹λ³„ν•˜λŠ” μžλ™ν™”λœ 검사 기법 및 도ꡬ μƒνƒœκ³„ 연ꡬ [2]. --- *Last updated: 2026-05-02*