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

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

스프링 DB 1편 - 데이터 접근 핵심 원리

트랜잭션 문제 해결 - 트랜잭션 AOP 적용

강의중에 하신 말씀이 궁금합니다. "우리가 직접 의존관계를 주입..."

작성

·

27

·

수정됨

0

안녕하세요. 강사님

트랜잭션 문제해결 - 트랜잭션AOP적용 강의에서 하신 말씀에 질문이 있습니다.

 

07:20 이후에 나옵니다.

"물론 우리가 직접 의존관계를 주입해서 써도 되고요" 라는 말씀이 궁금합니다.

 

기본편에서 열심히 공부했던 개념이 나오는데요.

스프링빈 구성방식

  1. 직접호출(@Configuration, @Bean)

  2. 자동호출(@ComponentScan, @Component)

강의에서

DataSource와 TxManager를 빈등록하는 방법으로 위 1번방식으로 진행했습니다.

Proxy는 DataSource와 TxManager빈을 2번방식으로 주입받아서 진행된다고 설명하셨습니다.

@Component
public class TransactionProxy {
    private MemberService target;
    public void logic() {
        //트랜잭션 시작
        TransactionStatus status = transactionManager.getTransaction(..);
        try {
            //실제 대상 호출
            target.logic();
            transactionManager.commit(status); //성공시 커밋
        } catch (Exception e) {
            transactionManager.rollback(status); //실패시 롤백
            throw new IllegalStateException(e);
        }
    }
}

 

이후에 아래코드와 같이 1번 방식으로 직접 등록을 하려고 할 때, 의존관계를 직접주입해도 좋다라 말씀주신것 같습니다. (강의중 말씀: "물론 우리가 직접 의존관계를 주입해서 써도 되고요")

public class TransactionProxy {
    private MemberService target;
    public void logic() {
        //트랜잭션 시작
        TransactionStatus status = transactionManager.getTransaction(..);
        try {
            //실제 대상 호출
            target.logic();
            transactionManager.commit(status); //성공시 커밋
        } catch (Exception e) {
            transactionManager.rollback(status); //실패시 롤백
            throw new IllegalStateException(e);
        }
    }
}
    @TestConfiguration
    static class TestConfig {
        @Bean
        DataSource dataSource() {
            return new DriverManagerDataSource(URL, USERNAME, PASSWORD);
        }
        @Bean
        PlatformTransactionManager transactionManager() {
            return new DataSourceTransactionManager(dataSource());
        }
        @Bean
        TransactionProxy txProxy() {
            return new TransactionProxy(transactionManager());
        }
    }

 

 

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 창신동 장첸님

생각하신 내용이 맞습니다.

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다. 창신동 장첸님.

질문해 주신 부분과 관련하여, 스프링에서의 의존관계 주입 방식에 대해 설명드리겠습니다. 스프링에서는 의존성을 주입하는 여러 방법이 있으며, 이는 개발자가 자유롭게 선택할 수 있는 부분이기 때문에 다양한 상황에 맞춰 유연하게 사용할 수 있습니다.

  1. 직접호출 방식 (@Configuration, @Bean): 이 방식은 개발자가 직접 자바 코드를 통해 스프링 빈을 등록하고 의존성을 주입하는 방법입니다. 설정 파일을 통해 명시적으로 빈을 관리할 수 있기 때문에, 복잡한 설정 또는 스프링 빈의 동작을 상세히 제어해야 할 경우 유용합니다.

  2. 자동호출 방식 (@ComponentScan, @Component): 이 방식은 스프링의 자동 스캔 기능을 통해 컴포넌트를 빈으로 등록하는 방법입니다. 주로 애노테이션 기반 구성(@Autowired, @Service, @Repository 등)을 통해 의존성을 자동으로 처리합니다. 코드가 간결해지고, 스프링의 자동화된 관리 기능을 최대한 활용할 수 있습니다.

강의에서는 첫 번째 방식인 직접 호출을 통해 트랜잭션 AOP를 적용하고 있지만, 두 번째 방식인 자동 호출 방식으로도 구현이 가능합니다. 스프링의 유연함 덕분에 어느 한 방법에 고정되지 않고, 상황에 맞는 방법을 선택할 수 있습니다. 다시 말해, 특정한 기능이 두 방식 모두에서 구현 가능할 경우, 취향이나 프로젝트의 성격에 따라 선택할 수 있습니다.

관련해서는 아래의 유사한 질문 링크를 참고해 보시길 추천드립니다:

이 질문과 답변은 의존관계 주입 방법에 대한 심층적인 이해를 도와줄 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

질문하기