기타 정리용 포스팅

hoyong.eom·2023년 8월 29일
0

스프링

목록 보기
37/59
post-thumbnail

@Repository가 붙은 객체는 컴포넌트 스캔의 대상일뿐만 아니라 추가 기능을 제공한다.

  • @Repository 가 붙은 클래스는 컴포넌트 스캔의 대상이 된다.
  • @Repository 가 붙은 클래스는 예외 변환 AOP의 적용 대상이 된다.

따라서, @Repository가 붙으면 스프링 예외 추상화가 알아서 된다.

@Controller는 SpringMVC 기능과 컴포넌트 스캔의 대상이된다.

@Service는 컴포넌트 스캔의 대상이 된다.

spring data 라는 기술을 여러 DB 기술들을 비슷하게 사용할 수 있도록
기본적인 인터페이스를 의미함. 그리고 spring data 하위에는 그 구현체들이 존재함. 그게 바로 spring data jpa, spring data mongo, spring data redis 등등이 존재함.

  • CRUD + 쿼리
  • 동일한 인터페이스
  • 페이징 처리
  • 메서드 이름으로 쿼리 생성
    등등 공통 기능을 제공함.

트랜잭션 매니저

JPA, 스프링 데이터 JPA, QueryDSL을 모두 JPA 기술을 사용하는것이기 떄문에 트래잭션 매니저로 JpaTransactionManager를 선태하면 된다. 해당 기술을 사용하면 스프링 부트는 자동으로 JpaTransactionManager를 스프링빈에 등록한다.
그런데, JdbcTemplate, MyBatis와 같은 기술들은 내부에서 JDBC를 직접 사용하기 때문에 DataSourceTransactionManager를 사용한다.
따라서 Jpa와 JdbcTemplate 두 기술을 함께 사용하면 트랜잭션 매니저가 달라진다. 결국 트랜잭션을 하나로 묶을 수 없는 문제가 발생할 수 있다.

JpaTransactionManager의 다양한 지원

JpaTransactionManager는 놀랍게도 DataSourceTransactionManager가 제공하는 기능도 대부분 제공한다. JPA라는 기술도 결국 내부에서는 DataSource와 JDBC 커넥션을 사용하기 떄문이다. 따라서 JdbcTemplate, MyBatis와 함께 사용할 수 있다.
결과적으로 JpaTransactionManager를 하나만 스프링빈에 등록하면 JPA, JdbcTemplate, MyBatis 모두를 하나의 트랜잭션으로 묶어서 사용할 수 있다. 물론 함께 롤백도 가능하다.

0개의 댓글