1. 트랜잭션?
- 과거 JavaEE, JDBC 등
- 트랜잭션 API가 DB, 기술별로 다르다.
- 코드에 명시적으로 커밋/ 롤백/ 예외 처리를 해야 해서 복잡하고 중복되는 코드가 늘었다.
- JTA, JDBC, Hibernate 등 트랜잭션 관리 API가 다 다르다.
- 문제점
- “트랜잭션 처리”가 비즈니스 로직과 뒤섞인다.(관심사 분리)
- 여러 기술을 혼합 사용 시 트랜잭션 처리가 불일치한다.
- Spring에서는?
- 트랜잭션 관리를 interface
PlatformTransactionManager로 추상화 한다.
- 구체 구현에 대한 종속성이 떨어진다.
- 실제 비즈니스 코드는
@Transactional이라는 선언적 처리만 남는다.
계속 읽기
1. ComponentScan이 왜 필요한가?
- 수동 Bean 등록은 프로젝트 크기가 커지면 문제가 생김
- 따라서 자동으로 감지/ 등록할 수 있도록 지원
- Pojo개발, DI, 관심사 분리, 느슨한 결합 등을 실현하기 위해서
계속 읽기
1. SPI(ServiceProviderInterface)란?
- 스프링 프레임워크 자체의 확장/ 커스터마이징을 허용하는 인터페이스
- 프레임워크 내부 동작에 개발자가 직접 Hook을 끼워 넣을 수 있는 규약
계속 읽기
1. JavaBean 규약
- 정의: Java에서 재사용 가능한 컴포넌트를 만들기 위한 규약
- 요건:
- 기본 생성자가 있어야 한다.
- private field, public getter/setter를 갖는 POJO여야 한다.
- 직렬화 가능
- 상태 저장 객체를 외부 라이브러리, 컨테이너, 프레임워크가 자동으로 생성, 초기화, 주입할 수 있게 하는 형식
- 과거 JSP/Servlet, EJB, Spring XML DI 등 모두 JavaBean 규약으로 동작
계속 읽기
1. BeanLifeCyle 전체 흐름
- BeanDefinition 등록
- BeanFactoryPostProcess: BeanDefinition 수정
- Bean 인스턴스 생성
- (의존성 주입)
- BeanNameAware, BeanClassLoaderAware, BeanFactoryAware등 인터페이스
- bean 생성 직후, 의존성 주입 직후
AbstractAutowireCapableBeanFactory.invokeAwareMethods()
- BeanPostProcessor(postProcessBeforeInitialization)
- Bean 인스턴스 생성 직전/직후, 모든 Bean에 대해서 공통적으로 동작한다.
- postProcessBeforeInitialization(..)
- postProcessAfterInitialization(..)
- 대표 구현체
- AutowiredAnnotationBeanPostProcessor(의존성 주입)
- AnnotationAwareAspectJAutoProxyCreator(AOP 프록시 래핑)
- InitDestroyAnnotationBeanPostProcessor(@PostConstruct, @PreDestroy 지원)
InitialzationBean.afterPropertiesSet() or @PostConstruct
- BeanPostProcessor(postProcessAfterInitailization)
- Bean 사용
DisposableBean.destroy() or @PreDestroy
계속 읽기
1. 구조의 필요성
- Spring은 “Bean의 생성/의존성 주입”뿐만 아니라 라이프사이클 후킹, 확장 포인트, 이벤트 시스템, 커스텀 초기화 등 “복잡한 컨테이너 초기화”를 확장성 있게 지원해야 한다.
refresh()를 통해서 아래와 같은 흐름으로 진행됩니다.
1) 컨테이너 준비
2) BeanDefinition 로딩
3) PostProcessor
4) BeanInstantiate
5) AddEventListener
- 일련의 작업을 명확히 분리해서 진행
계속 읽기
1. 왜 세 가지로 나뉘는가?
- Spring은 구성 정보의 표현, 빈 생성/관리, 전체 애플리케이션 문맥 관리까지 계층적으로 나눴다.
- DI 컨테이너로써 단일,인터페이스/클래스로 모든 것을 표현하면 확장성, 테스트성, 유지보수성이 감소
- 따라서 구성 -> 생성/관리 -> 애플리케이션 레벨 관리로 계층을 분리
계속 읽기
정의
- HikariCP는 Java application의 JDBC Connection의 객체를 Pooling 방식으로 관리하며 성능, 자원 효율성을 극대화하는 고성능 경량 커넥션 풀 라이브러리
계속 읽기
Jasypt?
- Java Simplified Encryption의 약자이다.
계속 읽기
- 애플리케이션이 필요한 설정을 자동으로 적용해주는 기능
- 아니, 따로 설정을 하지 않으면 미리 구성되어 있는 설정을 적용한다고 보는게 맞을 것이다.
@EnableAutoConfigure과 META-INF/spring.factories 파일을 바탕으로 동작한다.
- 커스텀 dependency도
META-INF/spring.factories에 등록하여 auto-configure를 받을 수 있다.
계속 읽기