Recent Posts
Recent Comments
밍쎄의 코딩공간
스크랩 16. Spring Transaction 관리 본문
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 커넥션 종료
}
Spring Transaction 관리에 대한 메모
A Short Memo on Spring Framework Transaction
sigridjin.medium.com
728x90
'스크랩' 카테고리의 다른 글
스크랩 18 - 신입 개발자의 첫 홀로서기 (0) | 2023.08.27 |
---|---|
스크랩 17 - SQLite에서 일정거리내의 위치 Query (0) | 2023.08.26 |
스크랩 15. 개발자가 맥북을 사용하는 이유 (3) | 2023.08.22 |
스크랩 14. 개발자의 영어공부 (0) | 2023.08.19 |
스크랩 13. 신입 서버 개발자의 1인분 해내기 (0) | 2023.08.18 |