PSA(Portable Service Abstraction):
코드 구현체를 사용하는 기술에 따라 다르게 바꿔 끼울 수 있다.
- 코드는 견고해지고, 기술이 바뀜에 따라 코드 바꿀 필요 없게 됨.
Servlet으로 코딩할 수도 있고,
Reactive로 코딩할 수도 있다.
서버를 톰캣, 제티, 네티, 언더토우로 바꿔가며 쓸 수도 있다. (코드 변경 최소화 하고도)
서비스 추상화: 서블릿 사용하지 않아도 됨. (맵핑 더 간단하게)
하나의 요청당 하나의 쓰레드를 쓰는 게 아니라,
cpu갯수만큼 쓰레드를 유지하면서
최소한의 쓰레드로 가용성을 높이는
Netty기반(코드 완벽 호환 안 되고 아주 조금 다르긴 함.)
xml파일에서
spring-boot-starter-webflux
웹이 아니라 웹플럭스 사용
트랜잭션: 데이터를 주고받을 때 abc다돼야 만료
하나라도 잘못되면 모두 취소되어 그 전단계로 돌아가야 하는 경우!
ex. 쇼핑몰에서 쇼핑할 때, 물건 없으면 돈도 돌려줘야 함.
(Jpa, Datasourxe, Hibernate중 뭐든 써도 됨.-> 포터블 !)
코드 구현체를 사용하는 기술에 따라 다르게 바꿔 끼울 수 있다.
원래는
dbConnection.setAutoCommit(false);
false로 맞춰놓고
~ 로직들 적고
모두 성공하면
dbConnection.commit(); -> DB로 저장
실패하면
} catch (SQLException e) {
dbConnection.ro.llback();
이렇게 롤백 되게 해야 하지만,
스프링에서 @Transactional 라는 추상화 객체 제공해서
@Transactional 붙이면 그 메소드는 트랜잭셔널 처리가 되기 때문에
위의 코드를 짜지 않아도 트랜잭션 처리됨. 편리!
스프링 캐시 등이 있음.
@Cacheable @CacheEvict
ex.
@Cacheavle("vets")
Collection<Vet> findAll() throws DataAccessException;
```