밍쎄의 코딩공간

스크랩 16. Spring Transaction 관리 본문

스크랩

스크랩 16. Spring Transaction 관리

밍쎄 2023. 8. 24. 00:33
Transaction의 사용

JDBC 라이브러리에서 트랜잭션을 시작하고, try 코드 구문에서 결제 관련 비즈니스 로직을 수행하고, 해당 변경을 커밋하거나 롤백하고, 최종적으로 DB 커넥션을 종료하는 트랜잭션 코드를 살펴보자.

아래 코드에서는 결제금액의 저장과 결제 정보의 저장을 하나의 단위로 바라보았다. 그리고, 이를 하나의 트랜잭션으로 묶어주었다. 어느 하나의 부분에라도 에러가 발생한다면, 롤백하도록 설정되었다.

구체적으로, 결제 기능 안에서 ‘결제금액 저장’과 ‘결제정보 저장’을 하나의 단위로 보고 트랜잭션으로 묶어줌으로써 어느 한 부분에서라도 에러가 발생한다면 롤백 할 수 있도록 설정했다.

하기 JDBC Connection 트랜잭션 코드의 단점은 분명하다. 트랜잭션을 발생시켜야 하는 경우, Data Access 기능에서 결코 자유롭지 않다는 것이다. JDBC Transaction은 로컬 트랜잭션이다.

즉, 두 개 이상의 DB에 접근해야 하는 작업을 하나의 트랜잭션으로 만들 수 없다. Java Transaction API(JTA)를 이용할 수도 있지만, API를 직접 다루는 것은 의도하지 않은 에러 발생 가능성을 높인다. 이 외에도, 기술환경이 변화함에 따라 코드가 달라질 수 있다는 가능성을 내포한다.

public void payment() throws Exception {
    Connection c = dataSource.getConnection();  // DB 커넥션 생성
    c.setAutoCommit(false);  // 트랜잭션 시작
// setAutoCommit 메소드는 Connection이 하나의 SQL문을 실행할 때마다 자동적으로 커밋처리 해주는 것을 방지해줌으로써 에러 발생 시 모든 SQL문을 롤백 할 수 있도록 처리

    try {
        paymentDao.account(account);          // 결제금액 저장
        paymentDao.paymentType(paymentType);  // 결제정보 저장(ex. 카드, 계좌이체 정보 등)

        c.commit();   // 트랜잭션 커밋
    }
    catch(Exception e) {
        c.rollback(); // 트랜잭션 롤백
    }
    c.close();  // DB 커넥션 종료
}

https://sigridjin.medium.com/spring-transaction-%EA%B4%80%EB%A6%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EB%A9%94%EB%AA%A8-f391fd2885b4

 

Spring Transaction 관리에 대한 메모

A Short Memo on Spring Framework Transaction

sigridjin.medium.com

 

728x90