PSA (Portable Service Abstraction)
간단하게 말하면, 어떤 기술을 추상화하여 숨겨서(Service Abstraction) 간단하게 사용할 수 있게 하고, 다른 기술에도 적용할 수 있게 해주는(Portable) 방법입니다.
Spring으로 만든 서블릿 애플리케이션을 보면 HttpServlet을 사용하지 않고 단지, @GetMapping 이나 @PostMapping으로 간단하게 구현하는 것을 볼 수 있습니다. 이렇게 서블릿 기술을 숨겨서 개발자들에게 편의성을 제공합니다.
Spring은 Spring Web MVC, Spring Transaction, Spring Cache 등 다양한 PSA를 제공합니다. 하나씩 살펴보겠습니다.
Spring Web MVC
Servlet 애플리케이션을 Spring으로 만들면 아래와 같이 @Controller를 붙여서 Controller를 만들고, @GetMapping과 @PostMapping을 붙여서 요청을 매핑하면 됩니다.
이렇게 Spring Web MVC를 사용하면 간단하게 서블릿 애플리케이션을 개발할 수 있습니다. 그 이유는 똑똑한 Spring이 뒤에서 기술들을 숨겨 놓기 때문입니다. 그렇지 않으면, 개발자는 HttpServlet을 상속받고 Get과 Post 기능을 구현해야 합니다. 이것이 Service Abstraction입니다.
Spring은 기본적으로 Tomcat이 내장되어 있습니다. 그런데 Netty로 바꿀 수 있는데요. 이때, 개발자는 Tomcat에서 사용한 코드 대부분을 그대로 두고 Netty 기반 애플리케이션에서 동작시킬 수 있습니다. 이렇게 다른 기술 스택에서 실행하는 것이 가능합니다. 이것이 Portable입니다.
Spring Transaction
잠시 트랜잭션에 대해서 간략하게 이야기 하자면, DB와 데이터를 주고 받는 작업 A가 완료되기 위해서 a -> b -> c 차례대로 완료가 되어야 합니다. 그런데 이 중에 하나라도 정상 완료가 되지 않으면, 모든 작업을 없던 것으로 처리하는 것을 말합니다.
실제 트랜잭션을 처리하기 위해서는 SQL을 보내는 코드들을 아래와 같이 손수 작성해야 합니다. try ... catch, setAutoCommit(), commit(), rollback() 등을 해주어야 합니다.
그런데 Spring에서는 @Transactional 어노테이션을 method에 붙이면, 그 method는 트랜잭션 처리 됩니다. 물론 다른 기술 스택에서도 사용할 수 있는 Portable도 제공합니다. JDBC, JPA.
참고
- 위키백과
'IT > Spring' 카테고리의 다른 글
[안드로이드 앱 서버 만들기] 2. AWS EC2와 MariaDB 생성 (0) | 2021.07.06 |
---|---|
[안드로이드 앱 서버 만들기] 1. 프로젝트 생성 (0) | 2021.07.03 |
[IntelliJ] 내가 필요한 단축키 모음 (0) | 2021.06.26 |
AOP (Aspect Oriented Programming) (0) | 2021.06.23 |
IoC (Inversion of Control) (0) | 2021.06.22 |