공유 락과 배타 락에 대해서 설명해 주세요.

2024. 12. 11. 18:03·백엔드 면접

공유 락과 배타 락은 비관적 락(Pessimistic Lock)의 데이터 일관성과 무결성을 위해 사용하는 락 유형입니다.

 

공유 락(Shared Lock)은 읽기 락(Read Lock)이라고도 하며, 공유 락이 걸린 데이터는 읽기(SELECT) 연산만 가능하고, 쓰기(UPDATE, DELETE)는 불가능합니다. 공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 공유 락을 획득할 수 있지만, 배타 락은 획득할 수 없습니다. 즉, 공유 락을 사용하면 트랜잭션 내에서 조회한 데이터가 변경되지 않는다는 것을 보장합니다. FOR SHARE를 사용하여 공유 락을 설정할 수 있습니다.

SELECT * FROM table_name WHERE id = 1 FOR SHARE;

 

 

배타 락(Exclusive Lock)은 쓰기 락(Write Lock)이라고도 하며, 배타 락을 획득한 트랜잭션은 읽기, 쓰기 연산 모두 가능합니다. 하지만 다른 트랜잭션에서는 읽기, 쓰기 모두 불가능합니다. 즉, 배타 락을 획득한 트랜잭션은 데이터에 대한 독점권을 가집니다. FOR UPDATE를 사용하여 배타 락을 설정할 수 있습니다.

SELECT * FROM table_name WHERE id = 1 FOR UPDATE;

 


 

배타 락 사용 시 어떤 상황에 데드락이 발생하나요?

 

데드락(Dead Lock)이란 교착 상태로, 두 개 이상의 트랜잭션이 서로 필요로 하는 데이터의 락을 점유하고 있어서 무한히 대기하는 상황을 말합니다. 트랜잭션은 락을 획득하지 못하는 경우, 다른 트랜잭션이 점유하고 있는 락이 해제될 때까지 대기합니다.

예를 들어 트랜잭션 A, B가 있고 id가 1, 2인 데이터가 있는 상황에서 두 트랜잭션이 시작합니다. 트랜잭션 A는 id 1번을 읽고, 2번 데이터를 변경하는 트랜잭션입니다. 트랜잭션 B는 반대로 id 2번을 읽고, 1번을 변경하는 트랜잭션입니다. 다음과 같은 상황에서 데드락이 발생합니다.

 

  1. 트랜잭션 A는 1번, 트랜잭션 B는 2번 데이터에 대해 공유 락을 획득합니다.
  2. 트랜잭션 A는 2번 데이터의 공유 락을 가지고 있는 트랜잭션 B가 락을 해제할 때까지 기다립니다.
  3. 트랜잭션 B는 1번 데이터의 공유 락을 가지고 있는 트랜잭션 A가 락을 해제할 때까지 기다립니다.

 


 

데드락을 해결할 수 있는 방법은 무엇인가요?

 

트랜잭션에서 락 획득 순서를 일관되게 합니다. 모든 트랜잭션에서 1번 데이터, 2번 데이터 순으로 락을 획득할 시 데드락이 발생하지 않습니다.

또는 락 타임 아웃을 설정할 수 있습니다.

'백엔드 면접' 카테고리의 다른 글

스레드, 프로세스, 코어는 많을수록 좋을까요?  (0) 2024.12.14
단위 테스트와 통합 테스트의 차이점은 무엇인가요?  (0) 2024.12.12
동기와 비동기의 차이점은 무엇인가요?  (0) 2024.12.11
TCP 3-way handshake에 대해서 설명해 주세요.  (0) 2024.12.10
동기 방식으로 외부 서비스(API)를 호출할 때 외부 서비스 장애가 나면 어떻게 조치할 수 있나요?  (0) 2024.12.09
'백엔드 면접' 카테고리의 다른 글
  • 스레드, 프로세스, 코어는 많을수록 좋을까요?
  • 단위 테스트와 통합 테스트의 차이점은 무엇인가요?
  • 동기와 비동기의 차이점은 무엇인가요?
  • TCP 3-way handshake에 대해서 설명해 주세요.
이런개발
이런개발
geun-00의 흔적 보관소
  • 이런개발
    내일이 기대되는 오늘
    이런개발
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 백엔드 면접
      • SQL N
        • SUM, MAX, MIN
        • SELECT
        • GROUP BY
        • JOIN
      • Spring
      • JPA
      • 트러블슈팅
      • Infra
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데브코스
    백엔드 면접
    JPA
    스프링
    토스 페이먼츠
    raid
    자바
    오블완
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
이런개발
공유 락과 배타 락에 대해서 설명해 주세요.
상단으로

티스토리툴바