Dev/Springboot

Spring 의 PSA - 웹 기술 스택을 간편하게 변경할 수 있는 방법

린네의 2024. 5. 6. 19:15

 

 

Spring POJO 구조의 마지막 내용이다.  AOP와 DI 관련된 내용은 다음 게시글을 참고 바란다.

 

2024.05.06 - [개발/springboot] - Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법

 

Spring 의 AOP - 공통 소스 파일을 분리하여 관리할 수 있는 방법

java OOP 관련 게시글을 작성하다가 Spring에서 필수적으로 알아야 하는 AOP/IoC/DI/PSA에 대해 정리한 글을 공유하면 좋을 것 같아 글을 남겨 본다.  그중에서도 이번 게시글은 AOP에 관련된 내용이다.

zigo-autumn.tistory.com

 

2024.05.06 - [개발/springboot] - Spring의 DI - 코드를 유연하고 단순하게 하는 방법

 

Spring의 DI - 코드를 유연하고 단순하게 하는 방법

이전 AOP에 이어 DI와 IoC에 대한 개념을 함께 정리해볼까 한다.AOP에 대한 게시글이 궁금하다면 아래 링크를 참조 바란다. 2024.05.06 - [개발/springboot] - Spring의 AOP - 공통 소스 파일을 분리하여 관리

zigo-autumn.tistory.com

 

PSA(Poratble Service Abstraction)란?

PSA란 환경의 변화와 관계없이 일관된 방식의 기술로 접근 환경을 제공하는 추상화 구조를 말한다. 특정 클래스가 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것을 의미한다.

 

PSA가 적용된 코드는 개발자가 작성한 기존의 코드를 수정하지 않으면서 유연하게 확장할 수 있으며 특정 기술에 특화되어있지 않게 된다.

 

Spring에서는 POJO 원칙을 지키기 위해 PSA 형태의 추상화가 되어 있다.

 

 

  • 서비스에 적용하는 PSA 예시

[출처] https://ittrue.tistory.com/214

 

 

각 DBMS 별로 Connection을 얻기 위해  DbClient는 JdbcConnector라는 인터페이스를 통해 간접적으로 Connection 객체를 얻을 수 있게 된다.  이렇게 되면 일관된 방식으로 해당 서비스의 기능을 사용할 수 있다.

 

 

Spring에서 제공하는 PSA  예시

  • @Transactional

[출처] https://memodayoungee.tistory.com/137

 

추상화 계층의 인터페이스인 Platform TransactionManager를 두고 이를 구현하는 다양한 비즈니스 로직을 추상화해두었다. 개발자는 단순히 Platfrom TransactionManager를 선언해서 이용하고 이를 구현하는 다른 구현체로 변경할 수 있다. 

 

  • @Spring Web MVC

코드를 거의 바꾸지 않아도 톰캣이 아닌 다른 기술 스택으로 실행할 수 있다. 예를들어 springboot-starter-web 대신 spring-boot-starter-webflux 의존성을 받도록 바꿔주기만 하면 톰캣이 아닌 netty 기반으로 실행할 수 있다.