반응형 Framework & Lib29 스프링 빈 생성 과정 분석 [4] - 디버깅 참고 자료 [스프링 빈 생성 과정 분석 시리즈]스프링 빈 생성 과정 분석 [1] - Application Context(BeanFactory)스프링 빈 생성 과정 분석 [2] - BeanDefinitionRegistry, SingletonBeanRegistry스프링 빈 생성 과정 분석 [3] - BeanFactoryPostProcessor, BeanPostProcessor스프링 빈 생성 과정 분석 [4] - 디버깅 참고 자료 1편부터 3편까지 하여 스프링 빈 생성 과정이 어떻게 이뤄지는지 알아보았다.이번 포스팅에서는 이 개념들을 찾아보기 위해 실제 디버깅한 소스 코드를 공유하기 위해 작성하였다.스프링 부트의 run 메서드를 통해 시간순으로 어떻게 흘러가는지 코드만 공유하겠다.이를 통해 디버깅한다면 1-3편에서 설명.. 2024. 8. 7. [스프링] 스태틱 메서드가 아닌 스프링 싱글톤 빈을 사용해야하는 이유 스프링의 application context에 관리되는 빈들은 기본적으로 싱글톤으로 관리된다. 상태를 갖지 않는 객체의 메서드를 사용하기 위하여 매번 인스턴스화 하는 것은 효율적이지 않다.스프링에서는 이러한 이유로 싱글톤 타입이라는 것을 지원하고 싱글톤 타입으로 스프링 빈을 관리할 땐, 속성 없이 메서드만 구현하여 사용을 한다. 허나, 이렇게 메서드만 사용할 목적이라면 굳이 인스턴스화할 필요도 없고 static으로 만들어서 사용해도 되지 않나라는 의문이 들수 있다.static 메서드를 사용하는 것과 싱글톤 빈의 메서드를 사용하는 것의 차이는 클래스 메서드이냐, 인스턴스 메서드이냐의 차이이다.즉, 인스턴스를 사용하냐 하지 않냐의 차이이고, 이는 객체지향적인 프로그래밍을 할 수 있냐 없냐로 나타난다. sta.. 2024. 6. 29. 스프링의 트랜잭션 추상화 트랜잭션 추상화우리는 추상화가 "공통적인 것을 취하고 차이점을 배제하는 것"이라는걸 잘 알고 있다.추상화를 통해 공통적인 부분을 분리하여 처리하도록 한다면 차이점에 대해서만 집중하여 개발을 할 수 있다.트랜잭션 추상화에서 적용된 공통점은 트랜잭션 처리이고, 차이점은 비즈니스 로직이다. 아래 코드를 보자.override fun create(member: Member) { val status = transactionManager.getTransaction(DefaultTransactionDefinition()) try { // 비즈니스 로직 val id = memberRepo.create(member) memberRepo.addRole(MemberRole(id, "USER".. 2024. 6. 25. AbstractRoutingDataSource에서 Transactional readonly값 false만 리턴하는 오류 해결 문제 상황connection 경로를 결정하는 AbstractRoutingDataSource에서 현재 실행중인 트랜잭션의 readonly 값을 읽어와 readonly=true 이면 slave db로 경로를 결정하고, readonly=false이면 master db로 경로를 결정하는데AbstractRoutingDataSource의 구현체에서 TransactionSynchronizationManager.isCurrentTransactionReadOnly()를 호출하면 false만 리턴이됨 문제 원인 PlatformTransactionManager가 커넥션 경로를 먼저 설정하고 이후에 트랜잭션 상태를 설정함.따라서 커넥션 경로를 설정하는 시점에 트랜잭션 상태가 정의되어있지 않아 default로 false만 반환.. 2024. 6. 16. 이전 1 2 3 4 5 6 ··· 8 다음 반응형