• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

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

23.10.27 16:13 작성 23.10.27 16:15 수정 조회수 422

0

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

 

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

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


     

    감사합니다.

     

답변 2

·

답변을 작성해보세요.

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.10.29

안녕하세요 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개를 모두 락을 잡는데 사용한다면 전혀 상관없는 다른 쿼리들을 실행할 수가 없게됩니다.
    그렇기 때문에 락을 위해 사용할 데이터소스를 분리하는 것을 추천 드렸습니다.

감사합니다.