본문 바로가기
Develop/DB

@Transaction,DB락

by dev_m.w 2025. 5. 27.

트랜잭션이란? 

우리가 DB를 사용하는 이유중 가장 대표적인 에는 이러한 트랜잭션 기능을 사용할수 있기떄문이다. 즉, 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻함.

 

DB 락?

여러 사용자가 동시에 같은 데이터를 조회하거나 수정하려 하면 데이터 충돌이 발생할 수 있다, 그래서 이러한 사태를 막기위해

해당 세션이 트랜잭션을 시작하면 데이터를 수정하는 동안에나 커밋이나 롤백 전까지는 다른 세션에서 해당 데이터를 수정할수 없게 막는것이 DB 락이다.

 

 

기본적인 DB 락 실행

 

 

 

1. 세션1은 트랜잭션을 시작한다.

2. 세션1은 memberA의 money를 5000으로 변경을 시도할떄 해당 로우의 락을 획득한다.

3. 세션1은 락을 획득하고 해당 로우의 update sql을 실행하고 락을반납.

 

 

 

 

세션1이 락을 갖고, 다른세션이 해당 로우를 수정할 경우.

 

1. 세션2는 트랜젹선을 시작한다.

2. 세션2도 해당 로우의 데이터 변경을 시도하려 하지만, 해당 로우는 이미 세션1이 갖고있기떄문에 락이 돌아올떄까지 대기해야한다. (락은 무한정 대기하는것이 아닌 락 대기 시간을 넘으면 락 타임아웃 오류가 발생)

3.세션1이 커밋을 수행하고. 트랜잭션이 종료되었으므로 락도 반납

4. 이제 세션2가 락을 획득하고 데이터를 수정하고 다시 반납한다.

 

 

 

 

계좌이체 트랜잭션 적용

 

 

 

트랜잭션은 비지니스 로직이 잘못되면 함께 롤백해야 하기떄문에  비지니스 로직이 있는 서비스 계층에서 시작해한다. 그런데 트랜잭션을 시작하려면 커넥션이 필요하기떄문에 서비스 계층에서 커넥션을 만들고, 트랜잭션 커밋이후 커넥션을 종료해야한다. 즉,

트랜잭션을 사용하려면  트랜잭션을 사용하는 동안 같은 커넥션을 유지 해야함 그래야 같은 세션을 사용한다.

'Develop > DB' 카테고리의 다른 글

[DB] db 모델링 정규화 관계 맺는법  (0) 2025.07.22
JDBC ,커넥션풀 이해  (0) 2025.05.25