[Spring] PSA - Portable Service Abstraction

728x90
반응형
SMALL

PSA (Portable Service Abstraction)

환경의 변화에 관계없이 일관된 방식의 기술 접근 환경을 제공하려는 추상화 구조

즉, 일부 코드 변경만으로도 완전히 다른 기술로 동작이 가능한(Portable) 서비스 추상화(Service Abstraction) 구조이다.

 

 


 

Tomcat & Netty

간단한 gradle 의존성 변경으로 tomcat 또는 netty 사용이 가능하다.

// tomcat
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

// netty
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
}

개발자가 직접 Low Level 코드를 제어하지 않고 간단한 의존성 변경으로 이러한 작업이 가능하다.

 

 


 

Spring Transaction Manager

기존의 JDBC에서의 Transaction 처리는 AutoCommit 해제 등 많은 Low Level 처리가 필요하다.


하지만, Spring이 제공하는 추상화 계층에서는 @Transactional을 사용하면 알아서 처리를 해준다.

그리고 JDBC, JPA, Hibernate에 따라 Connection 관리 방법 등 구현 방법이 다르다.


하지만, Spring은 @Transactional 단일 어노테이션으로 이를 다 커버한다.

 

이것이 바로 추상화 때문에 가능한 것이다.

 

출처 : 토비의 스프링

 

즉, @Transactional은 각 TransactionManager를 구현하고 있는 것이 아니라

최상위 PlatformTransactionManager를 이용하고 필요한 TransactionManager를 DI받아 사용하고 있다.

 

 

PlatformTransactionManager는 TransactionManager를 extends 하고,

PlatformTransactionManager는 한번 더 추상화 되어 AbstractPlatformTransactionManager로 제공이 된다.

 

그리고 각 TransactionManager(JDBC, JPA, Hibernate 등)은 AbstractPlatformTransactionManager를 extends 받아,

각 방식대로 Transaction 처리를 구현한 구조이다.

 

 

Spring의 PSA 덕에 개발자는 JDBC를 사용하던, JPA를 사용하던 트랜잭션 처리를 위해 @Transactional만 사용하면 되는 것 이다.

 


참고

- https://www.inflearn.com/course/spring_revised_edition  

- https://sabarada.tistory.com/127

728x90
반응형
LIST