Spring 과 JPA

Spring/DB, Cache 연동 2024. 2. 14. 22:24

J2EE 컨테이너 환경의 대표격인 Spring 에서 JPA 를 사용할 경우 알아야할 중요한 개념을 나열해보겠다. 순수하게 J2SE 환경에서 JPA 를 사용하면 개발자가 직접 EntityManager 를 생성해야하며, Transaction 도 관리해야한다. J2EE 환경에서 JPA 를 사용하면 트랜잭션 범위의 영속성 컨텍스트 전략이 기본으로 채택된다. Spring 에서 트랜잭션 범위와 영속성 컨텍스트 생존 범위가 동일한 전략을 따르면, 트랜잭션 AOP 를 활용한다. 트랜잭션 범위와 영속성 컨텍스트 생존 범위가 동일한 전략 해당 전략에서는 트랜잭션을 시작할 때, entityManager 를 생성하고 트랜잭션이 종료 될 때, entityManager 도 닫힌다. 트랜잭션이 같으면 동일한 EntityMana..

Spring Transaction 5

Spring/DB, Cache 연동 2022. 9. 28. 22:30

트랜잭션이 둘 이상 있을 경우 어떻게 동작 할까? (트랜잭션 내부에서 트랜잭션이 또 적용되면?) 트랜잭션 전파(Transaction Propagation)에 대하여 학습해보자.. 기본 대원칙 1. 모든 논리 트랜잭션이 커밋되어야 물리 트랜잭션이 커밋된다. 2. 하나의 논리 트랜잭션이라도 롤백되면 물리 트랜잭션은 롤백된다. 기본 대원칙에 대해 자세히 알아보자. 물리 트랜잭션, 논리 트랜잭션 위 그림 처럼, 클라이언트가 어떤 로직1을 호출 하면 트랜잭션이 수행되고 로직1은 로직2를 호출하여 트랜잭션이 또 한번 수행된다고 생각 해보자. 스프링은 첫번째 두번째 트랜잭션을 논리 트랜잭션, 두개를 묶어 물리 트랜잭션이라 개념을 만들었다. 물리 트랜잭션 물리 트랜잭션은 실제 데이터베이스에 적용되는 트랜잭션을 뜻한다...

Article Thumbnail
Spring Transaction 4

Spring/DB, Cache 연동 2022. 9. 28. 22:16

트랜잭션 내부 로직 수행도중... 예외가 터지면 어떻게 될까..? 예외가 발생할 경우의 트랜잭션 처리에 대해 알아보자.. 앞선 @Controller, @Service, @Repository 포스팅에서 잠시 알아보긴 했었다.. https://starryeye.tistory.com/97 더 자세하게 알아보자.. 스프링 트랜잭션 AOP는 예외 종류에 따라 트랜잭션을 커밋하거나 롤백한다. Java의 예외 이전 포스팅 https://starryeye.tistory.com/52 참조 언체크 예외(RuntimeException, Error와 그 하위 예외) -> 트랜잭션 롤백 체크 예외(Exception과 그 하위 예외) -> 트랜잭션 커밋 스프링은 기본적으로 체크 예외는 비즈니스 의미가 있을 때 사용하고, 언체크 ..

Spring Transaction 3

Spring/DB, Cache 연동 2022. 9. 22. 22:57

트랜잭션의 옵션 value 요소, transactionManager 요소 트랜잭션 매니저를 둘 이상 사용할 경우에 사용된다. 트랜잭션 프록시가 사용할 트랜잭션 매니저를 지정해 줄 수 있다. 트랜잭션 매니저의 스프링 빈 이름을 기입하면 된다. 생략 가능하며, 생략할 경우 기본으로 등록된 트랜잭션 매니저가 사용된다. ex. @Transaction("TxM") (어노테이션에서 요소가 하나인 경우, value는 생략가능) rollbackFor 요소 스프링 트랜잭션은... 언체크 예외가 발생하면 롤백하고, 체크 예외가 발생하면 커밋한다. 하지만.. 커밋하고 싶지 않은 체크예외가 있을 수 있다. 이 때 사용된다. ex. @Transaction(rollbackFor = Exception.class) -> 모든 예외를..

Article Thumbnail
Spring Transaction 2

Spring/DB, Cache 연동 2022. 9. 22. 22:26

트랜잭션 AOP 주의사항에 대해 알아보자. 1. 동일 클래스에서 내부 @Transaction 메서드 호출 @Component class Service { @Transaction public void A() { } public void B() { A(); } } @Component @RequiredArgsConstructor class Controller { private final Service s; public void X() { s.A(); } public void Y() { s.B(); } } Service 클래스에서 A() 메서드에 @Transaction 어노테이션이 적용되어있다. B() 메서드는 @Transaction 어노테이션이 적용되어 있지 않고 내부에서 A()를 호출하고 있다. Contro..

Spring Transaction 1

Spring/DB, Cache 연동 2022. 9. 22. 21:44

트랜잭션을 공부하기 앞서.. 순수 JDBC를 사용할 경우에 트랜잭션을 처리하는 법과 JPA를 사용할 경우에 트랜잭션을 처리하는 법에 대해 잠깐 복습해보자. 순수 JDBC 트랜잭션 Connection con = dataSource.getConnection(); try { con.setAutoCommit(false); //트랜잭션 시작 //비즈니스 로직 con.commit(); //비즈니스 로직 성공 시.. }catch(Exception e) { con.rollback(); //비즈니스 로직 실패 시.. throw new IllegalStateException(e); }finally { release(con); } JPA 트랜잭션 //Entity 매니저 팩토리 생성 EntityManagerFactory em..

Article Thumbnail