일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- mock
- 서블릿
- Level2
- Spring Batch
- 자바
- REDIS
- Docker
- AOP
- 백준
- HTTP
- CircuitBreaker
- Paging
- MSA
- AWS
- 우테코
- 레벨2
- yml
- 프리코스
- 스프링부트
- 프로그래머스
- 스프링 부트
- JUnit5
- 우아한세미나
- 코드리뷰
- 트랜잭션
- JPA
- 미션
- 세션
- 우아한테크코스
- 의존성
- Today
- Total
목록전파 (2)
늘
스프링의 application context는 Application Event를 제공해준다. 해당 이벤트를 사용할 때 기존 트랜잭션에서 커밋이 된 후에 이벤트를 처리할 때, Transaction의 Propagation을 Requires_new 나 @Asnyc로 주지 않으면 같은 트랜잭션으로 묶여서 정상적으로 이벤트가 발급되지 않는다. 따라서 이벤트에 Propagation.REQUIRES_NEW 옵션을 주어서 사용했는데 이때 Requires_new를 사용한다고 해도 상위 트랜잭션에서 예외를 잡아주지 않으면 예외가 전파되어서 상위 트랜잭션도 롤백이 된다. 따라서 try-catch로 잡아줘야 한다. 그런데.. 실제 event에 대해서 예외 테스트를 진행해줬는데 try-catch로 잡지 않아도 예외가 전파되지 ..
제목에 대한 질문에 답을 하지 못했다.이 질문에 대해서 정리를 해보고자 한다. 그전에 트랜잭션이 무엇인지 정리하고 시작하려고 한다. 트랜잭션이란? 데이터베이스에 작용하는 여러 읽기와 쓰기를 수행하는 하나의 작업 단위 트랜잭션 범위 트랜잭션의 범위는 커넥션을 기준으로 한다. 커넥션이 다르다면 6에서 롤백이 일어나면, 3번과 5번에 해당한 쿼리만 롤백이 된다. 즉, 4번에서 쿼리들은 롤백되지 않고 반영이 된다. 다른 말로, 여러 메서드에서 하나의 트랜잭션을 갖고 싶다면 이 여러 메서드들을 하나의 커넥션을 사용하도록 하는 방법이 필요하다. -> 이러한 방법이 트랜잭션 전파를 사용한다. 트랜잭션 전파 보통 스프링에선 @Transactional을 통해 해당 어노테이션이 선언된 내부 메서드들도 한 커넥션에 묶인다...