데이터베이스/Transaction

데이터베이스 충돌 제로! 트랜잭션과 Lock 마스터하기 - 코드카인 티스토리

CodeCaine Explorer 2024. 12. 23. 13:45
728x90
반응형
SMALL

트랜잭션과 Lock: 데이터베이스의 교통 신호등 완벽 가이드

은행 ATM에서 두 사람이 동시에 같은 계좌의 돈을 인출하려 할 때 발생할 수 있는 혼란을 막는 방법! 데이터베이스의 트랜잭션과 Lock으로 데이터 충돌을 예방하는 핵심 원리를 쉽게 설명합니다.

안녕하세요😊 코드카인 여러분!

여러분, 마트에서 장보실 때 카트 충돌 나신 적 있으시죠? 🛒 오늘은 데이터베이스에서도 이런 '충돌'을 어떻게 막는지, 트랜잭션과 Lock에 대해 알아볼게요!

트랜잭션과 Lock이란? 🤔

식당의 화장실을 생각해보세요! 사용 중일 때는 문을 잠그고(Lock), 용무가 끝날 때까지(트랜잭션) 아무도 들어올 수 없죠. 데이터베이스도 마찬가지예요!

Lock의 종류 - 문의 잠금장치처럼! 🔐

공유 Lock(Shared Lock, S-Lock) 👥

  • 도서관에서 책을 읽을 때처럼, 여러 사람이 동시에 데이터를 읽을 수 있어요
  • SELECT 문에서 주로 사용됩니다

배타적 Lock(Exclusive Lock, X-Lock) 🚫

  • 화장실처럼 한 번에 한 사람만 사용 가능!
  • INSERT, UPDATE, DELETE 문에서 사용됩니다

Lock의 범위 📏

행 수준 Lock(Row-Level Lock) 🔍

행 수준 Lock SQL 예제 - SELECT FOR UPDATE 구문을 사용하여 특정 account_id의 행에 대한 배타적 잠금을 획득하는 쿼리문 코드

 

테이블 수준 Lock(Table-Level Lock) 📊

테이블 수준 Lock SQL 예제 - LOCK TABLES 구문을 사용하여 accounts 테이블 전체에 대한 쓰기 잠금을 설정하는 쿼리문 코드

데드락(Deadlock) - 꼬여버린 상황! 🔄

데드락이란?

두 사람이 서로의 자리를 양보하지 않는 상황처럼, 두 트랜잭션이 서로가 가진 리소스를 기다리며 무한 대기하는 상태를 말해요.

데드락 예방법 🛡️

  1. 트랜잭션은 짧게 유지하기
  2. 일관된 순서로 Lock 획득하기
  3. 타임아웃 설정하기

락 에스컬레이션(Lock Escalation) 📈

많은 행 단위 Lock이 테이블 Lock으로 확장되는 현상이에요. 마치 편의점에서 너무 많은 물건을 들고 있다가 결국 카트를 가져오는 것처럼요!

실전 예제: 은행 계좌 관리 시스템 🏦

은행 계좌 트랜잭션 Lock 구현 예제 - BEGIN TRANSACTION부터 COMMIT까지의 전체 프로세스를 보여주는 SQL 코드, 계좌 잔액 조회 및 업데이트 시 Lock 사용 방법 설명

Lock 모니터링 및 관리 👀

  1. Lock 대기 시간 모니터링
  2. 데드락 감지 및 해결
  3. Lock 타임아웃 설정

😊 마무리하며..

여러분! 오늘 배운 Lock은 마치 교통신호등 같아요. 복잡한 데이터 흐름 속에서 질서를 만들어주죠. 처음에는 어려워 보여도, 차근차근 이해하다 보면 자연스럽게 익숙해질 거예요. 여러분의 데이터베이스 여정을 응원합니다! 💪

728x90
반응형
SMALL