PSA을 알고자 하려면 먼저 Service Abstaction을 알아야 한다.
try {
dbConnection.setAutoCommit(false);
doSomething()...
dbConnection.commit();
System.out.println("Done!");
} catch(SQLException e) {
dbConnection.rollback();
}
finally {
...
dbConnection.close();
}
위는 트랜잭션 처리(커밋, 롤백, 커넥션 열고 닫음)에 대한 코드이다. 하지만 우리는 @Transactional이라는 어노테이션을 붙여 트랜잭션을 손쉽게 보장받는다.이처럼 내부적으로 작동하는 기능을 숨기고 추상화하여 개발자에게 편의성을 주는 것을 서비스 추상화(Service Abstaction)이다
위 코드처럼 JDBC 기반으로 DB에 접근하거나, JPA의 ORM 접근을 할 수도 있다. 하지만 어떤 것을 사용하더라도 개발자는 Transcational의 내부 코드를 수정하지 않는다.
하나의 추상화로 여러 서비스를 묶어둔 것을 PSA(Portable Service Abstarction)이라고 한다.
*@Controller, @GET(url) 등의 어노테이션도 마찬가지이다.