이번 강의는 기술 하나를 배우는 느낌보다는
지금까지 배운 것들을 관통하는 사고방식을 정리해주는 강의였다.
핵심은 크게 두 가지다.
AOP를 한 문장으로 정리하면 이거다.
AOP는 “룰에 의한 코드 적용”이다.
예를 들어 이런 상황이 있다.
log.info("메서드 실행");
이걸 모든 메서드에 직접 넣는다면?
AOP는 이렇게 생각하면 된다.
“이 코드가 언제, 어디서 작동해야 하는지 규칙을 정해두자”
이게 AOP의 본질이다.
스프링에서 AOP는 두 가지 방식으로 사용된다.
| 구분 | 간접 사용 | 직접 사용 |
|---|---|---|
| 예시 | @Transactional, @Cacheable | @Aspect |
| 사용법 | 어노테이션만 붙이면 자동 적용 | 직접 AOP 로직 구현 |
| 복잡도 | 낮음 | 높음 |
| 유연성 | 제한적 | 매우 높음 |
| 재사용성 | 높음 | 낮음 |
| 학습 곡선 | 낮음 | 높음 |
| 적용 범위 | 미리 정의된 기능 | 커스텀 기능 |
대표적인 예:
@Transactional
@Cacheable
👉 “왜 되는지는 몰라도, 일단 안전하게 쓸 수 있다”
대표적인 예:
@Aspect
public class ResponseAspect {
...
}
👉 “내가 원하는 타이밍에, 내가 원하는 로직을 실행”
@Transactional 등)👉 직접 AOP는 강력하지만 비용이 크다
이 강의에서 가장 인상 깊었던 부분은
공부 방법에 대한 조언이었다.
정말 핵심적인 1%는 바텀-업으로,
나머지 99%는 탑-다운으로 공부하자
기초부터 차근차근 쌓아올리는 학습 방식
전체 구조를 먼저 이해하고 세부로 내려가는 방식
이번 강의는
“AOP를 이렇게 써라” 보다는
왜 이런 구조가 나왔는지
어디까지 깊게 파고, 어디서 멈춰야 하는지
를 알려준 강의였다.
모든 걸 다 바텀-업으로 파려고 하면 지치고,
모든 걸 탑-다운으로만 보면 얕아진다.
핵심만 깊게, 나머지는 빠르게.
이 기준이 앞으로 공부할 때
가장 큰 나침반이 될 것 같다.