Portable Service Abastraction
잘 만든 인터페이스 / 기술에 특화되어 있지 않은 코드를 얘기한다.
왜 좋은가?
https://en.wikipedia.org/wiki/Service_abstraction
Example - Servlet 작성
HttpServlet을 상속 받아서 doGet(), doPost() 함수 작성 & web.xml 설정 작성
@Controller - Spring Web MVC 추상화 계층 덕분에 편함
Spring Web MVC 추상화 계층
@Controller, @GetMapping을 이용해서 사용
1) 편안하다 : HttpServlet을 몰라도 됨, Mapping 편하게 할 수 있음
2) 특정 기술에 독립적 : Tomcat 기반으로 실행이 됨
Spring 5부터는 webflux라는 기술이 도입되었다. Servlet 대신 Reactive로 컨트롤러를 작성할 수 있다. webflux는 tomcat대신 netty를 사용하고 있다.
( starter-web => starter-webflux )
스프링의 Web MVC 추상화 계층 덕분에 기존 코드에 수정이 거의 없이
Netty로 전환이 가능하다.
스프링 트랜잭션 ( Spring Transaction )
기존 JDBC 코드
row level 단으로 commit, rollback을 다 신경써줘야 함
try{
dbConnection = getDbConnection();
dbConnection.setAutoCommit(false);
// sql문들
dbConnection.commit();
} catch(SqlException e){
dbConnection.rollback();
}
@Transactional
위의 코드를 직접짜지 않아도 트랜잭션 처리가 가능하다.
JpaTransactionManager <-> DatasourceTransactionManager 특정 기술에 종속되지 않은 코드를 작성할 수 있다.
그 외에도 많은 Spring PSA가 있다.
스프링캐시
스프링 덕분에 이렇게 편안하게 사용을 하고 있다. 나의 코드도 기술에 종속적이지 않고, 확장성이 좋은 코드를 작성하도록 노력해야겠다ㅎㅎ
'Back-End > Spring' 카테고리의 다른 글
스프링 5 - PushBuilder란 (0) | 2019.05.07 |
---|---|
스프링 프록시 패턴 - Proxy Pattern (0) | 2019.05.02 |
Spring annotation - @Service,@Controller,@Component 차이 (0) | 2019.04.16 |
Spring DataIntegrityViolationException 에러 (0) | 2019.04.03 |
Lombok 사용하기 (0) | 2019.03.15 |