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
'스터디 > Spring' 카테고리의 다른 글
[Spring] 싱글톤 패턴 (Singleton pattern) (0) | 2021.08.17 |
---|---|
[Spring] Spring Container, BeanFactory 그리고 ApplicationContext (0) | 2021.08.17 |
[Spring] AOP(Aspect Oriented Programming)란? (0) | 2021.07.04 |
[Spring] IoC와 DI (0) | 2021.07.04 |
Spring vs SpringBoot (0) | 2021.06.27 |
댓글