강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

최용준님의 프로필 이미지
최용준

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

예외와 트랜잭션 커밋, 롤백 - 활용

OrderService 트랜잭션 프록시 객체의 형태

작성

·

74

0

public class OrderService$$EnhancerBySpringCGLIB extends OrderService {

    private final OrderService target; // 실제 대상 객체 (원본 OrderService)
    private final TransactionManager transactionManager; // 트랜잭션 매니저

    
    //의존 관계를 주입 받았다 가정

    @Override
    public void order(Order order) throws Exception {
        TransactionStatus transactionStatus = null;
        try {
            // 트랜잭션 시작
            transactionStatus = transactionManager.beginTransaction();

            // 실제 비즈니스 로직 호출 (OrderService의 order 메서드)
            target.order(order);

            // 정상적으로 완료된 경우 트랜잭션 커밋
            transactionManager.commit(transactionStatus);

        } catch (RuntimeException e) {
            // 언체크 예외(RuntimeException): 자동 롤백
            transactionManager.rollback(transactionStatus);
            throw e; // 예외 다시 던지기

        } catch (Exception e) {
            // 체크 예외: 기본적으로 커밋
            transactionManager.commit(transactionStatus); // 트랜잭션 커밋
            throw e; // 예외를 호출자에게 다시 전달
        }
    }
}

강의에서 생성되는 프록시 객체의 형태는 정확하진 않지만 대략적으로 위와 같다고 생각해도 될까요?

답변 1

0

안녕하세요. 최용준님, 공식 서포터즈 y2gcoder입니다.

너무 잘 구현해주셨다고 생각합니다!

추가로 프록시에 대해 더 궁금하시다면 영한님의 스프링 핵심 원리 - 고급편 강의를 수강해보시는 것을 추천합니다! 프록시 패턴 등에 대해 학습하시면 위의 코드를 더 보완해보실 수 있습니다 🙂

감사합니다.

최용준님의 프로필 이미지
최용준

작성한 질문수

질문하기