스프링 프레임워크의 DI와 AOP에 대해 살펴봤다. 이제 마지막으로 살펴볼 스프링 삼각형의 요소는 PSA(Portable Service Abstraction), 즉 일관성 있는 서비스 추상화다.
서비스 추상화의 예로 JDBC를 들 수 있다. JDBC라고 하는 표준 스펙이 있기에 오라클을 사용하든, MySQL을 사용하든, MS-SQL을 사용하든 Connection, Statement, ResultSet을 이용해 공통된 방식으로 코드를 작성할 수 있다. 데이터베이스 종류에 관계없이 같은 방식으로 제어할 수 있는 이유는 디자인 패턴에서 설명했던 어댑터(변환기) 패턴
을 활용했기 때문이다. 이처럼 어댑터 패턴을 적용해 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 한 것을 서비스 추상화라고 한다.
스프링 프레임워크에서는 서비스 추상화를 위해 다양한 어댑터를 제공한다. 예를 들어, OXM(Object XML Mapping : 객체와 XML 매핑) 기술만 하더라도 Castor, JAXB, XMLBeans, JiBX, XStream 등 다양한 기술이 있는데, 이 다양한 기술들이 제공하는 API는 제각각이다. 스프링은 제각각인 API를 위한 어댑터를 제공함으로써 실제로 어떤 OXM 기술을 쓰든 일관된 방식으로 코드를 짤 수 있게 지원한다. 또한 하나의 OXM 기술에서 다른 OXM 기술로 변경할 때 큰 변화 없이 세부 기술을 교체해서 사용할 수 있게 해준다. 이처럼 서비스 추상화를 해주면서 그것도 일관성 있는 방식을 제공한다고 해서 이를 PSA (일관성 있는 서비스 추상화)라고 한다. 스프링은 OXM뿐만 아니라 ORM, 캐시, 트랜잭션 등 다양한 기술에 대한 PSA를 제공한다.
참고