이번에는 REQUIRES_NEW를 사용해서 문제 상황을 가정하고 해결해보도록 하자. 문제 상황 회원가입에 성공하면 회원 DB와 회원 이력 로그 DB에 저장하는 비지니스 로직을 수행해야 한다. 회원가입과 이력 로그를 저장하는 로직을 하나의 트랜잭션으로 묶어서 처리하던 중, 만약 이력 로그 저장에서 문제가 발생하면 회원가입 자체가 안 되는 상황이 발생한다. 실제 비지니스에서 이런 상황이 발생하면 많은 회원들이 이탈하는 문제가 발생할 것이기 때문에 요구 사항이 변경 되었다. "회원 가입을 시도한 로그를 남기는데 실패하더라도 회원 가입은 유지되게 해주세요." 단순하게 생각해보면 LogRepository에서 예외가 발생하면 그것을 MemberService에서 예외를 잡아서 처리하면 될 것 같다. 이렇게 하면 Me..
REQUIRES_NEW는 외부 트랜잭션과 내부 트랜잭션을 완전히 분리해서 각각 별도의 물리 트랜잭션을 사용하는 방법이다. 그렇기 때문에 커밋과 롤백도 각각 별도로 이루어지게 된다. 이 방법은 각각 독립된 트랜잭션이기 때문에, 내부 트랜잭션에 문제가 발생해서 롤백 되더라도 기본 설정인 REQUIRED처럼 외부 트랜잭션에는 영향을 주지 않는다. 반대로 외부 트랜잭션에 문제가 발생해도 내부 트랜잭션에 영향을 주진 않는다. 아래 예제를 보면서 작동 원리를 이해해보자! Test Code @Test void inner_rollback_required_new() { log.info("외부 트랜잭션 시작"); TransactionStatus outer = txManager.getTransaction(new Defaul..
- Total
- Today
- Yesterday
- 북클럽
- mysql 8.0
- 정렬
- 백준
- 노마드코더
- 스프링
- 리팩토링
- kotlin
- leetcode
- 김영한
- 스프링부트
- 인프런
- 알고리즘
- spring boot
- webflux
- 코틀린
- 노마드
- 릿코드
- 자료구조
- Algorithm
- Real MySQL
- 스프링 부트
- 데이터베이스
- 파이썬
- 그리디
- MySQL
- 구현
- 코테
- Spring
- 문자열
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |