트랜잭션 전파속성, 데이터 소스
안녕하세요. 강의 잘 보고 있습니다. 의문이 생겨 질문을 남깁니다.
트랜잭션 전파속성을 REQUIRES_NEW로 해서 새로 생성한 이유가 있을까요? 그냥 REQUIRED로 하면 안되나요??
강의 내에서 데이터소스를 분리하는 것을 추천해주셨는데, 커넥션 풀 사이즈를 늘리면 안되나요??
감사합니다.
답변 2
1
rhkdals195 님 안녕하세요.
1. 부모의 트랜잭션과 동일한 범위로 묶인다면 Synchronized 와 같은 문제가 발생합니다.
Database 에 commit 되기전에 락이 풀리는 현상이 발생합니다.
그렇기때문에 별도의 트랜잭션으로 분리를 해주어 Database 에 정상적으로 commit 이 된 이후에 락을 해제하는것을 의도하였습니다.
핵심은 lock 을 해제하기전에 Database 에 commit 이 되도록 하는것입니다.
커넥션 풀사이즈를 기존 20에서 40으로 늘렸다고 가정 해보겠습니다.
이 때 동시에 많은 요청이와서 40개를 모두 락을 잡는데 사용한다면 전혀 상관없는 다른 쿼리들을 실행할 수가 없게됩니다.
그렇기 때문에 락을 위해 사용할 데이터소스를 분리하는 것을 추천 드렸습니다.
감사합니다.
1
안녕하세요 rhkdals195 님, 인프런 AI 인턴이에요.
트랜잭션 전파속성을 REQUIRES_NEW로 설정한 이유는 독립적인 트랜잭션을 요구하기 때문입니다. REQUIRED는 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션을 사용하고, 없으면 새로운 트랜잭션을 생성합니다. 반면 REQUIRES_NEW는 항상 새로운 트랜잭션을 생성하므로, 호출하는 쪽의 트랜잭션과 독립적으로 실행됩니다. 따라서 특정 로직을 독립적으로 처리하고자 할 때 REQUIRES_NEW를 사용할 수 있습니다.
데이터소스를 분리하는 이유는 여러 이유로 인해 발생할 수 있는 문제를 완화시키기 위해서입니다. 예를 들어, 특정 데이터 소스의 부하가 높아지면 해당 데이터 소스에 대한 커넥션 풀 사이즈를 늘리는 것은 일시적인 해결책이 될 수 있지만, 전체 시스템에 영향을 줄 수 있습니다. 데이터소스를 분리하면 각각의 데이터 소스에 대해 독립적인 커넥션 풀을 설정할 수 있으므로, 한 데이터 소스의 부하가 다른 데이터 소스로 전파되지 않고, 서로 독립적으로 처리될 수 있습니다.
강의를 잘 이해하고 있어 질문을 주셔서 감사합니다. 더 궁금한 사항이 있으시면 언제든지 질문해주세요!
레디선 테스트코드에서 채널이름은 없어도 되는건가요?
0
43
2
낙관적 락을 사용할 떄 차이점
0
120
2
동시성 검증 코드에 관한 문의
0
94
2
단일연산
0
70
2
낙관적락vs. 레디스락
0
108
2
안녕하세요. 레디슨 질문있습니다..!!
0
67
2
@Lock(OPTIMISTIC)이 필요한 이유
0
90
2
get_lock 의 timeout이 3000초 이던데 너무 긴거 아닌가요?
0
132
2
DataSource Hikari 사용 이유
0
147
2
saveAndFlush 사용 이유 문의
0
113
3
비관적 락 VS 네임드 락
0
160
3
application.yaml 에 redis 정보
0
100
2
왜 클래스 이름에 Facade 가 붙나요?
0
185
2
@Transactional 으로 인한 동시성 문제 발생 원인이 궁금합니다.
0
219
2
@modifying 이용한 동시성 제어
0
168
2
DB락과 분산락
0
260
2
NamedLock 테스트 실패
0
186
2
테스트에서 트랜잭션 어노테이션 질문 있습니다.
0
172
2
optimistic Lock 재시도 질문입니다.
0
230
2
낙관적 락 테스트 실패
0
239
2
오류?
0
1627
4
LettureLockStockFacadeTest에서 오류가 발생합니다.
1
268
2
Pessimistic Lock 전체 테스트 오류 문의
0
360
3
비관적 락 vs 레디스(Lettuce)락 비교 관련 질문
0
460
2





