인프런 커뮤니티 질문&답변

rhkdals195님의 프로필 이미지
rhkdals195

작성한 질문수

재고시스템으로 알아보는 동시성이슈 해결방법

Named Lock 활용해보기

트랜잭션 전파속성, 데이터 소스

해결된 질문

작성

·

519

·

수정됨

0

안녕하세요. 강의 잘 보고 있습니다. 의문이 생겨 질문을 남깁니다.

 

  1. 트랜잭션 전파속성을 REQUIRES_NEW로 해서 새로 생성한 이유가 있을까요? 그냥 REQUIRED로 하면 안되나요??

  2. 강의 내에서 데이터소스를 분리하는 것을 추천해주셨는데, 커넥션 풀 사이즈를 늘리면 안되나요??


     

    감사합니다.

     

답변 2

1

안녕하세요 rhkdals195 님, 인프런 AI 인턴이에요.

  1. 트랜잭션 전파속성을 REQUIRES_NEW로 설정한 이유는 독립적인 트랜잭션을 요구하기 때문입니다. REQUIRED는 이미 진행 중인 트랜잭션이 있으면 그 트랜잭션을 사용하고, 없으면 새로운 트랜잭션을 생성합니다. 반면 REQUIRES_NEW는 항상 새로운 트랜잭션을 생성하므로, 호출하는 쪽의 트랜잭션과 독립적으로 실행됩니다. 따라서 특정 로직을 독립적으로 처리하고자 할 때 REQUIRES_NEW를 사용할 수 있습니다.

  2. 데이터소스를 분리하는 이유는 여러 이유로 인해 발생할 수 있는 문제를 완화시키기 위해서입니다. 예를 들어, 특정 데이터 소스의 부하가 높아지면 해당 데이터 소스에 대한 커넥션 풀 사이즈를 늘리는 것은 일시적인 해결책이 될 수 있지만, 전체 시스템에 영향을 줄 수 있습니다. 데이터소스를 분리하면 각각의 데이터 소스에 대해 독립적인 커넥션 풀을 설정할 수 있으므로, 한 데이터 소스의 부하가 다른 데이터 소스로 전파되지 않고, 서로 독립적으로 처리될 수 있습니다.

강의를 잘 이해하고 있어 질문을 주셔서 감사합니다. 더 궁금한 사항이 있으시면 언제든지 질문해주세요!

0

최상용님의 프로필 이미지
최상용
지식공유자

rhkdals195 님 안녕하세요.
1. 부모의 트랜잭션과 동일한 범위로 묶인다면 Synchronized 와 같은 문제가 발생합니다.
Database 에 commit 되기전에 락이 풀리는 현상이 발생합니다.
그렇기때문에 별도의 트랜잭션으로 분리를 해주어 Database 에 정상적으로 commit 이 된 이후에 락을 해제하는것을 의도하였습니다.
핵심은 lock 을 해제하기전에 Database 에 commit 이 되도록 하는것입니다.

  1. 커넥션 풀사이즈를 기존 20에서 40으로 늘렸다고 가정 해보겠습니다.
    이 때 동시에 많은 요청이와서 40개를 모두 락을 잡는데 사용한다면 전혀 상관없는 다른 쿼리들을 실행할 수가 없게됩니다.
    그렇기 때문에 락을 위해 사용할 데이터소스를 분리하는 것을 추천 드렸습니다.

감사합니다.

rhkdals195님의 프로필 이미지
rhkdals195

작성한 질문수

질문하기