--- id: P-REINFORCE-WIKI-1DE332F7 category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['μ†Œν”„νŠΈμ›¨μ–΄-μ•„ν‚€ν…μ²˜-볡ꡬ-(software-architecture-recovery)', 'μ•„ν‚€ν…μ²˜-침식-(architecture-erosion)', '정적-ν”„λ‘œκ·Έλž¨-뢄석-(static-program-analysis)', 'μ•„ν‚€ν…μ²˜-κ²°μ •-기둝-(adr,-architecture-decision-record)', 'λ ˆκ±°μ‹œ-μ‹œμŠ€ν…œ-ν˜„λŒ€ν™”-(legacy-system-modernization)', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 볡ꡬ (Software Architecture Recovery)]] ## πŸ“Œ Brief Summary μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 볡ꡬ(Software Architecture Recovery)λŠ” μž¬κ΅¬μ„±(Reconstruction) λ˜λŠ” λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§(Reverse Engineering)이라고도 뢈리며, κ΅¬ν˜„ μ½”λ“œμ™€ λ¬Έμ„œλ₯Ό ν¬ν•¨ν•˜μ—¬ κ°€μš©ν•œ 정보λ₯Ό λ°”νƒ•μœΌλ‘œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ˜ μ•„ν‚€ν…μ²˜λ₯Ό λ°ν˜€λ‚΄λŠ” 방법, 기술 및 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ˜λ―Έν•œλ‹€ [1]. μ΄λŠ” 주둜 κ΅¬μ‹μ΄κ±°λ‚˜ 더 이상 μœ νš¨ν•˜μ§€ μ•Šμ€ λ¬Έμ„œμ— μ§λ©΄ν–ˆμ„ λ•Œ 정보에 κΈ°λ°˜ν•œ μ˜μ‚¬κ²°μ •μ„ 내리기 μœ„ν•΄ μˆ˜ν–‰λœλ‹€ [1]. 특히, μ›λž˜ μ˜λ„ν–ˆλ˜ μ•„ν‚€ν…μ²˜μ™€ μ‹€μ œ κ΅¬ν˜„ κ°„μ˜ 격차가 λ²Œμ–΄μ§€λŠ” 'μ•„ν‚€ν…μ²˜ 침식(Architecture Erosion)' ν˜„μƒμ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν•„μˆ˜μ μœΌλ‘œ μš”κ΅¬λ˜λŠ” 과정이닀 [1]. ## πŸ“– Core μ†ŒμŠ€ Content * **μ•„ν‚€ν…μ²˜ 볡ꡬ의 λ°œμƒ λ°°κ²½ (μ•„ν‚€ν…μ²˜ 침식)**: μ•„ν‚€ν…μ²˜ λ³΅κ΅¬λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 및 μœ μ§€λ³΄μˆ˜ κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” 'μ•„ν‚€ν…μ²˜ 침식(Architecture erosion)'에 λŒ€μ‘ν•˜κΈ° μœ„ν•΄ 주둜 ν•„μš”ν•˜λ‹€ [1]. μ•„ν‚€ν…μ²˜ μΉ¨μ‹μ΄λž€ μ‹œκ°„μ΄ 지남에 따라 μ‹œμŠ€ν…œμ˜ μ˜λ„λœ μ•„ν‚€ν…μ²˜μ™€ μ‹€μ œ κ΅¬ν˜„λœ μ•„ν‚€ν…μ²˜ 사이에 점진적인 격차가 λ°œμƒν•˜λŠ” ν˜„μƒμ„ λ§ν•œλ‹€ [2]. μ΄λŠ” μ•„ν‚€ν…μ²˜ κ·œμΉ™ μœ„λ°˜, 기술 뢀채(Technical debt)의 좕적, μ§€μ‹μ˜ 증발(Knowledge vaporization) λ“± λ‹€μ–‘ν•œ 원인에 μ˜ν•΄ λ°œμƒν•œλ‹€ [2]. * **볡ꡬ 기술 및 싀무**: μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λ₯Ό λ³΅κ΅¬ν•˜κΈ° μœ„ν•œ 싀무적인 방법 쀑 ν•˜λ‚˜λ‘œ '정적 ν”„λ‘œκ·Έλž¨ 뢄석(static program analysis)'을 ν™œμš©ν•  수 μžˆλ‹€ [1]. μ΄λŸ¬ν•œ 볡ꡬ 및 뢄석 μž‘μ—…μ€ μ†Œν”„νŠΈμ›¨μ–΄ μΈν…”λ¦¬μ „μŠ€ 싀무(software intelligence practice)μ—μ„œ λ‹€λ£¨λŠ” 주제의 μΌλΆ€λ‘œ ν¬ν•¨λœλ‹€ [1]. * **침식 및 볡ꡬ κ΄€λ ¨ μ‹€μ œ 사둀**: μ•„ν‚€ν…μ²˜ μΉ¨μ‹μ˜ 심각성을 λ³΄μ—¬μ£ΌλŠ” λŒ€ν‘œμ μΈ μ‚¬λ‘€λ‘œλŠ” λ„·μŠ€μΌ€μ΄ν”„(Netscape)κ°€ κ°œλ°œν•œ λͺ¨μ§ˆλΌ μ›Ή λΈŒλΌμš°μ €(Mozilla Web browser)의 μ‹€νŒ¨κ°€ μžˆλ‹€ [2]. 초기 μ„€κ³„μ˜ 결함과 지속적인 λ³€κ²½μœΌλ‘œ 인해 μ½”λ“œλ² μ΄μŠ€κ°€ λ„ˆλ¬΄ λ³΅μž‘ν•΄μ‘Œκ³ , μ•„ν‚€ν…μ²˜ 침식이 μ‹¬ν™”λ˜λ©΄μ„œ λ„·μŠ€μΌ€μ΄ν”„λŠ” 2년에 걸쳐 λΈŒλΌμš°μ €λ₯Ό 재개발(redeveloping)ν•΄μ•Όλ§Œ ν–ˆλ‹€ [2]. μ΄λŠ” κ°’λΉ„μ‹Ό μˆ˜μ • λΉ„μš©κ³Ό ν”„λ‘œμ νŠΈ 지연을 막기 μœ„ν•΄ 초기 μ•„ν‚€ν…μ²˜μ˜ μ„ μ œμ  관리가 μ–Όλ§ˆλ‚˜ μ€‘μš”ν•œμ§€ μ‹œμ‚¬ν•œλ‹€ [2]. ## βš–οΈ Trade-offs & Caveats μ†ŒμŠ€μ— κ΄€λ ¨ 정보가 λΆ€μ‘±ν•©λ‹ˆλ‹€. (단, μ•„ν‚€ν…μ²˜ 볡ꡬ가 μš”κ΅¬λ˜λŠ” 상황인 'μ•„ν‚€ν…μ²˜ 침식'κ³Ό 이λ₯Ό ν•΄κ²°ν•˜λŠ” μ‘°μΉ˜μ™€ κ΄€λ ¨λœ μ œμ•½ 사항은 λ‹€μŒκ³Ό 같이 μœ μΆ”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.) * μ•„ν‚€ν…μ²˜ 볡ꡬ와 침식 해결을 μœ„ν•œ μ‘°μΉ˜λŠ” 방치될 경우 μ†Œν”„νŠΈμ›¨μ–΄μ˜ μ„±λŠ₯ μ €ν•˜, μ§„ν™” λΉ„μš©(Evolutionary costs)의 κ·Ήμ‹¬ν•œ 증가, 그리고 μ „λ°˜μ μΈ μ†Œν”„νŠΈμ›¨μ–΄ ν’ˆμ§ˆ ν•˜λ½μ΄λΌλŠ” 치λͺ…적인 λ°˜λŒ€ κΈ‰λΆ€λ₯Ό μˆ˜λ°˜ν•œλ‹€ [3]. * μ•„ν‚€ν…μ²˜ 침식을 λ³΅κ΅¬ν•˜κ³  μˆ˜μ •ν•˜κΈ° μœ„ν•΄μ„œλŠ” '치료적 쑰치(Remedial measures)'둜 λ¦¬νŒ©ν† λ§, μž¬μ„€κ³„, λ¬Έμ„œ μ—…λ°μ΄νŠΈ 등이 ν•„μš”ν•˜λ‹€ [3]. ν•˜μ§€λ§Œ 이λ₯Ό 사전에 λ°©μ§€ν•˜λ €λ©΄ μ•„ν‚€ν…μ²˜ κ·œμΉ™μ„ κ°•μ œν•˜κ±°λ‚˜ 정기적인 μ½”λ“œ 리뷰 및 μžλ™ν™”λœ ν…ŒμŠ€νŠΈμ™€ 같은 '예방적 쑰치(Preventative measures)'κ°€ μ§€μ†μ μœΌλ‘œ λ³‘ν–‰λ˜μ–΄μ•Όλ§Œ 볡ꡬ의 μ‹€νš¨μ„±μ„ μœ μ§€ν•  수 μžˆλ‹€ [3]. ## πŸ”— Knowledge Connections ### Related Concepts #### [μ•„ν‚€ν…μ²˜ μƒνƒœ 및 ν’ˆμ§ˆ 관리] - [[μ•„ν‚€ν…μ²˜ 침식 (Architecture Erosion)]] - μ—°κ²° 이유: μ•„ν‚€ν…μ²˜ 볡ꡬ의 직접적인 원인이 λ˜λŠ” ν˜„μƒμœΌλ‘œ, μ˜λ„λœ μ•„ν‚€ν…μ²˜ 섀계와 μ‹€μ œ μœ μ§€λ³΄μˆ˜ 및 κ΅¬ν˜„λœ μ½”λ“œ κ°„μ˜ 격차가 λ²Œμ–΄μ§€λŠ” 것을 μ˜λ―Έν•¨ [1, 2]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ•„ν‚€ν…μ²˜ 볡ꡬ가 μ™œ ν•„μˆ˜μ μΈμ§€, μœ μ§€λ³΄μˆ˜ 쀑 λ°œμƒν•˜λŠ” κ·œμΉ™ μœ„λ°˜μ΄λ‚˜ 기술 뢀채가 μ‹œμŠ€ν…œ 생λͺ…주기에 μ–΄λ–€ 치λͺ…적인 영ν–₯을 λ―ΈμΉ˜λŠ”μ§€ νŒŒμ•…ν•  수 있음 [2]. #### [뢄석 및 볡ꡬ 기법] - [[정적 ν”„λ‘œκ·Έλž¨ 뢄석 (Static Program Analysis)]] - μ—°κ²° 이유: λ¬΄μš©μ§€λ¬Όμ΄ 된 λ¬Έμ„œ λŒ€μ‹  μ‹€μ œ μ†ŒμŠ€ μ½”λ“œλ₯Ό 톡해 μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λ₯Ό 역섀계(볡ꡬ)ν•˜κΈ° μœ„ν•΄ μ‹€λ¬΄μ μœΌλ‘œ ν™œμš©λ˜λŠ” 뢄석 κΈ°λ²•μž„ [1]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 볡ꡬλ₯Ό μœ„ν•΄ κ΅¬ν˜„λœ μ½”λ“œλ₯Ό λΆ„μ„ν•˜κ³  정보λ₯Ό μΆ”μΆœν•΄λ‚΄λŠ” ꡬ체적인 기술적 μ ‘κ·Ό 방식을 이해할 수 있음 [1]. #### [μ•„ν‚€ν…μ²˜ λ¬Έμ„œν™” 및 μ˜μ‚¬κ²°μ •] - [[μ•„ν‚€ν…μ²˜ κ²°μ • 기둝 (ADR, Architecture Decision Record)]] - μ—°κ²° 이유: 지식 증발(Knowledge vaporization)둜 μΈν•œ μ•„ν‚€ν…μ²˜ 침식과 볡ꡬ의 수고λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄, 초기 μ˜μ‚¬κ²°μ • 사항과 기술적 κ·Όκ±°λ₯Ό μ§€μ†μ μœΌλ‘œ κΈ°λ‘ν•˜λŠ” μ€‘μš”ν•œ λ¬Έμ„œν™” λ„κ΅¬μž„ [2, 4, 5]. - 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ•„ν‚€ν…μ²˜λ₯Ό λ³΅κ΅¬ν•œ ν›„, λ³€κ²½λœ μ•„ν‚€ν…μ²˜μ™€ κ²°μ • 과정을 μ–΄λ–»κ²Œ 미래의 νŒ€μ›λ“€μ—κ²Œ μ˜¨μ „νžˆ μ „λ‹¬ν•˜κ³  μ‹œμŠ€ν…œμ„ μ§„ν™”μ‹œν‚¬ 수 μžˆλŠ”μ§€μ— λŒ€ν•œ μ „λž΅μ  관리 방법을 μ•Œ 수 있음 [5]. ### Deeper Research Questions - 정적 ν”„λ‘œκ·Έλž¨ 뢄석(Static program analysis) 도ꡬλ₯Ό ν™œμš©ν•˜μ—¬ κΈ°μ‘΄ λ³΅μž‘ν•œ λ ˆκ±°μ‹œ μ‹œμŠ€ν…œμ˜ μ•„ν‚€ν…μ²˜λ₯Ό 볡ꡬ할 λ•Œ μ§λ©΄ν•˜λŠ” 기술적 ν•œκ³„μ™€ κ·Έ 해결책은 무엇인가? - μ•„ν‚€ν…μ²˜ 침식(Architecture Erosion)을 κ°μ§€ν•˜κΈ° μœ„ν•œ λ„€ κ°€μ§€ λ²”μ£Ό(일관성 기반, μ§„ν™” 기반, 결함 기반, κ²°μ • 기반)의 μ ‘κ·Ό 방식은 ꡬ체적으둜 μ–΄λ–»κ²Œ μž‘λ™ν•˜λ©° μ„œλ‘œ μ–΄λ–€ 차이가 μžˆλŠ”κ°€? - μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜ 볡ꡬ κ³Όμ •μ—μ„œ μΆ”μΆœλœ μ½”λ“œ 정보와 기쑴에 λˆ„λ½λ˜κ±°λ‚˜ 증발된 지식(Knowledge Vaporization) κ°„μ˜ 의미적 격차λ₯Ό 효과적으둜 λ³΄μ™„ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” 무엇인가? - μ•„ν‚€ν…μ²˜ 볡ꡬ ν›„ λ¦¬νŒ©ν† λ§ 및 μž¬μ„€κ³„(Remedial measures)λ₯Ό μˆ˜ν–‰ν•  λ•Œ, μ‹€μ œ 운영 쀑인 μ‹œμŠ€ν…œμ˜ 가동 쀑지(Downtime)λ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ€ 무엇인가? - μ• μžμΌ μ†Œν”„νŠΈμ›¨μ–΄ 개발(Agile software development) κ³Όμ •μ—μ„œ 초기 섀계에 νˆ¬μžν•˜λŠ” μ‹œκ°„μ„ μ΅œμ†Œν™”ν•˜λ €λŠ” μ ‘κ·Ό 방식이 μ•„ν‚€ν…μ²˜ 침식을 κ°€μ†ν™”ν•˜μ§€ μ•Šλ„λ‘ κ· ν˜•μ„ μž‘λŠ”(Just enough architecture) μ „λž΅μ€ 무엇인가? ### Practical Application Contexts - **Implementation:** μ‹€μ œ 개발 κ³Όμ •μ—μ„œ μ•„ν‚€ν…μ²˜κ°€ μΉ¨μ‹λ˜λŠ” 것을 막기 μœ„ν•΄, μ½”λ“œ κ΅¬ν˜„ 단계뢀터 지속적인 μ½”λ“œ 리뷰λ₯Ό μˆ˜ν–‰ν•˜κ³  μžλ™ν™”λœ ν…ŒμŠ€νŠΈλ₯Ό 톡해 μ•„ν‚€ν…μ²˜ κ·œμΉ™μ΄ μ§€μΌœμ§€κ³  μžˆλŠ”μ§€ ν™•μΈν•œλ‹€ [3]. - **System Design:** λ…Έν›„ν™”λœ μ‹œμŠ€ν…œμ„ κ°œνŽΈν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ ν™˜κ²½μ— ν†΅ν•©ν•˜κΈ° μœ„ν•œ 섀계λ₯Ό μ§„ν–‰ν•  λ•Œ, ν˜„μž¬ κ΅¬ν˜„λœ μ½”λ“œλ² μ΄μŠ€μ— λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§ 및 정적 뢄석 도ꡬλ₯Ό μ μš©ν•˜μ—¬ μ •ν™•ν•œ ν˜„μž¬μ˜ μ•„ν‚€ν…μ²˜ ꡬ쑰λ₯Ό λ„μΆœν•œλ‹€ [1]. - **Operation / Maintenance:** 였래된 λ¬Έμ„œλ‚˜ 사싀과 λ‹€λ₯Έ μœ μ§€λ³΄μˆ˜ 이λ ₯에 μ˜μ‘΄ν•˜λŠ” λŒ€μ‹ , μ•„ν‚€ν…μ²˜ 볡ꡬλ₯Ό 톡해 운영 쀑인 μ‹œμŠ€ν…œμ˜ μ •ν™•ν•œ μƒνƒœλ₯Ό μ§„λ‹¨ν•˜μ—¬ 기술 뢀채λ₯Ό ν•΄κ²°ν•˜κ³  μ‹ κ·œ μ—…λ°μ΄νŠΈ 배포에 λ”°λ₯Έ 영ν–₯을 μ΅œμ†Œν™”ν•œλ‹€ [1, 2]. - **Learning Path:** μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…νŠΈλ‚˜ λ¦¬λ“œ κ°œλ°œμžλ‘œμ„œ μ†Œν”„νŠΈμ›¨μ–΄ 개발 생λͺ…μ£ΌκΈ°(SDLC)λ₯Ό ν•™μŠ΅ν•  λ•Œ, 초기 νŒ¨ν„΄ μ„€κ³„λΏλ§Œ μ•„λ‹ˆλΌ μ‹œμŠ€ν…œμ΄ 진화함에 따라 μ•„ν‚€ν…μ²˜κ°€ λΆ•κ΄΄λ˜λŠ” ν˜„μƒ(침식)κ³Ό 이λ₯Ό λ˜μ‚΄λ¦¬λŠ” 볡ꡬ 기법을 순차적으둜 ν•™μŠ΅ν•˜μ—¬ μž₯기적인 μ‹œμŠ€ν…œ 관리 μ—­λŸ‰μ„ ν™•λ³΄ν•œλ‹€ [1, 2]. - **My Project Relevance:** λ¬Έμ„œν™”κ°€ λΉˆμ•½ν•œ λ ˆκ±°μ‹œ ν”„λ‘œμ νŠΈλ₯Ό μΈκ³„λ°›μ•˜κ±°λ‚˜ 였랜 κΈ°κ°„ μ—¬λŸ¬ 개발자의 손을 거치며 초기 섀계 원칙을 μžƒμ–΄λ²„λ¦° μŠ€νŒŒκ²Œν‹° μ½”λ“œλ₯Ό λͺ¨λ“ˆν™” ν˜Ήμ€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ μ „ν™˜ν•΄μ•Ό ν•  λ•Œ, ν˜„ μƒνƒœλ₯Ό λΆ„μ„ν•˜κ³  μ˜¬λ°”λ₯Έ μ•„ν‚€ν…μ²˜λ‘œ λ¦¬νŒ©ν† λ§ν•˜κΈ° μœ„ν•œ 첫 λ‹¨κ³„λ‘œ μ μš©ν•  수 μžˆλ‹€. ### Adjacent Topics - [[λ ˆκ±°μ‹œ μ‹œμŠ€ν…œ ν˜„λŒ€ν™” (Legacy System Modernization)]] - ν™•μž₯ λ°©ν–₯: μ•„ν‚€ν…μ²˜ 볡ꡬ ν”„λ‘œμ„ΈμŠ€λ₯Ό 톡해 κΈ°μ‘΄ λͺ¨λ†€λ¦¬μ‹ μ‹œμŠ€ν…œμ˜ μ •ν™•ν•œ 도메인과 쒅속성을 νŒŒμ•…ν•œ λ’€, 이λ₯Ό μ„œλ²„λ¦¬μŠ€(Serverless)λ‚˜ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(MSA)와 같은 ν˜„λŒ€μ  ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ ν™˜κ²½μœΌλ‘œ μ•ˆμ „ν•˜κ²Œ μ „ν™˜ν•˜λŠ” λ°©λ²•λ‘ μœΌλ‘œ ν™•μž₯ν•˜μ—¬ νƒκ΅¬ν•œλ‹€ [6, 7]. - [[기술 뢀채 (Technical Debt)]] - ν™•μž₯ λ°©ν–₯: 기술 λΆ€μ±„μ˜ 좕적이 μ•„ν‚€ν…μ²˜ 침식을 μœ λ°œν•˜λŠ” 핡심 μ›μΈμ΄λΌλŠ” 점을 λ°”νƒ•μœΌλ‘œ, 이λ₯Ό μ •λŸ‰μ μœΌλ‘œ μΈ‘μ •ν•˜κ³  μƒν™˜(λ¦¬νŒ©ν† λ§ 및 μ•„ν‚€ν…μ²˜ μž¬μ„€κ³„)ν•˜λŠ” 싀무적 관리 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—°κ΅¬ν•œλ‹€ [2]. --- *Last updated: 2026-05-02*