--- id: [[P-Reinforce|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)|๊ด€์  ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(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)|๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP]], ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ(Cross-Cutting Concerns), [[แ„€แ…ชแ†ซแ„‰แ…ตแ†ทแ„‰แ…กแ„‹แ…ด แ„‡แ…ฎแ†ซแ„…แ…ต (SoC)|๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(SoC]] - **Projects/Contexts:** Spring AOP, AspectJ - **Contradictions/Notes:** ์†Œ์Šค๋“ค ๊ฐ„์— ์ง์ ‘์ ์ธ ๋ชจ์ˆœ์€ ์—†์œผ๋‚˜, AOP ๋„์ž…์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ํŠธ๋ ˆ์ด๋“œ์˜คํ”„(Trade-off)๊ฐ€ ๊ฐ•์กฐ๋œ๋‹ค. AOP๋Š” ํšก๋‹จ ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ํ›Œ๋ฅญํ•œ ํ•ด๊ฒฐ์ฑ…์ด์ง€๋งŒ, ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋Ÿฐํƒ€์ž„ ์ฝ”๋“œ ์ถ”์ ์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ  ์˜คํžˆ๋ ค ๋ณต์žก๋„๋ฅผ ์ฆ๊ฐ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค [6]. --- *Last updated: 2026-04-18* ---