게시글
질문&답변
2023.09.22
InternalService 빈 등록 질문
안녕하세요!먼저 결론부터 말씀드리자면, 빈으로 등록한 InternalService 를 사용해야만 트랜잭션이 적용이 됩니다.그 이유는 트랜잭션 동작원리을 살펴보면 알 수 있습니다!스프링 빈 생성만약 해당 빈이 트랜잭션 적용대상(@Transacational 존재 유무 확인)이면 BeanPostProcessor 에 해당 빈이 전달됩니다.BeanPostProcessor에서는 해당 빈을 트랜잭션이 적용된 프록시 빈으로 변환 하여 스프링 컨테이너에 변환한 빈을 저장합니다. 따라서 트랜잭션을 사용하기 위해서는, new 키워드를 통해 직접 생성한 인스턴스가 아닌 스프링 빈으로 등록된 인스턴스를 사용해야 트랜잭션이 적용됩니다.감사합니다!
- 0
- 1
- 278
질문&답변
2023.09.22
무상태
안녕하세요! 제가 감히 질문에 답변을 하자면 쉽게 말해서 "무상태" 라는 말은 인스턴스 변수를 가지지 않는 것을 의미합니다.싱글톤을 사용할때는 왜 무상태로 설계를 해야하는가?싱글톤이라는 것이 사용자 요청대로 객체를 생성하는 것이 아닌, 객체를 단 하나만 생성해서 사용하는 패턴입니다. 싱글톤 객체에 인스턴스 변수가 존재하면, 여러 스레드에서 하나의 인스턴스 변수에 접근할 수 있게됩니다. 그렇게 되면 A 스레드에서 인스턴스 변수1의 값을 사용해서 비즈니스 로직을 수행하는 동안, B 스레드에서 인스턴스 변수1의 값을 변경하면 A 스레드에서 수행중이던 비즈니스 로직에 이상이 생길 수 있겠죠?이러한 이슈말고도 다른 이유가 있겠지만, 싱글톤을 사용할 때는 무상태로 설계해야합니다. 무상태로 설계하기 하기위해서는, 인스턴스 변수를 사용하지 않고 스레드 로컬, 파라미터를 통한 전달 등 다양한 방법이 있습니다. 감사합니다!
- 1
- 2
- 450