데이터베이스는 ACID 같이 트랜잭션이 원자적이면서도 독립적인 수행을 하도록 한다.
그래서 Locking 개념이 등장
📍
Locking
이란,
트랜잭션이 DB를 다루는 동안 다른 트랜잭션이 관려하지 못하게 막는 것
하지만 무조건적인 Locking은 옳지 않음 -> 동시에 수행되는 많은 트랜잭션들을 순서대로 처리하면 DB성능이 떨어지게 됨
반대로 Locking 비율을 너무 줄인다면 -> 응답성은 높겠지만, 잘못된 값이 처리될 여지가 높음
Shared Lock
이 걸리지 않는 계층Shared Lock
이 걸리는 계층Shared Lock
이 걸리는 계층Shared Lock
이 걸리는 계층 (Repeatable Read와 동일)✔ 참고
- 레벨을 높게 조정할 수록 비용이 높아진다!
동시성
,데이터무결성
이 연관되어 있으므로 잘 고려해야 한다.
가능하다면 트랜잭션 각각의 범위는 최소화하자
: 모든 작어벵 트랜잭션이 필요하다고 해서 한 단위로 묶어버리는 것은 좋지 않다. 여러 개의 트랜잭션으로 쪼개서 각 범위를 최소화해야 한다.
트랜잭션이 필요한 기능 범위는 최소화하자
: 일반적인 데이터베이스 Connection은 개수가 제한적이므로, 각 Connection이 프로그램에 오래 머물 수록 병목현상이 일어날 확률이 높아진다.
외부 자원과의 연결 작업은 제거하자
: 메일 전송, FTP 파일 전송, 네트워크 통신 등, 해당 작업이 실패하거나 시간이 오래 걸리는 경우 프로그램 전체가 위험할 수 있다.
저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!