Explicit vs Implicit

트랜잭션 경계는 코드에서 반드시 눈에 보여야 한다

BEGIN을 직접 쓰든 프레임워크가 관리하든, 어디서 시작하고 끝나는지 모르면 장애 대응이 어렵다.

명시
프레임워크
주의
Explicit직접 제어

START TRANSACTION, COMMIT, ROLLBACK을 코드에 드러낸다.

START TRANSACTION;
UPDATE ...;
COMMIT;
Implicit프레임워크 관리

@Transactional 같은 선언으로 경계를 만들고 전파 정책을 설정한다.

service.checkout()
  -> tx begin
  -> tx commit
MySQL 전용 함수, 재고 차감 조건, 영향 행 수 확인처럼 DBMS와 업무 규칙을 함께 표시해야 한다.