# [[Performance Optimization]] ## πŸ“Œ Brief Summary μ„±λŠ₯ μ΅œμ ν™”(Performance Optimization)λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ κΈ°λŠ₯적 λ™μž‘μ„ λ™μΌν•˜κ²Œ μœ μ§€ν•˜λ©΄μ„œ μ‹œκ°„μ΄λ‚˜ λ©”λͺ¨λ¦¬μ™€ 같은 μžμ› μ‚¬μš©λŸ‰μ„ κ°œμ„ ν•˜κΈ° μœ„ν•΄ λ‚΄λΆ€ ꡬ쑰λ₯Ό λ³€κ²½ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€ [1-3]. μ½”λ“œλ₯Ό 더 μ΄ν•΄ν•˜κ³  μˆ˜μ •ν•˜κΈ° μ‰½κ²Œ λ§Œλ“œλŠ” λ¦¬νŒ©ν† λ§(Refactoring)κ³Ό μœ μ‚¬ν•˜κ²Œ κΈ°λŠ₯은 μœ μ§€ν•˜μ§€λ§Œ, ꡬ쑰 κ°œμ„ μ΄ μ•„λ‹Œ 속도 ν–₯μƒμ΄λ‚˜ μžμ› νš¨μœ¨μ„±μ„ 주된 λͺ©μ μœΌλ‘œ μ‚ΌλŠ”λ‹€λŠ” μ μ—μ„œ κ΅¬λ³„λ©λ‹ˆλ‹€ [1, 2, 4]. 성곡적인 μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄μ„œλŠ” μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ μ½”λ“œλ‘œ λ¨Όμ € λ¦¬νŒ©ν† λ§ν•˜μ—¬ νŠœλ‹ν•˜κΈ° 쒋은 μƒνƒœλ₯Ό λ§Œλ“œλŠ” 것이 ν•„μˆ˜μ μΈ μ„ ν–‰ 쑰건으둜 κ°„μ£Όλ©λ‹ˆλ‹€ [5-7]. ## πŸ“– Core Content * **λ¦¬νŒ©ν† λ§κ³Ό μ΅œμ ν™”μ˜ 관계:** μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ κΈ°λŠ₯ μΆ”κ°€λ‚˜ 버그 μˆ˜μ •κ³Ό 달리, λ¦¬νŒ©ν† λ§κ³Ό μ΅œμ ν™”λŠ” λͺ¨λ‘ κΈ°μ‘΄ κΈ°λŠ₯을 λΆˆλ³€μœΌλ‘œ μœ μ§€ν•˜λ©΄μ„œ λ‹€λ₯Έ 속성을 λ³€κ²½ν•œλ‹€λŠ” 곡톡점을 κ°€μ§‘λ‹ˆλ‹€ [4]. λ¦¬νŒ©ν† λ§μ€ ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰(Structure)λ₯Ό λ³€κ²½ν•˜λŠ” 반면, μ΅œμ ν™”λŠ” μžμ› μ‚¬μš©λŸ‰(Resource Usage)을 λ³€κ²½ν•©λ‹ˆλ‹€ [2, 3]. * **μ„±λŠ₯ κ°œμ„ μ„ μœ„ν•œ 3κ°€μ§€ μ ‘κ·Ό 방식 [8-11]:** 1. **μ‹œκ°„ μ˜ˆμ‚° ν• λ‹Ή (Time Budgeting):** μ‹¬λ°•μ‘°μœ¨κΈ°μ²˜λŸΌ μ§€μ—°λœ 데이터가 치λͺ…적인 ν•˜λ“œ μ‹€μ‹œκ°„(Hard real-time) μ‹œμŠ€ν…œμ—μ„œ 주둜 μ‚¬μš©λ˜λ©°, 각 μ»΄ν¬λ„ŒνŠΈμ— μ—„κ²©ν•œ μ‹œκ°„κ³Ό μžμ› μ˜ˆμ‚°μ„ ν• λ‹Ήν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€ [8]. 2. **지속적 주의 (Constant Attention):** λͺ¨λ“  ν”„λ‘œκ·Έλž˜λ¨Έκ°€ 항상 μ„±λŠ₯을 λ†’κ²Œ μœ μ§€ν•˜κΈ° μœ„ν•΄ λ…Έλ ₯ν•˜λŠ” λ°©μ‹μ΄μ§€λ§Œ, μ‹€μ œλ‘œλŠ” ν”„λ‘œκ·Έλž¨μ„ μ΄ν•΄ν•˜κ³  μˆ˜μ •ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“€μ–΄ 개발 속도λ₯Ό λŠ¦μΆ”κΈ° λ•Œλ¬Έμ— νš¨κ³Όμ μ΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ [9]. 3. **ν”„λ‘œνŒŒμΌλŸ¬ 기반 νŠœλ‹ (Profiler-Driven Tuning):** λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž¨μ€ μ•„μ£Ό μž‘μ€ 일뢀 μ½”λ“œμ—μ„œ λŒ€λΆ€λΆ„μ˜ μ‹œκ°„μ„ λ‚­λΉ„ν•œλ‹€λŠ” 톡계에 κΈ°λ°˜ν•œ μ ‘κ·Όμž…λ‹ˆλ‹€ [10]. μ„±λŠ₯에 μ‹ κ²½ μ“°μ§€ μ•Šκ³  ꡬ쑰가 잘 짜인(Well-factored) ν”„λ‘œκ·Έλž¨μ„ λ¨Όμ € λ§Œλ“  ν›„, ν”„λ‘œνŒŒμΌλŸ¬λ₯Ό μ‚¬μš©ν•΄ μ‹œκ°„κ³Ό 곡간을 μ†ŒλΉ„ν•˜λŠ” 'ν•«μŠ€νŒŸ(Hot spots)'을 μ°Ύμ•„ μ§‘μ€‘μ μœΌλ‘œ μ΅œμ ν™”ν•©λ‹ˆλ‹€ [10, 11]. * **잘 λ¦¬νŒ©ν† λ§λœ μ½”λ“œκ°€ μ΅œμ ν™”μ— λ―ΈμΉ˜λŠ” 이점:** 잘 κ΅¬μ‘°ν™”λœ ν”„λ‘œκ·Έλž¨μ€ κΈ°λŠ₯ μΆ”κ°€ 속도λ₯Ό λ†’μ—¬μ£Όμ–΄ μ„±λŠ₯ νŠœλ‹μ— νˆ¬μžν•  μ‹œκ°„μ„ 더 많이 확보해 μ€λ‹ˆλ‹€ [6]. λ˜ν•œ, μ½”λ“œμ˜ μ˜λ„κ°€ λͺ…ν™•ν•˜κ³  ꡬ쑰가 잘게 λ‚˜λˆ„μ–΄μ Έ μžˆμ–΄ μ„±λŠ₯ 뢄석 μ‹œ 더 μ„Έλ°€ν•œ λ‹¨μœ„(Finer granularity)둜 ν”„λ‘œνŒŒμΌλ§ν•˜κ³  νŠœλ‹ν•  수 μžˆλŠ” 이점을 μ œκ³΅ν•©λ‹ˆλ‹€ [6]. * **μ„±λŠ₯ μ΅œμ ν™” κ΄€λ ¨ 기법:** κΈ°μ‘΄ μ•Œκ³ λ¦¬μ¦˜μ΄ μœ μ§€λ³΄μˆ˜ν•  수 μ—†λŠ” μ„±λŠ₯ 병λͺ© 지점이 λ˜μ—ˆμ„ λ•Œ 전체 κ΅¬ν˜„μ„ κ΅μ²΄ν•˜λŠ” 'μ•Œκ³ λ¦¬μ¦˜ μ „ν™˜(Substitute Algorithm)' 기법이 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€ [12]. λ˜ν•œ, μž„μ‹œ λ³€μˆ˜λ₯Ό 질의 ν•¨μˆ˜λ‘œ λ°”κΎΈλŠ” 기법(Replace Temp with Query)은 데이터 흐름을 λͺ…ν™•νžˆ ν•˜μ—¬ ν–₯ν›„ μ΅œμ ν™”, λ©”λͺ¨μ΄μ œμ΄μ…˜(Memoization) λ˜λŠ” 병렬 싀행을 μ§€μ›ν•˜λŠ” ν† λŒ€κ°€ λ©λ‹ˆλ‹€ [13]. ν•˜λ“œμ›¨μ–΄ μΈ‘λ©΄μ—μ„œλŠ” μ†Œν”„νŠΈμ›¨μ–΄κ°€ 병렬 ν”„λ‘œμ„Έμ„œλ‚˜ 벑터 μœ λ‹›μ˜ 이점을 μ·¨ν•  수 μžˆλ„λ‘ μ‘°μ •ν•˜λŠ” μž‘μ—…λ„ ν¬ν•¨λ©λ‹ˆλ‹€ [14]. ## βš–οΈ Trade-offs & Caveats * **단기적 μ„±λŠ₯ μ €ν•˜μ™€ μž₯기적 νŠœλ‹ μš©μ΄μ„±μ˜ 상좩 (Trade-off):** μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“œλŠ” λ¦¬νŒ©ν† λ§ 과정은 μ’…μ’… λ‹¨κΈ°μ μœΌλ‘œ ν”„λ‘œκ·Έλž¨μ˜ μ‹€ν–‰ 속도λ₯Ό 느리게 λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€ [5, 7]. 예λ₯Ό λ“€μ–΄, μž„μ‹œ λ³€μˆ˜λ₯Ό μ œκ±°ν•˜λŠ” λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ 루프가 μ—¬λŸ¬ 번 μ‹€ν–‰λ˜κ±°λ‚˜ 계산이 μ€‘λ³΅λ˜μ–΄ μ„±λŠ₯ λΉ„μš©μ„ μ§€λΆˆν•΄μ•Ό ν•  수 μžˆμŠ΅λ‹ˆλ‹€ [15, 16]. κ·ΈλŸ¬λ‚˜ μ΄λŸ¬ν•œ 단기적인 μ„±λŠ₯ μ €ν•˜λ₯Ό κ°μˆ˜ν•˜λ©΄ 였히렀 κ°•λ ₯ν•œ μ΅œμ ν™” μ˜΅μ…˜μ„ λ°œκ²¬ν•˜κΈ° μ‰¬μ›Œμ§€λ―€λ‘œ μ΅œμ’…μ μœΌλ‘œλŠ” 더 λΉ λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€ [7, 17]. * **μ΅œμ ν™”λ‘œ μΈν•œ μ½”λ“œ 가독성 μ €ν•˜:** μ„±λŠ₯을 κ°œμ„ ν•˜κΈ° μœ„ν•œ μ½”λ“œ 변경은 λŒ€κ°œ ν”„λ‘œκ·Έλž¨μ˜ λ³΅μž‘λ„λ₯Ό 높이고 μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ ΅κ²Œ λ§Œλ“­λ‹ˆλ‹€ [1, 9]. 이것이 '지속적 주의' 방식이 였히렀 κ°œλ°œμ„ 느리게 λ§Œλ“€κ³  λ‚­λΉ„λ₯Ό μ΄ˆλž˜ν•˜λŠ” 주된 μ΄μœ μž…λ‹ˆλ‹€ [9]. * **좔츑에 κΈ°λ°˜ν•œ μ΅œμ ν™”μ˜ μœ„ν—˜μ„± (Caveat):** μ„±λŠ₯ μ΅œμ ν™” μ‹œ κ°€μž₯ μ£Όμ˜ν•΄μ•Ό ν•  점은 μ‹œμŠ€ν…œμ„ 잘 μ•ˆλ‹€κ³  μƒκ°ν•˜μ—¬ 병λͺ© 지점을 ν•¨λΆ€λ‘œ μΆ”μΈ‘(Speculate)ν•΄μ„œλŠ” μ•ˆ λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ [5, 18]. κ²½ν—˜ λ§Žμ€ 개발자의 쒋은 아이디어쑰차 μ‹€μ œ μΈ‘μ • 결과와 λ‹€λ₯Ό λ•Œκ°€ λ§ŽμœΌλ―€λ‘œ, λ°˜λ“œμ‹œ ν”„λ‘œνŒŒμΌλŸ¬ λ„κ΅¬λ‘œ μ‹€μ œ μ„±λŠ₯을 μΈ‘μ •(Measure)ν•œ ν›„ μ΅œμ ν™”λ₯Ό μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€ [5, 11, 19]. * **AI 도ꡬ ν™œμš© μ‹œ μ œμ•½ 사항:** μ„±λŠ₯이 μ€‘μš”ν•œ μ΅œμ ν™”(Performance-critical optimization) μž‘μ—…μ€ λ³΅μž‘μ„±μ΄ 맀우 높은 μž‘μ—…μ΄λ―€λ‘œ, AI μ½”λ”© 도ꡬλ₯Ό μ‚¬μš©ν•  경우 였히렀 μž‘μ—… 속도λ₯Ό μ§€μ—°μ‹œν‚€κ±°λ‚˜ λ°©ν•΄κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€ [20, 21]. λ”°λΌμ„œ μ΄λŸ¬ν•œ λ§₯λ½μ—μ„œλŠ” AI 지원 없이 μ „λ¬Έκ°€μ˜ νŒλ‹¨μ— μ˜μ‘΄ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€ [21]. --- *Last updated: 2026-05-03*