5.1 트랜잭션
- 트랜잭션은 작업의 완전성을 보장해 주는 것이다.
- 논리적인 작업 셋을 완벽한 처리
- 또는 원 상태로 복구
- 데이터의 정합성을 보장하기 위한 기능
- 잠금은 동시성을 제어하기 위한 기능
- 격리 수준이란 하나의 트랜잭션 내에서나 여러 트랜잭션 간 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 의미
5.1.1 MySQL에서의 트랜잭션
- 트랜잭션은 하나의 논리적인 작업 셋 자체가 100% 적용되거나 (commit) 아무것도 적용되지 않아야 (rollback 또는 오류) 함을 보장해 주는 것
- InnoDB와 다르게 MyISAM에서는 트랜잭션을 보장하지 않는다.
- MEMORY 스토리지 엔진도 트랜잭션이 적영되지 않는다.
- 부분 업데이트가 발생하여 데이터 정합성을 맞추기 어려워 진다.
5.1.2 주의사항
- 트랜잭션은 꼭 필요한 최소의 코드에만 적용하는 것이 좋다.
- 필요 없는 부분까지 트랜잭션으로 묶어 DB 커넥션을 가지고 있게 되면 커넥션 소유 시간이 길어지게 되고 사용 가능한 커넥션 개수는 줄어들게 된다.
- 특히 외부 api를 사용하는 등의 네트워크를 통하는 로직을 트랜잭션 내부로 넣게 되면 절대 안 된다.
- 네트워크 통신 오류가 발생하면 DBMS 서버까지 위험해질 수도 있다.
- 커넥션을 놓지 않게 될 수도 있다.