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

jinkoo906님의 프로필 이미지
jinkoo906

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

트랜잭션 - 적용2

findById에서 select 할때 for update해야 하는건 아닌지 궁금합니다

작성

·

523

6

안녕하세요 ! 너무나 바쁘신줄 알지만 제가 틀리게 이해하고 있는지도 모르겠는데 너무 궁금해서 질문남깁니다.

MemberServiceV2의 bizLogic에서 findById를 호출할때 그냥 select하게 되어있는거 같은데 이렇게 되면 락을 획득하는게 아니라서 update를 호출 하기 전에 다른 커넥션? 에서 수정을 위해 select 또는 그사이에 update를 해버리면 현재의 커넥션?(쓰레드?)엉뚱한 값을 update 하게 될 수 있지 않을까요 ? 예를 들어 두개의 커넥션에서 동시에 findById를 호출하고 bizLogic을 수행한다면 하나의 row 에 대해 한쪽에서는 더하기를 다른쪽에서는빼기를 실행해도 최초의 값에서 더하기 혹은 빼기 둘중 하나만을 실행한 결과가 update되지 않을까 하는 생각입니다.

제가 글로 설명을 잘 못하겠는데... 멀티쓰레드에서 동기화 문제와 비슷한 문제가 발생하는건 아닐지 생각이 듭니다.

혹시 제가 제대로 이해못하고 멍청한 질문을 하는거라면 정말 죄송합니다 ㅠㅠ 바쁘신 와중에 긴글 읽어주셔서 감사합니다

그리고 강의 정말 잘보고있습니다 !!!

답변 1

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. jinkoo906님 좋은 질문입니다.

다음을 참고해주세요^^

https://www.inflearn.com/questions/17498

감사합니다.

jinkoo906님의 프로필 이미지
jinkoo906
질문자

빠른답변감사합니다!! 더 열심히 공부하겠습니다 !!

위 질문을 보고 저도 궁금해져서 구현 코드를 다시 살펴봤는데, 하나의 트랜잭션 안에서 커넥션을 유지하는 것과 트랜잭션 도중 오류 발생시 롤백하는 것만 코드로 구현되어있고 동시성 문제를 해결하는 select ~ for update 부분은 코드로 구현이 안된 것으로 보입니다.

jinkoo906님의 프로필 이미지
jinkoo906

작성한 질문수

질문하기