📖 Books/자바 객체 지향의 원리와 이해

[Books] PSA 일관성 있는 서비스 추상화..요?

오늘 ONEUL 2023. 3. 24. 23:21

 

PSA(Portable Service Abstraction) 너 뭔데?

  • 직역하자면 일관성 있는 서비스 추상화!
  • 어댑터 패턴을 적용해 같은 일을 하는 다수의 기술을 공통의 인터페이스로 제어할 수 있게 한 것을 서비스 추상화라고 한다.
  • 추상화 계층을 사용해서 어떤 기술을 내부에 숨기고 개발자에게 편의성을 제공해주는 것을 서비스 추상화(Service Abstraction)이라 한다.
  • 서비스 추상화(Service Abstraction)로 제공되는 기술을 다른 기술 스택으로 간편하게 바꿀 수 있는 확장성을 갖고 있는 것이 Portable Service Abstraction이다.
  • 환경과 세부 기술의 변화에 관계없이 일관된 방식으로 기술에 접근할 수 있게 해주는 것을 의미한다.

 

Spring은 Spring Web MVC, Spring Transaction, Spring Cache 등의 다양한 PSA를 제공한다.

 

 

 

스프링이 제공하는 PSA - 1) Spring Web MVC

  • 일반 클래스에 @Controller 어노테이션을 사용하면 요청을 매핑할 수 있는 컨트롤러 역할을 수행하는 클래스가 된다. 그 클래스에서는 @GetMapping@PostMapping 어노테이션을 사용해서 요청을 매핑할 수 있다.
    • 서블릿을 Low level로 개발하지 않고도, Spring Web MVC를 사용하면 서블릿을 이렇게 간편하게 개발할 수 있다. 뒷단에 Spring이 제공해주는 여러 기능들이 숨겨져 있기 때문이다.
    • 즉 HttpServlet을 상속 받고 doGet(), doPost()를 구현하는 등의 작업을 직접 하지 않아도 된다.
💡 서비스 추상화의 목적 중 하나가 이러한 편의성을 제공 하는 것이다.
  • Spring Web MVC는 코드를 거의 그대로 둔 상태에서 톰캣이 아닌 완전히 다른 기술 스택을 실행하는 것도 가능하다.
    • 예를 들어 프로젝트가 spring-boot-starter-web 의존성 대신 spring-boot-starter-webflux 의존성을 바꿔주기만 하면 Tomcat이 아닌 netty 기반으로 실행하게 할 수도 있다.

 

이렇게 Spring Web MVC@Controller, @RequestMapping과 같은 어노테이션과 뒷단의 여러가지 복잡한 인터페이스들 그리고 기술들을 기반으로 사용자가 기존의 코드를 거의 변경하지 않고, 웹 기술 스택을 간편하게 바꿀 수 있도록 한다.

 

 

 

스프링이 제공하는 PSA - 2) Spring Transaction

  • Low level로 트랜잭션 처리를 하려면 setAutoCommit()과 commit(), rollback()을 명시적으로 호출해야 한다. 그러나 Spring이 제공하는 @Transactional 어노테이션을 사용하면 단순히 메소드에 어노테이션을 붙여줌으로써 트랜잭션 처리가 일어난다. 이 또한 PSA로써 다양한 기술 스택으로 구현체를 바꿀 수 있다.
    • 예를 들어 JDBC를 사용하는 DatasourceTransactionManager, JPA를 사용하는 JpaTransactionManager, Hibernate를 사용하는 HibernateTransactionManager를 유연하게 바꿔서 사용할 수 있다.
    • 즉 기존 코드는 변경하지 않은 채로 트랜잭션을 실제로 처리하는 구현체를 사용 기술에 따라 바꿀 수 있다.

 

 

 

스프링이 제공하는 PSA - 3) Spring Cache

  • Cache도 마찬가지로 JCacheManager, ConcurrentMapCacheManager, EhCacheCacheManager와 같은 여러가지 구현체를 사용할 수 있다.
  • 사용자는 @Cacheable 어노테이션을 붙여줌을써 구현체를 크게 신경쓰지 않아도 필요에 따라 바꿔 쓸 수 있다.

 

 

 

역시 스프링이 최고야

Spring은 이렇듯 특정 기술에 직접적 영향을 받지 않게끔 객체를 POJO 기반으로 한번씩 더 추상화한 Layer를 갖고 있으며 이를 통해 일관성 있는 서비스 추상화를 만들어낸다.
덕분에 코드는 더 견고해지고 기술이 바뀌어도 유연하게 대처할 수 있다.

 

🔎 빠르게 알아보자 POJO

POJO(Plain Old Java Object)란?
오래된 방식의 간단한 자바 오브젝트
  • 특정 기술에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말한다.
  • Java EE 등 중량 프레임워크들에 사용되는 프레임 워크에 종속된 ‘무거운’ 객체에서 반발해서 사용하게된 용어
  • 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트

 

 

 

 

※ 이 내용은 책 [스프링 입문을 위한 자바 객체 지향의 원리와 이해]를 보고 정리한 내용입니다.