토비의 스프링을 읽어보면 Spring 을 구현하는 데 있어서 핵심이 되었던 철학들에 대해 설명을 해주는데, 그 중 하나가 PSA이다.


POJO 관련 포스팅에서 조금 언급을 했지만, Spring 은 언어가 아닌 기술 그자체에 얽매이는 것에 반감을 갖고 있다. 이는 애초에 EE 에 대한 불편함으로 대세로 떠오른 프레임워크이기도 하기 때문이다. 그리고 그러한 철학을 잘반영한 기술 중 하나가 PSA 라고 생각한다. 


*POJO 에 대한 설명은 다음 링크를 참조해보자. (http://jins-dev.tistory.com/entry/Spring-%EC%9D%98-%EA%B8%B0%EB%B3%B8%EC%9D%B4-%EB%90%98%EB%8A%94-POJO-%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC?category=760012)



PSA란 Portable Service Abstraction 의 약자로 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하려는 추상화 구조를 말한

이는 POJO 원칙을 철저히 따른 Spring 의 기능으로 Spring 에서 동작할 수 있는 Library 들은 POJO 원칙을 지키게끔 PSA 형태의 추상화가 되어있음을 의미한다


가령 일반적인 JUnit이나 Mybatis 등의 여러 Java Framework 에서 사용가능한 라이브러리들은 Spring 에서 지원하는 JUnit 이나 MyBatis 라이브러리와 다르다. 또한 JPA를 사용할 때에 있어서도 Spring JPA가 추상화 시켜준다... 따라서 개발자가 Hibernate를 사용하건 EclipseLink 를 사용하건 신경쓸 필요가 없다.


따라서 이러한 외부 라이브러리들은 Spring에서 사용할 때 내부구현이 달라지더라도 동일한 인터페이스로 동일한 구동이 가능하게끔 설계되어 있으며 의존성을 고려할 필요가 없다.



Spring 은 이렇듯 특정 기술에 직접적 영향을 받지 않게끔 객체를 POJO 기반으로 한번씩 더 추상화한 Layer 를 갖고 있으며 이를통해 일관성있는 서비스 추상화를 만들어낸다.



+ Recent posts