본문 바로가기
반응형

Framework & Lib & API27

스프링 빈 생성 과정 분석 [4] - 디버깅 참고 자료 [스프링 빈 생성 과정 분석 시리즈]스프링 빈 생성 과정 분석 [1] - Application Context(BeanFactory)스프링 빈 생성 과정 분석 [2] - BeanDefinitionRegistry, SingletonBeanRegistry스프링 빈 생성 과정 분석 [3] - BeanFactoryPostProcessor, BeanPostProcessor스프링 빈 생성 과정 분석 [4] - 디버깅 참고 자료 1편부터 3편까지 하여 스프링 빈 생성 과정이 어떻게 이뤄지는지 알아보았다.이번 포스팅에서는 이 개념들을 찾아보기 위해 실제 디버깅한 소스 코드를 공유하기 위해 작성하였다.스프링 부트의 run 메서드를 통해 시간순으로 어떻게 흘러가는지 코드만 공유하겠다. 이를 통해 디버깅한다면 1-3편에서 설.. 2024. 8. 7.
[스프링] 스태틱 메서드가 아닌 스프링 싱글톤 빈을 사용해야하는 이유 스프링의 application context에 관리되는 빈들은 기본적으로 싱글톤으로 관리된다.  싱글톤으로 관리하게 됬을 때의 장점은 메모리 사용에 효율적이라는 것이다.객체 사용 시점마다 인스턴스화가 된다면 가비지 컬렉터의 성능이 아무리 좋다한들 많은 양의 메모리를 점유하게 될 것이다.싱글톤 인스턴스를 통해 하나만 가지고 재사용할 수 있다면 메모리 점유를 줄여 효율적인 시스템 운영이 가능하게 된다.스프링이 싱글톤을 통해 얻는 장점에 대해서는 알았으나 의문점이 드는 부분이 있다.싱글톤을 통해 얻는 장점이 메모리 사용의 효율성이라고 한다면 모든 메서드를 스태틱으로 선언하여 사용해도 되지 않을까? 위와 같은 의문에 대한 답은 객체지향적 프로그래밍의 장점을 얻기 위함이다.일단 static으로 사용하면 상속과 다.. 2024. 6. 29.
스프링의 트랜잭션 추상화 트랜잭션 추상화우리는 추상화가 "공통적인 것을 취하고 차이점을 배제하는 것"이라는걸 잘 알고 있다.추상화를 통해 공통적인 부분을 분리하여 처리하도록 한다면 차이점에 대해서만 집중하여 개발을 할 수 있다.트랜잭션 추상화에서 적용된  공통점은 트랜잭션 처리이고, 차이점은 비즈니스 로직이다.  아래 코드를 보자.override fun create(member: Member) {   val status = transactionManager.getTransaction(DefaultTransactionDefinition())   try {       // 비즈니스 로직       val id = memberRepo.create(member)       memberRepo.addRole(MemberRole(id, ".. 2024. 6. 25.
AbstractRoutingDataSource에서 Transactional readonly값 false만 리턴하는 오류 해결 문제 상황connection 경로를 결정하는 AbstractRoutingDataSource에서 현재 실행중인 트랜잭션의 readonly 값을 읽어와 readonly=true 이면 slave db로 경로를 결정하고, readonly=false이면 master db로 경로를 결정하는데AbstractRoutingDataSource의 구현체에서 TransactionSynchronizationManager.isCurrentTransactionReadOnly()를 호출하면 false만 리턴이됨 문제 원인 트랜잭션 범위 내에서 커넥션을 설정하는 AbstractPlatformTransactionManager가 AbstractRoutingDataSource를 먼저 호출하고TransactionSynchronizationM.. 2024. 6. 16.
반응형