• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

안녕하세요 강사님! 강의 너무너무 도움 되고 잘 들었습니다!! 질문이 있습니다! JDBCTemplate로 batchUpdate시에 동시성문제가 생기나요?

22.10.21 14:18 작성 조회수 148

0

JPA에선 아이디 체번방식에따라서 bulkInsert/update를 지원하지않다보니 JDBCTemplate에 batchUpdate를 통해 로직을 작성하게됐습니다. 이때 동시성 문제를 고민하지않을수가 없어서 찾아보니 JDBCTemplate도 내부적으로 ThreadLocal을 사용하고 있었습니다. 그렇다면 JDBCTemplate도 동시성문제를 고민하지 않아도 되는 부분일까요?

궁금해서 JDBCTemplate의 코드를 뒤져보다가 DataSourceUtils.getConnection(ds) 내부에서

TransactionSynchronizationManager.getResource(ds)를 통해 ConnectionHolder를 가져오는데

TransactionSynchronizationManager.getResource(ds)를 더 들어가 보면

ThreadLocal <Map <Object, Object>>로 되어있는 resources를 가져와 ds를 키로 ConnectionHolder를 가져오는 것을 볼 수 있었습니다. 그래서 운영단계로 넘어가도 동시성문제가 없을것 같은데 강사님 생각은 어떠신지 궁금합니다!

스크린샷 2022-10-21 오후 2.04.23.png

답변 1

답변을 작성해보세요.

1

안녕하세요. 이호겸님

어떤 동시성 문제가 걱정되시는지요? 이 부분을 자세히 알려주셔야 답변을 드릴 수 있을 것 같습니다.

감사합니다.

이호겸님의 프로필

이호겸

질문자

2022.10.24

답글 감사합니다!

제가 궁금했던점은 애플리케이션서버를 클러스터로 여러개 띄워서 운영할때 bulk insert가 비교적 오래걸리는 작업이다 보니 해당 작업이 커밋되기전에 트래픽이 몰리면 클러스터간에 데이터동기화 문제가 있지 않을까 하는 것이였습니다!(트래픽을 처리해본 경험이 없다보니 이러한 궁금증이 생겼습니다 ㅎㅎ..)...

제가 그 이후로 좀 더 찾아봤는데 이 문제는 애플리케이션단에서 해결하기 보단 mysql 분산락 기능을 사용하거나 redis를 활용하는 사례를 봤었습니다!

네 호견님 잘 찾아보았습니다. 애플리케이션에서 해결하기는 어렵고, 생각하신 것 처럼 해당 방법들을 사용해야 합니다.

감사합니다.