1. 서비스 추상화(Service Abstraction)

  • 어떤 서비스의 구현부에 관계없이 추상화된 하나의 인터페이스로 같은 기능을 수행 가능
  • 코드가 서비스의 구현부에 독립적이기 때문에 재사용성이 높은 코드를 작성 가능
  • 복잡한 기능의 구현을 내부로 숨기고 사용하기 편한 추상화 인터페이스를 통해 편의성 제공
  • DBMS에 독립적으로 동일하게 사용 가능한 JDBC 등이 서비스 추상화의 대표적 예시
  • 서비스 추상화를 통해 특정 서비스 계층의 구현부를 교체하더라도 이를 사용하는 코드에는
    변화가 없도록 하는 것을 PSA라 함
  • 객체지향의 5원칙중 하나인 개방-폐쇄 원칙(Open-Closed Principle)의 사례

 

 

2. Spring의 PSA

  • Spring은 사용자에게 제공할 추상화된 인터페이스와 실제 구현부의 API를 이어줄 다양한
    어댑터(Adapter)를 제공하여 PSA를 구현

     

  • 예시

    • Spring Boot로 프로젝트를 시작할 경우 기본 내장 서블릿 컨테이너로 Tomcat을 사용
      => 코드를 거의 수정하지 않고 전혀 다른 서블릿 컨테이너를 사용하도록 할 수 있음

       

    • 원래 DB 작업에서 트랜잭션을 사용하기 위해서는 JDBC등의 라이브러리를 통해 복잡한 처리가 필요
      => Spring에서는 @Transactional 어노테이션을 사용하여 간편하게 트랜잭션 적용 가능(AOP)
      => JDBC가 아닌 JPA 등이 지원하는 Transaction Manager를 사용하더라도 코드 변경이 필요없음(PSA)

       

    • 캐싱 기능 또한 원래라면 사용할 캐시 라이브러리에 따라 (Redis, Memcached, EhCache 등)
      다른 코드를 작성하여 캐싱을 적용해야하지만 Spring은 각 캐시 라이브러리의 CacheManager를
      관리할 Manager를 Bean으로 등록하면 @Cacheable, @CacheEvict, @CachePut 등의 어노테이션을
      통해 추상화된 캐시 인터페이스를 사용한 간편한 캐싱이 가능

 

'프레임워크 > Spring' 카테고리의 다른 글

#8 Spring Boot 프로젝트  (0) 2022.05.04
#7 Spring 의 구조  (0) 2022.05.03
#5 Spring AOP(Aspect Oriented Programming)  (0) 2022.04.30
#4 Spring 의존성 주입 방법  (0) 2022.04.27
#3 Spring에 적용된 디자인 패턴  (0) 2022.04.24

+ Recent posts