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 |