코드스테이츠_국비교육/[Section2]
34.06_[Spring] Spring Framework_AOP, PSA_22.10.11
생각없이 해도 생각보다 좋다.
2022. 10. 11. 22:38
AOP(Aspect Oriented Programming)
>의미
: 관심 지향 프로그래밍
: 핵심 관심 사항과 공통 관심 사항을 분리하는 것.
: 각 클래스들이 본연의 일만 할 수 있도록, 공통된 기능을 가진 부분들을 한 곳으로 따로 모으는 것이다.
: Aspect는 애플리케이션의 공통 관심사를 의미한다.
>필요한 이유
: 코드의 간결성, 코드의 재사용, 그리고 궁극적으로는 객체 지향 설계 원칙에 맞는 코드 구현을 위해서이다.
>방법
- 컴파일 된 바이트코드(.class)를 조작하는 방법
: 컴파일 된 바이트코드에 공통적으로 넣어줄 부분을 끼워 넣기
- 프록시 패턴 사용
: Spring이 사용하는 방법
: 내부에 객체(클래스)를 생성해서 원하는 메서드 호출 전후로 넣어줌
PSA(Portable Service Abstraction)
>의미
: 일관된 서비스 추상화
: 객체의 본질적인 특성만 추출해서 일반화하는 것.
: 클라이언트는 상위 클래스를 일관되게 바라보며(참조), 하위 클래스의 기능을 사용하는 것이 PSA의 기본 개념(다형성)
//여기서 클라이언트는 코드 레벨의 클라이언트, 즉 어떤 클래스의 기능을 사용하는 쪽을 의미한다.
: 인터페이스를 참조하고 이를 구현한 클래스를 사용하기 때문에, 통일된 방식으로 해당 서비스의 기능을 사용할 수 있다.
: 잘 만든 인터페이스라고 생각해도 좋다.
>필요한 이유
: 서비스를 이용하기 위한 접근 방식에 통일성을 주기 위해서
: 기술이 변경되더라도 최소한의 변경으로 변경된 요구 사항을 반영하기 위해서
// Spring이 제공하는 대부분의 API는 PSA이다.
// 즉, 대부분이 인터페이스이고, 인터페이스만 알면 다 거기서 거기니까 너무 부담스러워하지말자