본문 바로가기

Back-End/Spring

PSA에 관하여

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가 있다. 

 

스프링캐시

 

스프링 덕분에 이렇게 편안하게 사용을 하고 있다. 나의 코드도 기술에 종속적이지 않고, 확장성이 좋은 코드를 작성하도록 노력해야겠다ㅎㅎ