Extension
- JUnit 5에서 단위 테스트 코드를 확장하고 사용자 정의 기능을 추가할 수 있는 메커니즘
- Test class, method를 확장할 수 있다.
- 테스트 이벤트, Life Cycle에 관여하게 된다.
- 우리가 사용하는
@SpringBootTest, @WebMvcTest, @DataJpaTest에도 @ExtendWith(SpringExtension.clas)가 포함되어 있다.
- JUnit 4의 Runner는 단일 상속 구조라 여러 기능 조합이 불가능 했음
- Store를 통한 상태 공유
계속 읽기
1. 기본 개념과 구조
1. 핵심 Idea
- Pub-Sub을 통한 Observer Pattern
계속 읽기
1. Java DynamicProxy
계속 읽기
0. Spring에서 Proxy 전략
계속 읽기
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 규약으로 동작
계속 읽기