[Spring 3대 요소] 2. 서비스 추상화 (PSA)

namkun·2023년 6월 1일
0

T-I-L

목록 보기
11/20
post-thumbnail

PSA (Portable Service Abstraction)

Spring framework를 사용하면 서비스 추상화를 통해 특정환경이나 서버, 기술에 종속되지 않으며 유연한 애플리케이션을 개발할 수 있다.

대표적인 예시로 Servlet 기반의 어플리케이션을 만들고 있음에도 불고하고 Servlet 코드를 볼 수 없다.
단순하게 @Controller 어노테이션이 붙어있는 클래스에 @GetMapping, @PostMapping 등의 @RequestMapping 어노테이션을 사용해서 요청을 매핑한다.

실제로는 내부적으로 Servlet 기반으로 코드가 동작하지만 해당 기술은 추상화 계층에 숨겨져 있는 것이다.

이렇게 추상화 계층에 특정 기술을 숨겨놓고, 개발자에게 편의성을 주는 것을 서비스 추상화 (Service Abstraction)이라고 한다.

Spring Framework는 Spring Web MVC, Spring Transaction, Spring cache등의 다양한 PSA를 제공한다.

1. Spring Web MVC

위에서 말했던 것이다.

일반 클래스 위에 @Controller 어노테이션을 사용하면 요청을 매핑할 수 있는 컨트롤러 역할을 하는 클래스가 된다.
해당 클래스에서는 @GetMapping, @PostMapping 등의 어노테이션을 사용해서 요청을 매핑할 수 있다.

이렇게 Spring Web MVC 를 사용하면 서블릿을 간편하게 구현할 수 있는데, 이는 뒷 단에 Spring이 제공해주는 여러 기능이 추상화되어 숨겨져있기 때문이다.

굳이 우리가 HttpServlet을 상속받고, doGet(), doPost()등의 메서드를 구현하는 등의 low level의 작업을 직접 하지 않아도 되고, 기존의 코드에 대한 수정이 거의 없어 아주 편리하다.

2. Spring Transaction

low level로 Transaction을 구현하려면 setAutoCommit(), commit(), rollback() 등의 메서드를 명시적으로 호출해야하지만, @Transactional 어노테이션을 추가해주기만 하면 알아서 트랜잭션 처리가 된다.

또한 다양한 기술 스택으로 구현체를 바꿀 수 있는데, 그 이유는 아래의 그림을 보면 알 수 있다.
출처 : 토비의 스프링 3.1

즉, Spring의 @Transactional은 각 Transaction Manager를 각각 구현해놓은 것이 아니라, 최상위 PlatformTransactionManager 를 이용하고 필요한 TransactionManager를 DI로 주입받아 사용하기에 필요할 때 구현체를 바꿔서 사용할 수 있다.

3. Spring Cache

Cache도 마찬가지로 JCacheManager, ConcurrentMapCacheManager...등 과 같은 여러 구현체가 있지만, 사용자는 @Cacheable 어노테이션 하나만 붙여줘서 구현체를 신경쓰지 않고 필요에 맞게 바꿔서 사용할 수 있다.

profile
개발하는 중국학과 사람

0개의 댓글