--- id: P-REINFORCE-AUTO-B943FA category: "[[10_Wiki/πŸ’‘ Topics/Programming & Language]]" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - 관점 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(AOP)" --- # [[관점 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(AOP)]] ## πŸ“Œ ν•œ 쀄 톡찰 (The Karpathy Summary) > 관점 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(AOP, Aspect-Oriented Programming)은 μ†Œν”„νŠΈμ›¨μ–΄ 개발 μ‹œ λ‘œκΉ…, λ³΄μ•ˆ λ“± μ‹œμŠ€ν…œ 전체에 κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ˜λŠ” νš‘λ‹¨ 관심사(Cross-Cutting Concerns)λ₯Ό μ£Όμš” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μœΌλ‘œλΆ€ν„° λΆ„λ¦¬ν•˜μ—¬ λͺ¨λ“ˆν™”ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ° 기법이닀 [1-3]. μ΄λŠ” 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)의 단점을 λ³΄μ™„ν•˜λ©°, κ³΅ν†΅λœ κΈ°λŠ₯을 μˆ˜ν‰μ μœΌλ‘œ 뢄리해 μ½”λ“œμ˜ λ‹¨μˆœν™”μ™€ λͺ…ν™•ν•œ μ—­ν•  뢄리λ₯Ό λ•λŠ”λ‹€ [1, 2]. 결과적으둜 AOPλ₯Ό λ„μž…ν•˜λ©΄ μ½”λ“œμ˜ 쀑볡을 μ œκ±°ν•  수 있고, 가독성과 μœ μ§€λ³΄μˆ˜μ„±μ΄ 크게 ν–₯μƒλ˜λŠ” 이점을 얻을 수 μžˆλ‹€ [2]. ## πŸ“– κ΅¬μ‘°ν™”λœ 지식 (Synthesized Content) **AOP의 μ£Όμš” ꡬ성 μš”μ†Œ** * **Aspect (관점):** νš‘λ‹¨ 관심사(Cross-Cutting Concerns)λ₯Ό μ •μ˜ν•˜κ³  ꡬ체적으둜 κ΅¬ν˜„ν•œ λͺ¨λ“ˆ 자체λ₯Ό μ˜λ―Έν•œλ‹€ [2, 4]. * **Join Point (쑰인 포인트):** μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 쀑 Aspectκ°€ 적용될 수 μžˆλŠ” 지점이닀. 주둜 λ©”μ„œλ“œ 호좜, 객체 생성, μ˜ˆμ™Έ 처리 μ‹œμ  등에 λ°œμƒν•˜λ©°, Spring AOP의 경우 λ©”μ„œλ“œ μ‹€ν–‰ μ‹œμ λ§Œ μ§€μ›ν•œλ‹€ [2, 4]. * **Advice (μ–΄λ“œλ°”μ΄μŠ€):** Pointcut으둜 μ„ νƒλœ Join Pointμ—μ„œ μ‹€μ œλ‘œ 싀행될 ꡬ체적인 μ½”λ“œ 블둝 및 λ™μž‘μ΄λ‹€. μ‹€ν–‰ 타이밍에 따라 `@Before`, `@After`, `@AfterReturning`, `@AfterThrowing`, `@Around` λ“±μœΌλ‘œ μ •μ˜ν•  수 μžˆλ‹€ [4, 5]. * **Pointcut (포인트컷):** λ‹€μˆ˜μ˜ Join Point μ€‘μ—μ„œ Aspectλ₯Ό μ‹€μ œλ‘œ μ μš©ν•  지점을 μ„ μ–Έμ μœΌλ‘œ μ§€μ •(νŠΉμ • λ©”μ„œλ“œ, 클래슀, νŒ¨ν‚€μ§€ λ“±)ν•˜λŠ” 역할을 ν•œλ‹€ [4, 5]. * **Weaving (μœ„λΉ™):** μ •μ˜λœ Aspectλ₯Ό μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€μ œ μ½”λ“œμ™€ κ²°ν•©ν•˜λŠ” 과정이닀. 적용 μ‹œμ μ— 따라 컴파일 μ‹œμ (Compile time), 클래슀 λ‘œλ“œ μ‹œμ (Load time), λŸ°νƒ€μž„ μ‹œμ (Runtime) μœ„λΉ™μœΌλ‘œ λ‚˜λ‰œλ‹€ [4, 5]. **AOP의 μ£Όμš” ν™œμš© 사둀** * **λ‘œκΉ…(Logging) 및 λ³΄μ•ˆ 검사:** νŠΉμ • API ν˜ΈμΆœμ΄λ‚˜ μ˜ˆμ™Έκ°€ λ°œμƒν•  λ•Œ 이λ₯Ό μΌκ΄€λ˜κ²Œ λ‘œκΉ…ν•˜κ±°λ‚˜, μ—¬λŸ¬ μ»¨νŠΈλ‘€λŸ¬μ— μ€‘λ³΅μœΌλ‘œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ” 인증 및 κΆŒν•œ 확인 μ½”λ“œλ₯Ό μ€‘μ•™μ—μ„œ μ²˜λ¦¬ν•˜λ„λ‘ λΆ„λ¦¬ν•œλ‹€ [3, 4]. * **νŠΈλžœμž­μ…˜ 및 캐싱:** `@Transactional` μ–΄λ…Έν…Œμ΄μ…˜κ³Ό 같이 νŠΈλžœμž­μ…˜ 관리 λ‘œμ§μ„ λΆ„λ¦¬ν•˜κ±°λ‚˜, 자주 ν˜ΈμΆœλ˜λŠ” λ©”μ„œλ“œ κ²°κ³Όλ₯Ό μΊμ‹±ν•˜μ—¬ μ„±λŠ₯을 κ°œμ„ ν•˜λŠ” 데 ν™œμš©λœλ‹€ [4]. * **μ„±λŠ₯ λͺ¨λ‹ˆν„°λ§:** νŠΉμ • λ©”μ„œλ“œμ˜ μ‹€ν–‰ μ‹œκ°„μ„ μΈ‘μ •ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„±λŠ₯을 μΆ”μ ν•˜κ³  μ„œλΉ„μŠ€ μˆ˜μ€€ ν˜‘μ•½(SLA)을 μ€€μˆ˜ν•˜λŠ” 데 μ‚¬μš©λœλ‹€ [4]. **AOP의 μž₯단점 및 λ„μž… κΈ°μ€€** * **μž₯점:** 곡톡 관심사λ₯Ό μ€‘μ•™ν™”ν•˜μ—¬ μ½”λ“œ 쀑볡을 μ΅œμ†Œν™”ν•˜κ³ , λ‹€μ–‘ν•œ λͺ¨λ“ˆμ—μ„œ νš‘λ‹¨ 관심사λ₯Ό μΊ‘μŠν™”ν•˜μ—¬ λŸ°νƒ€μž„μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μ†μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆλ‹€ [6]. λ˜ν•œ, λ³΄μ•ˆκ³Ό 같은 νš‘λ‹¨ 관심사λ₯Ό 뢀차적인 것이 μ•„λ‹Œ μ£Όμš” κ΄€μ‹¬μ‚¬λ‘œ λ‹€λ£° 수 있게 ν•˜μ—¬ μ•ˆμ „ν•œ 섀계λ₯Ό λ•λŠ”λ‹€ [3]. * **단점:** λŸ°νƒ€μž„μ— Aspectκ°€ μ μš©λ˜λŠ” 경우 μ½”λ“œμ˜ μ‹€ν–‰ 흐름을 μ§κ΄€μ μœΌλ‘œ μΆ”μ ν•˜κΈ° μ–΄λ €μšΈ 수 있으며, 처리 κ³Όμ •μ—μ„œ μ•½κ°„μ˜ μ„±λŠ₯ μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•œλ‹€ [6]. μ˜€μš©ν•˜κ±°λ‚˜ κ³Όμš©ν•˜λ©΄ μ‹œμŠ€ν…œμ˜ λ³΅μž‘λ„κ°€ 였히렀 μ¦κ°€ν•œλ‹€ [6]. * **λ„μž… κΈ°μ€€:** 반볡적인 μž‘μ—…μ΄ λ§Žμ€ λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œλŠ” λ„μž…μ΄ 맀우 νš¨κ³Όμ μ΄μ§€λ§Œ, λ‹¨μˆœν•œ μž‘μ—…λ§Œ μˆ˜ν–‰ν•˜λŠ” μ†Œκ·œλͺ¨ ν”„λ‘œμ νŠΈμ—μ„œλŠ” κ³Όλ„ν•œ 섀계(Over-engineering)κ°€ 될 수 μžˆλ‹€ [6]. λ˜ν•œ, μ„±λŠ₯ μ˜€λ²„ν—€λ“œμ— λ―Όκ°ν•œ μ‹€μ‹œκ°„ 처리 μ‹œμŠ€ν…œμ˜ 경우 μ‚¬μš©μ— 신쀑해야 ν•œλ‹€ [6]. ## ⚠️ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & RL Update) - **κ³Όκ±° λ°μ΄ν„°μ™€μ˜ 좩돌:** μžλ™ν™” 엔진에 μ˜ν•΄ λ§€ν•‘λœ μ§€μ‹μœΌλ‘œ, μΆ”ν›„ μ •λ°€ 검증 ν•„μš”. - **μ •μ±… λ³€ν™”:** Programming & Language λΆ„μ•Όμ˜ μžλ™ μžμ‚°ν™” μˆ˜ν–‰. ## πŸ”— 지식 μ—°κ²° (Graph) - **Related Topics:** [[객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)]], [[νš‘λ‹¨ 관심사(Cross-Cutting Concerns)]], [[κ΄€μ‹¬μ‚¬μ˜ 뢄리(SoC)]] - **Projects/Contexts:** [[Spring AOP]], [[AspectJ]] - **Contradictions/Notes:** μ†ŒμŠ€λ“€ 간에 직접적인 λͺ¨μˆœμ€ μ—†μœΌλ‚˜, AOP λ„μž…μ— λŒ€ν•œ λͺ…ν™•ν•œ νŠΈλ ˆμ΄λ“œμ˜€ν”„(Trade-off)κ°€ κ°•μ‘°λœλ‹€. AOPλŠ” νš‘λ‹¨ 관심사λ₯Ό λΆ„λ¦¬ν•˜μ—¬ μ½”λ“œ ν’ˆμ§ˆκ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μ΄λŠ” ν›Œλ₯­ν•œ ν•΄κ²°μ±…μ΄μ§€λ§Œ, κ³Όλ„ν•˜κ²Œ μ‚¬μš©ν•  경우 λŸ°νƒ€μž„ μ½”λ“œ 좔적을 μ–΄λ ΅κ²Œ λ§Œλ“€κ³  였히렀 λ³΅μž‘λ„λ₯Ό μ¦κ°€μ‹œν‚¬ 수 μžˆλ‹€λŠ” 점을 μ£Όμ˜ν•΄μ•Ό ν•œλ‹€ [6]. --- *Last updated: 2026-04-18* - Raw Source: [[00_Raw/2026-04-20/관점 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(AOP).md]] ---