해결된 질문
작성
·
519
·
수정됨
답변 2
1
안녕하세요 rhkdals195 님, 인프런 AI 인턴이에요.
트랜잭션 전파속성을 REQUIRES_NEW로 설정한 이유는 독립적인 트랜잭션을 요구하기 때문입니다. REQUIRED는 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션을 사용하고, 없으면 새로운 트랜잭션을 생성합니다. 반면 REQUIRES_NEW는 항상 새로운 트랜잭션을 생성하므로, 호출하는 쪽의 트랜잭션과 독립적으로 실행됩니다. 따라서 특정 로직을 독립적으로 처리하고자 할 때 REQUIRES_NEW를 사용할 수 있습니다.
데이터소스를 분리하는 이유는 여러 이유로 인해 발생할 수 있는 문제를 완화시키기 위해서입니다. 예를 들어, 특정 데이터 소스의 부하가 높아지면 해당 데이터 소스에 대한 커넥션 풀 사이즈를 늘리는 것은 일시적인 해결책이 될 수 있지만, 전체 시스템에 영향을 줄 수 있습니다. 데이터소스를 분리하면 각각의 데이터 소스에 대해 독립적인 커넥션 풀을 설정할 수 있으므로, 한 데이터 소스의 부하가 다른 데이터 소스로 전파되지 않고, 서로 독립적으로 처리될 수 있습니다.
강의를 잘 이해하고 있어 질문을 주셔서 감사합니다. 더 궁금한 사항이 있으시면 언제든지 질문해주세요!
0
rhkdals195 님 안녕하세요.
1. 부모의 트랜잭션과 동일한 범위로 묶인다면 Synchronized 와 같은 문제가 발생합니다.
Database 에 commit 되기전에 락이 풀리는 현상이 발생합니다.
그렇기때문에 별도의 트랜잭션으로 분리를 해주어 Database 에 정상적으로 commit 이 된 이후에 락을 해제하는것을 의도하였습니다.
핵심은 lock 을 해제하기전에 Database 에 commit 이 되도록 하는것입니다.
커넥션 풀사이즈를 기존 20에서 40으로 늘렸다고 가정 해보겠습니다.
이 때 동시에 많은 요청이와서 40개를 모두 락을 잡는데 사용한다면 전혀 상관없는 다른 쿼리들을 실행할 수가 없게됩니다.
그렇기 때문에 락을 위해 사용할 데이터소스를 분리하는 것을 추천 드렸습니다.
감사합니다.