- 스프링 프레임워크의 세 가지 핵심 기술
- 의존성 주입(DI)
- 서비스 추상화(portable service abstraction)
- 관점 지향 프로그래밍(AOP)
- 여기서는 관점 지향 프로그래밍에 대해서 알아봄
스프링 AOP
- 관점 지향 프로그래밍(Aspect Oriented Programming)은 객체지향 프로그래밍과는 다른 방식의 프로그래밍 패러다임
- 프로그래미의 구조를 관점(aspect) 기준으로 공통된 모듈로 분리하는 방법
- 객체 지향 프로그래밍에서 모듈 단위는 클래스, 관점 지향 프로그래밍에서는 모듈 단위는 관점
- 객체 지향 프로그래밍과 관점 지향 프로그래밍은 상호 보완적으로 동작
- 관점은 여러 클래스에 걸쳐 공통으로 실행되는 기능을 모듈로 분리한 것
- 관점 지향 프로그래밍을 사용하면 의존으로 발생하는 복잡도를 낮출수 있음
- 직접 메서드를 호출하는 것이 아닌 프레임워크의 도움을 받아 동작
- 클래스의 코드와 관점의 코드를 완전히 분리 가능
- 즉 개발자는 명시적으로 관점 객체를 생성하지 않음
- 클래스 밖에서 관점의 기능이 실행되므로 서로 완전히 분리된 형태, 이를 관심의 분리(separation of concerns)라고 함
- 분리된 관심은 애플리케이션에서 클래스의 특정 기능이 실행될때 모듈화된 관점의 기능과 같이 실행
- 관점만 따로 실행될 수 없음
- 관점 지향 프로그래밍을 위해 고려해야할점
- 기능의 분류
- 기능적 요구 사항: 핵심 비즈니스 로직
- 비기능적 요구 사항: 비즈니스 로직은 아니지만 애플리케이션의 필요한 기능
- 공통 기능의 분류
- 공통 기능의 적용
- 기능적 요구사항은 객체지향, 비기능적 요구사항은 관점 지향 프로그래밍으로 작성
- 핵심 관심사과 횡단 관심사
AOP 용어정리
- 대상객체
- 관점
- 어드바이스
- 포인트컷
- 조인 포인트
- 위빙
- 프록시 객체
스프링 AOP와 프록시 객체
- 스프링 AOP는 대상 객체를 감싸는 프록시 객체를 동적으로 생성
- 클라이언트 클래스와 서버 클래스 사이에 프록시 객체가 클라이언트 클래스의 요청을 가로챔
- 스프링 AOP는 두 가지 방식을 사용하여 위빙을 구현
스프링 부트 테스트
스프링 부트 자동설정