본문 바로가기

SpringFramework/Spring

Spring - PSA

PSA(Portable Service Abstraction)

: 환경의 변화와 관계없이 일관된 방식의 기술 접근 환경을 제공하려는 추상화 구조. 추상화 계층을 사용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것을 추상화(Service Abstraction)라고 한다. (이하 추상화)

 

- 하나의 추상화로 여러 서비스를 묶어둔 것PSA(Portable Service Abstraction)이라고 한다.

- Spring의 대표적인 핵심가치 3가지(Ioc, AOP, PSA)중 하나의 개념이다.

    => Ioc와 AOP 정리내용 확인: https://xggames.tistory.com/13

- Spring은 다양한 기술에 추상화(Service Abstraction)을 제공하고 있다.

Web MVC 추상화

@Controller 어노테이션을 사용하면 @GetMapping, @PostMapping 등으로 요청을 Mapping할 수 있다. (@Controller 어노테이션이 없으면, 매핑 불가능)

Spring Web MVC의 해당 어노테이션을 사용하면 우리는 서블릿을 간편하게 개발할 수 있는데, 뒷단에 Spring이 제공해주는 여러 기능들이 숨겨져 있기 때문이다. HttpServlet을 상속받고 doGet(), doPost()를 구현하는 등의 작업을 직접 하지 않아도 된다. 추상화의 목적 중 하나아 이러한 편의성을 제공하는 것이다

Spring Transaction

@Transactional(readOnly = true)
Users findById(Long id);

트랜잭션을 처리하려면 commit(), rollback() 등의 관련 작업들을 명시적으로 호출해주어야 한다. 하지만 @Transactional 어노테이션을 메소드에 붙여서 사용하면 별도로 코드를 구현하지 않고도 트랜잭션 처리가 가능하다.

 

그리고 Spring에서는 PlatformTransactionManager이라는 최상위 Manager를 사용하고 각각 사용자의 선언에 따라서

- JPATransactionManager

- DatasourceTransactionManager

- HibernateTransactionManager

등.. 상황에 맞게 의존성 주입을 받아 사용하는데, 이런 기술들은 역시 뒷단에 숨겨서 처리를 알아서해주며 개발자가 별도로 처리할 필요가 없어진다.

Spring Cache

@Cacheable("users")
List<User> findAllUser();

Cache쪽도 마찬가지다. @Cacheable 어노테이션만 선언해주면 된다.

- JCacheManager

- ConcurrentMapCacheManager

- EhCacheCacheManager

와 같은 여러가지 구현체를 사용할 수 있다. 

 

참고자료

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

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

= https://dev-coco.tistory.com/83