Spring PSA

최지혜·2022년 10월 8일
0

spring

목록 보기
1/4

PSA(Portable Service Abstraction):
코드 구현체를 사용하는 기술에 따라 다르게 바꿔 끼울 수 있다.

  • 코드는 견고해지고, 기술이 바뀜에 따라 코드 바꿀 필요 없게 됨.

스프링 웹 MVC

  • Servlet으로 코딩할 수도 있고,
    Reactive로 코딩할 수도 있다.

  • 서버를 톰캣, 제티, 네티, 언더토우로 바꿔가며 쓸 수도 있다. (코드 변경 최소화 하고도)

  • 서비스 추상화: 서블릿 사용하지 않아도 됨. (맵핑 더 간단하게)

하나의 요청당 하나의 쓰레드를 쓰는 게 아니라,
cpu갯수만큼 쓰레드를 유지하면서
최소한의 쓰레드로 가용성을 높이는
Netty기반(코드 완벽 호환 안 되고 아주 조금 다르긴 함.)

다른 부분

  1. xml파일에서
    spring-boot-starter-webflux
    웹이 아니라 웹플럭스 사용

  2. org.springframework.boot spring-boot-starter-web 를 지움! -> 그러면 모델앤뷰를 사용할 수 없음. (import org.springframework.web.servlet.ModelAndView;)이 부분 못 씀.

스프링 트랜잭션

  • 트랜잭션: 데이터를 주고받을 때 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;
    ```
profile
매일 성장하는 개발자

0개의 댓글