본문 바로가기
스터디/Spring

[Spring] PSA (Portable Service Abstraction) 란?

by zoodi 2021. 7. 4.
728x90
PSA (Portable Service Abstraction)

잘 만든 인터페이스(PSA)를 가지고 나의 코드가 바뀌지 않도록 다른 기술로 간편하게 바꿀 수 있도록 확장성을 갖는 것이다. Spring은 Spring Web MVC, Spring Transaction, Spring Cache 등의 다양한 PSA를 제공한다.

 

1. Spring Web MVC

일반 클래스에 @Controller 애노테이션을 사용하면 요청을 매핑할 수 있는 컨트롤러 역할을 수행하는 클래스가 된다. 또한, 의존성 설정에서 코드 한 줄만 바꾸면 tomcat이 아닌 netty기반으로 실행되게 변경할 수 있다.

이러한 어노테이션과 dependency 등을 통해서 복잡한 인터페이스를 가지고 사용자가 웹 기술 스택을 편리하게 바꿀 수 있도록 해준다. 이때 중요한 것은 기존 코드를 거의 변경하지 않아도 된다는 것이다.

 

2. Spring Transaction

기존 로우레벨에서는 commit, rollback 등을 통해 직접 트랜잭션을 처리해주어야했다. 하지만 스프링에서는 @Transactional 어노테이션 하나만으로 트랜잭션 처리가 가능하다. 이또한 PSA로써 다양한 기술 스택으로 구현체를 바꿀 수 있다.

예를 들어 JDBC를 사용하는 DatasourceTransactionManager, JPA를 사용하는 JpaTransactionManager, Hibernate를 사용하는 HibernateTransactionManager를 유연하게 바꿔서 사용할 수 있다.

즉 기존 코드는 변경하지 않은 채로 트랜잭션을 실제로 처리하는 구현체를 사용 기술에 따라 바꿔 끼울 수 있는 것이다.

 

3. Spring Cache

Cache도 마찬가지로 JCacheManager, ConcurrentMapCacheManager, EhCacheCacheManager와 같은 여러가지 구현체를 사용할 수 있다.

사용자는 @Cacheable 애노테이션을 붙여줌으로써 구현체를 크게 신경쓰지 않아도 필요에 따라 바꿔 쓸 수 있는 것이다.

 

이렇게 spring이 제공해주는 다양한 PSA 기술 덕분에 코드는 더 견고해지고 기술이 바뀌어도 유연하게 대처할 수 있게 된다.

 

 

 


*참고

1. 스프링 프레임 워크 입문 (인프런) - 백기선

2.https://atoz-develop.tistory.com/entry/Spring-%EC%8A%A4%ED%94%84%EB%A7%81-PSA

 

728x90

댓글