추상화(Abstraction)
불필요한 부분을 생략하고 객체의 속성 중 가장 중요한 것에만 중점을 두어 개략화하는 것
PSA(Portable Service Abstraction): 휴대용 서비스 추상화
Portable은 휴대용이라는 의미로 JDBC Driver 의 종류를 비즈니스 로직의 수정없이 변경할 수 있는 것을 의미한다.
즉, MySQL Driver 를 사용하다 Oracle Driver 로 변경 시, 비즈니스 로직 수정 없이 바꿀 수 있다는 것이다.
이런 기능이 가능한 것은 추상화 계층이 존재하기 때문이다.
모든JDBC Driver 는 공통적인 인터페이스를 가지고 있어 다른것으로 대체하어도 프로젝트에 영향을 끼치지 않는다.
이러한 점에서 Spring PSA 는 확장에는 열려있고 수정에는 닫혀있어야 한다는 OCP에 대표적인 예시라고 할 수 있다.
💠 완벽하게 이해하는 OCP (개방 폐쇄 원칙)
개방 폐쇄 원칙 - OCP (Open Closed Principle) 개방 폐쇄의 원칙(OCP)이란 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙을 말한다. 보통 OCP를 확장에 대해서는
inpa.tistory.com
Spring PSA 를 왜 사용할까?
위에서도 언급하긴 했지만 서비스를 추상화함으로써 개발자가 실제 구현부를 알지 못하더라도 해당 기능을 사용할 수 있게된다. 즉, 추상화 계층인 인터페이스 API 의 정보를 활용해 해당 서비스의 모든 기능을 이용하면 되는 것이다.
또한, PSA 는 해당 추상화 계층을 구현하는 또 다른 서비스로 언제든지 교체할 수 있게 해준다. 비즈니스 로직의 수정도 없이 말이다.
위에서 잠깐 예시를 든 JDBC Driver 이외의 또 다른 예시를 들어보자면 @Cacheable 어노테이션을 들 수 있다.
비즈니스 로직의 특정 메소드의 결과를 캐싱하고 싶을 때 @Cacheable 어노테이션을 사용한다. 현재 EhCache 를 사용해 로컬캐시를 사용하고 있다고 했을 때 이를 Redis 로 바꾸고 싶다. 그러면 해당 비즈니스 로직을 모두 수정해야할까?
아니다. 단순히 CacheManager 만 EhCacheCacheManager 에서 RedisCacheManager 로 교체해주면 된다.
Spring PSA 의 구현방법
Spring PSA 는 추상화 계층을 추가해 서비스를 추상화하고 여러 서비스를 비즈니스 로직을 수정하지 않고 교체할 수 있도록 하는 것을 의미한다. 즉, 추상화 계층의 핵심사항이다. 그림으로 살펴보자.
핵심은 추상화 계층의 인터페이스인 FlatformTransactionManager 인터페이스를 두고 이를 구현하는 다양한 서비스의 비즈니스 로직을 추상화 해두었다는 것이다. 개발자는 단순히 FlatformTransactionManager 를 선언해서 이용하면 되고 언제든지 이를 구현하는 또 다른 구현체로 바꿀 수 있다.
JDBC Driver 예시
위에서 소개한 두 가지 예시를 통해서 Spring SPA 가 어떻게 맞물려 돌아가는지 이해할 수 있을 것이다.
이외에도 Tomcat 과 Netty 를 의존성만 변경하면 사용할 수 있는 것도 Spring PSA 를 통해 추상화되어있기 때문에 가능하다. 이처럼 Spring PSA 는 복잡한 구현로직을 수정하지 않고도 손쉽게 서비스를 변경할 수 있도록 해준다.
'CS' 카테고리의 다른 글
[Java] 객체지향 분석(OOA) 및 설계(OOD) 및 설계원칙(SOLID) (0) | 2023.10.19 |
---|---|
[Java] 객체지향 프로그래밍(OOP; Object-Oriented Programming) (0) | 2023.10.19 |
[OS] 캐시의 지역성 (0) | 2023.10.07 |
[OS] 가상 메모리(Virtual Memory System)란? (1) | 2023.10.07 |
[OS] 세마포어(Semaphore)와 뮤텍스(Mutex) (0) | 2023.10.07 |