inblog logo
|
Gyeongwon's blog
    Springboot

    [스프링부트 #9] 쿼리에서 중요한 트랜잭션 고립성(Isolation) 이해하기

    트랜잭션에서 고립성에 대해서 정리하였습니다.
    도경원's avatar
    도경원
    Aug 14, 2025
    [스프링부트 #9] 쿼리에서 중요한 트랜잭션 고립성(Isolation) 이해하기
    Contents
    1. 고립성 이란 ?2. 실전 사례: 삭제(DELETE)에서의 고립3. 고립의 범위 : Row vs Table

    1. 고립성 이란 ?

    “동시성 환경에서 트랜잭션끼리 서로 간섭하지 않도록 격리하는 성질”을 말한다.
    이 고립성이 중요한 이유는 다른 트랜잭션에서 보고 있는 데이터를, 내가 동시에 삭제하거나 변경하면 데이터 일관성이 깨질 수 있기 떄문이다.

    2. 실전 사례: 삭제(DELETE)에서의 고립

    시나리오 예시:

    어떤 사용자가 게시글을 읽고 있는 중에,
    다른 사용자가 해당 게시글을 삭제하려 한다.
    이럴 때 "고립을 언제 시킬지" 가 중요한 비즈니스 결정 포인트가 된다.

    조회 후 고립 → 삭제 (보수적 전략)

    select 후 데이터가 존재하고 아직 아무도 해당 데이터를 수정/삭제 중이 아닐 때만 삭제 수행

    바로 고립 후 삭제 (공격적 전략)

    조회 없이 바로 DELETE에 고립을 걸고 삭제
    핵심은 비즈니스 규칙에 따른 판단
    ❗
    핵심은 비즈니스 규칙에 따른 판단한다.
    • 고립을 걸지 않으면 빠르지만 데이터 충돌 위험
    • 고립을 너무 많이 걸면 성능 저하 및 병목 발생
    • 따라서 개발자가 비즈니스의 중요도, 충돌 가능성, 실시간성 등을 고려해 전략을 선택해야 함

    3. 고립의 범위 : Row vs Table

    고립 범위
    설명
    예시
    Row-level
    특정 행만 고립시킴
    SELECT ... FOR UPDATE
    Table-level
    전체 테이블을 잠금
    LOCK TABLE board WRITE
    일반적으로는 Row-level 고립을 선호하지만, 대규모 수정이나 삭제에서는 Table-level이 필요할 수도 있다.
     
    이 모든 결정은 결국, “우리 서비스에서 이 데이터가 얼마나 민감한가?”, “동시 작업 충돌이 얼마나 발생할 수 있는가?” 에 따라 달라진다.
    Share article
    Contents
    1. 고립성 이란 ?2. 실전 사례: 삭제(DELETE)에서의 고립3. 고립의 범위 : Row vs Table

    Gyeongwon's blog

    RSS·Powered by Inblog