RealMySQL 5.1 - 트랜잭션
책/RealMySQL

RealMySQL 5.1 - 트랜잭션

728x90
반응형

 

트랜잭션 in MySQL

 

Transaction: 논리적인 작업 set 자체가 100% 적용되거나 (Commit) 아무것도 적용되지 않아야 (Rollback) 함을 보장해주는것

  • 꼭 여러개의 변경작업을 수행할때만 의미있는 개념이 아님

 

MyISAM vs. InnoDB의 Transaction 차이

  • Insert 과정에서 모두 PK 중복으로 에러가 발생됌
  • 하지만, MyISAM 테이블에서는 1,2는 INSERT 된 상태 (Partial Update) -> 정합성 맞추는데 많은 어려움 발생
    • 그래서 애플리케이션 단에서 IF/ELSE, 데이터 확인 등으로 직접 Rollback까지 준비해야함
  • InnoDB에서는 되게 간단하게 구현 가능

 

 

트랜잭션 실행시 주의사항

프로그램 코드에서 트랙잭션의 범위를 최소화하는 것이 중요

 

책에 나오는 잘못된 예시 :

1) --- DB 커넥션 생성 / 트랜잭션 시작 ---
2) 사용자 로그인 여부 확인
3) 사용자 글쓰기 내용 오류 여부 확인
4) 업로드된 파일 확인 및 저장
5) 사용자 입력 내용 DB 저장
6) 파일 정보 DB 저장
7) 저장된 내용 또는 기타 정보를 DB에서 조회
8) 게시물 등록에 대한 알림 메일 발송
9) 메일 발송 이력 DB 저장
10) --- 트랜잭션 종료(Commit) / DB 커넥션 반납 ---

 

 

잘못된 점:

  • 5번부터 실제로 DB에 저장
    • 2,3,4번을 DB 트랜잭션에 포함시킬 필요 없음
    • DB 커넥션을 소요하는 시간이 길어질수록 사용 가능한 여유 커넥션이 줄어듬
  • 8번 같은 네트워크 작업을 DB 트랜잭션 내에서 제거하는것이 중요
    • 네트워크에 문제 생기면 고스란히 DB에 영향
  • 연관 없는 작업을 하나의 트랜잭션로 묶지 말고 나눌수 있으면 나누기

 

 

수정 :

1) 사용자 로그인 여부 확인
2) 사용자 글쓰기 내용 오류 여부 확인
3) 업로드된 파일 확인 및 저장
4) --- DB 커넥션 생성 / 트랜잭션 시작 ---
5) 사용자 입력 내용 DB 저장
6) 파일 정보 DB 저장
7) --- 트랜잭션 종료 ---
8) 저장된 내용 또는 기타 정보를 DB에서 조회
9) 게시물 등록에 대한 알림 메일 발송
10) --- 트랜잭션 시작 ---
11) 메일 발송 이력 DB 저장
12) --- 트랜잭션 종료(Commit) / DB 커넥션 반납 ---
728x90
반응형