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

Gyeongsu. Seo님의 프로필 이미지

작성한 질문수

Real MySQL 시즌 1 - Part 1

Ep.07 SELECT ... FOR UPDATE

Select for update locking

해결된 질문

24.07.12 07:04 작성

·

123

0

Select for update 시 lock 을 걸어 원 데이터를 버장힌다는 것은 이해 하였습니다그렇다면 a|b 가 동시 접근 하여 서로 다른 값으로 변경하려는 부분은 없고 동일 프로세스가 두번 진입 할 수 있다고 가정한다면어차피 update 시 xlock이 row에 대하여 획득하니select for update 는 필요없는게 맞다라고 이해를 했습니다이 부분이 맞을까요?

답변 2

0

이성욱님의 프로필 이미지
이성욱
지식공유자

2024. 08. 21. 14:11

경수님, 안녕하세요.

요거 질문을 제가 놓치고 있었네요.

 

말씀주신 것처럼, 동시에 여러 세션이 특정 레코드에 접근하는 것이 아니고,

한 시점에 반드시 하나의 세션에서만 특정 레코드를 변경한다면, 말씀하신 것처럼 SELECT FOR UPDATE는 필요치 않을 듯 합니다. (그런데 이런 보장이 쉽지 않아 보이긴 합니다만...)

 

다시 한번 늦어진 답변 죄송합니다.

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 14. 07:06

안녕하세요, 인프런 AI 인턴입니다.
제공된 정보와 질문의 내용이 일치하는 부분이 없어, 직접적인 해답을 제공하기 어렵습니다. 하지만 일반적으로 SELECT FOR UPDATE 구문에 대해 설명드릴 수 있습니다.

SELECT FOR UPDATE 구문은 트랜잭션이 해당 레코드를 읽고 업데이트하기 전까지 다른 트랜잭션에서 해당 레코드를 변경하지 못하게 락을 거는 것을 목적으로 합니다. 이는 데이터의 일관성을 유지하기 위해 사용됩니다. 만약 동일 프로세스가 두 번 진입할 수 있다는 가정 하에, 첫 번째 SELECT FOR UPDATE 실행 시 해당 row에 대한 읽기 락(잠금)이 걸립니다. 그리고 업데이트 시 해당 락이 업그레이드되어 쓰기 락(XLock)으로 전환됩니다. 이로써 다른 트랜잭션이나 프로세스가 해당 데이터에 접근하여 변경하는 것을 방지하게 됩니다.

따라서, 동일 프로세스 내에서 SELECT FOR UPDATE를 사용하는 것이 불필요하다고 이해할 수 있는 부분은, 이미 업데이트 과정에서 데이터에 락이 걸리기 때문에 추가적인 SELECT FOR UPDATE로 인한 락이 필요 없다고 판단될 수 있습니다. 그러나 실제 상황에서는 동시성을 관리하고 데이터의 일관성을 보장하기 위해 SELECT FOR UPDATE 사용이 필요한 경우가 많습니다.

더 자세한 상황이나 예시에 대해서 궁금하시면 관련 전문 문서를 참고하시거나, 데이터베이스 관리에 관한 전문 강의를 수강하는 것도 좋은 학습 방법일 것입니다.