본문 바로가기

Spring

[Spring] Spring Framework란?(4)

 


PSA란?

PSA는 Potable Service Abstraction의 약자로 휴대용 서비스 추상화라는 의미를 가집니다.

 

먼저, 서비스 추상화란 무엇일까요? 특정 서비스가 추상화되어 있다는 것은 서비스의 내용을 모르더라도 해당 서비스를 이용할 수 있다는 것을 의미합니다.

예를 들어, 우리는 JDBC Driver(Java Database Connectivity Driver: DBMS와 통신을 담당하는 자바 클래스)를 사용해 데이터를 접근하지만  JDBC Driver가 어떻게 구현되어 있는지는 관심이 없습니다. 실제 구현부를 추상화 계층으로 숨기고 핵심적인 요소만 개발자에게 제공함으로써, 실제 구현부를 모르더라도 해당 서비스를 이용할 수 있도록 하는 것입니다.

 

그렇다면 이러한 서비스 추상화에 Potable이 붙으면 무엇을 의미하는지 이야기해 봅시다.

 

Potable은 휴대용이라는 의미로 JDBC Driver의 종류를 비즈니스 로직의 수정 없이 언제든지 변경할 수 있는 것을 의미합니다.  즉, MySQL Driver를 사용하다가 어느 순간 Oracle Driver로 변경한다고 해서 프로젝트의 비즈니스 로직에 변화가 없다는 것입니다.

 

이런 기능이 가능한 것은 추상화 계층이 존재하기 때문입니다. 모든 JDBC Driver는 공통적인 인터페이스를 가지고 있기 때문에 해당 인터페이스를 구현하는 어떤 것으로 대체되든 프로젝트에 영향이 없어지는 것입니다.

 

이러한 점에서 PSA는 확장에는 열려있고 수정에는 닫혀있어야 한다는 OCP에 대표적인 예시라고 할 수 있습니다.

 

PSA가 필요한 이유


PSA는 서비스를 추상화함으로써 개발자가 실제 구현부를 알지 못하더라도 해당 기능을 사용할 수 있게 됩니다.

즉, 추상화 계층인 인터페이스 API의 정보를 활용해 해당 서비스의 모든 기능을 이용하면 되는 것입니다.

 

또한, PSA는 해당 추상화 계층을 구현하는 또 다른 서비스로 언제든지 교체할 수 있게 해 줍니다.

 

예를 들어 비즈니스 로직의 특정 메서드의 결과를 캐싱하고 싶을 때 Spring은 @Cacheable 어노테이션을 사용합니다. 현재 EhCache를 사용해 로컬 캐시를 사용하고 있다고 했을 때 이를 Redis로 바꾸고 싶다면, 해당 비즈니스 로직을 모두 수정할 필요 없이 단순히 CacheManager만 EhCacheCacheManager에서 RedisCacheManager로 교체해 주면 됩니다.

 

Spring PSA의 구현 방법


Spring PSA는 추상화 계층을 추가해 서비스를 추상화하고 여러 서비스를 비즈니스 로직을 수정하지 않고 교체할 수 있도록 하는 것을 의미합니다. 즉, 추상화 계층의 핵심사항입니다. 

 

 

 

 

위 그림은 스프링의 트랜잭션 추상화 계층을 보여줍니다. 핵심은 추상화 계층의 인터페이스인 FlatformTransactionManager 인터페이스를 두고 이를 구현하는 다양한 서비스의 비즈니스 로직을 추상화해 두었다는 것입니다. 개발자는 단순히 FlatformTransactionManager를 선언해서 이용하면 되고 언제든지 이를 구현하는 또 다른 구현체로 바꿀 수 있습니다.

 

그렇다면 위에서 이야기하였던 JDBC Driver에 대해 그림을 통해 알아보도록 하겠습니다.

 

 

 

이처럼 PSA는 복잡한 구현로직을 수정하지 않고도 손쉽게 서비스를 변경할 수 있도록 해줍니다.

 

 

PSA 특징 정리


  • 객체지향 프로그래밍 세계에서 어떤 클래스의 본질적인 특성만을 추출해서 일반화하는 것을 추상화(Abstraction)라고 합니다.
  • 클라이언트가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것이 바로 일관된 서비스 추상화(PSA)의 기본 개념입니다.
  • 애플리케이션에서 특정 서비스를 이용할 때, 서비스의 기능을 접근하는 방식 자체를 일관되게 유지하면서 기술 자체를 유연하게 사용할 수 있도록 하는 것을 PSA(일관된 서비스 추상화)라고 합니다.
  • PSA가 필요한 주된 이유는 어떤 서비스를 이용하기 위한 접근 방식을 일관된 방식으로 유지함으로써 애플리케이션에서 사용하는 기술이 변경되더라도 최소한의 변경만으로 변경된 요구 사항을 반영하기 위함입니다.

 


Reference

https://ch4njun.tistory.com/270

'Spring' 카테고리의 다른 글

[Spring] 간단한 서비스 생성 및 테스트  (0) 2023.04.01
[Spring] Spring 환경 구성  (0) 2023.03.31
[Spring] Spring Framework란?(3)  (0) 2023.03.29
[Spring] Spring Framework란?(2)  (0) 2023.03.29
[Spring] Spring Framework란?(1)  (0) 2023.03.28