PSA(Portable Service Abstraction)
영어를 직역하면 '휴대용 서비스 추상화'라고 해석할 수 있지만, 무엇을 의미하는지 한눈에 알기는 어렵다.
추상화라고 하면 '공통된 부분을 추출해내는 것이다'라고 설명할 수 있다. 그러면 여기서 말하는 서비스 추상화는 무엇을 의미할까?
서비스 추상화는 서비스의 내용을 모르더라도 해당 서비스를 이용할 수 있다는 것을 의미한다.
PSA 예
Spring Web MVC를 예로 들어보면, 우리는 클래스를 만들고 해당 클래스에 @Controller 어노테이션을 작성하여 컨트롤러 역할을 하는 클래스를 만든다. 그래서 @GetMapping이나 @PostMapping으로 요청을 매핑하여 사용한다.
그런데 원래 Servlet을 사용하기 위해서는 HttpServlet을 상속받고 doGet()이나 doPost()를 구현하는 작업이 필요하다.
하지만 우리는 별도의 작업 없이 간편하게 서비스를 이용하고 있다. 즉, 앞서 말한 것처럼 Servlet에 대해 잘 몰라도 @Controller 어노테이션을 사용해서 Servlet을 만들어서 이용하고 있다.
이처럼 Service Abstraction의 목적 중 하나가 이러한 편의성을 제공하는 것이다.
또한, 톰캣 기반 서버를 다른 기술 스택으로 변경하는 것도 용이하다.
코드를 거의 수정하지 않고 의존성을 변경해주면 톰캣 기반 서버에서 다른 기술 스택 기반 서버로 바꿀 수 있다는 것이다.
이렇게 Spring Web MVC는 @Controller, @GetMapping, @PostMapping과 같은 어노테이션과 뒷단의 여러 가지 복잡한 인터페이스들 그리고 기술들을 기반으로 하여 사용자가 기존 코드를 수정하지 않고, 웹 기술 스택을 간편하게 바꿀 수 있게 해 준다.
Spring Transaction을 하나 더 예시로 들어보자.
Transaction이라고 하면 데이터 베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위를 의미한다.
데이터 베이스를 변환시키기 때문에 논리적인 작업을 완전하게 수행하여 데이터 베이스에 적용하고 그렇지 않으면 이전 상태로 되돌려야 한다.
그래서 우리는 Transaction을 위해 @Transactional 어노테이션을 사용한다.
하지만 low level에서 Transaction 처리를 한다고 하면 예외 처리를 해주고 commit(), rollback() 메서드를 호출해야 한다. 그러면 코드가 길어질 것이고 가독성이 떨어진다. 그리고 에러가 생길 확률이 높아지는 것은 덤이다.
하지만 앞서 말했듯이 @Transactional 어노테이션으로 Transaction 처리를 간편하게 해주고 있다.
Spring Transaction도 PSA이므로 다양한 기술 스택으로 구현체를 바꿀 수 있다.
예를 들어, JDBC를 사용하는 DataSourceTransactionManager, JPA를 사용하는 JPATransactionManager, Hibernate를 사용하는 HibernateTransactionManager를 유연하게 바꿔서 사용할 수 있다.
즉, 기존 코드를 변경하지 않은 채로 Transaction을 실제로 처리하는 구현체를 사용 기술에 따라 바꿀 수 있다.
정리
서비스 추상화(Service Abstraction)는 추상화 계층을 활용하여 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것.
서비스 추상화로 제공되는 기술을 다른 기술 스택으로 간편하게 바꿀 수 있는 확장성을 갖고 있는 것을 PSA(Portable Service Abstraction)이라고 한다.
▽ 도움을 주신 분들
'Spring > Spring' 카테고리의 다른 글
[Spring] Spring Boot에서 MockMvc 사용해보자! (0) | 2022.07.15 |
---|---|
[Spring] Spring Triangle? 그게 뭔데 - IoC/DI (0) | 2022.06.30 |
[Spring] Spring Triangle? 그게 뭔데 - AOP (0) | 2022.06.29 |
[Spring] 인터셉터(Interceptor)에 대해 알아보자! (0) | 2022.06.28 |
[Spring] Filter에 대해 알아보자 ! (0) | 2022.06.24 |