PSA(Portable Service Abstraction)
PSA = 잘 만든 인터페이스
위의 등식이 성립하는 이유는 PSA가 환경과 세부 기술의 변경에 관계 없이 일관된 접근 방식을 제공하기 위한 설계 원칙이기 때문이다.
즉 내부의 무엇인가 일이 일어나든 그것을 감추고 일관된 인터페이스를 제공하는 것이다.
PSA가 적용된 코드는
나의 코드가 바뀌지 않고, 다른 기술로 간편하게 바꿀 수 있도록 확장성이 좋고,
기술에 특화되어 있지 않는 코드를 의미한다.
스프링이 제공하는 대부분의 API는 PSA가 적용되어 있다.
@Transactional
platformTransactionManager
인터페이스로 구현하였기 때문에 구현체가 무엇이 되었든 실질적으로 Transaction을 처리하는TransactionAspect
의 코드는 변하지 않는다.
@Cacheable
|@CacheEvict
| ...
CacheManager
인터페이스를 통해 구현했기 때문에 Transaction과 같이 해당 어노테이션을 처리하는 Aspect의 코드가 변할 필요가 없다.
@Controller
|@RequestMapping
| ...
해당 어노테이션이 어디서 처리되는지는 알 필요 자체가 없다.