티스토리 뷰
custom으로 만들었던 자동구성정보를 날리고
스프링부트에 만들어져 있는 자동 구성과 테스트로 변경한다.
@JdbcTest
JDBC 기반 컴포넌트만 테스트하는 JDBC 테스트를 위한 어노테이션이다. 이 어노테이션을 사용하면 auto-configuration이 비활성화 되고(@Transactional 이 포함), JDBC 테스트와 관련된 configuration만 적용된다. 기본적으로 @JdbcTest가 붙은 테스트는 트랜젝션 처리가 되고, 각 테스트가 죵로된 후 롤백을 시행한다. 또한 명시됐거나 자동 설정된 DataSource 대신 인메모리 DB를 사용하게 된다.@AutoConfigureTestDatabase를 사용하면 이런 설정을 덮어쓸 수 있다. 전체 어플리케이션 설정을 사용하면서 인메모리 DB를 사용하고 싶다면, 이 어노테이션 대신 @SpringBootTest와 @AutoConfigureTestDatabase를 조합해 사용하는 게 낫다. JUnit 4를 사용한다면 @RunWith(SpringRunner.class)를 함께 사용해야 한다.
@SpringBootTest
스프링 부트 어플리케이션 테스트 시 테스트에 필요한 거의 모든 의존성을 제공 어노테이션입니다. @SpringBootApplication을 기준으로 스프링 빈을 등록함과 동시에 Maven 같은 빌드 툴에 의해 추가된 스프링부트 의존성도 제공해 줍니다. @SpringBootTest 어노테이션에는 webEnvironment라는 값을 통해 웹 어플리케이션 테스트시 Mock으로 테스트할 것인지 실제 톰캣 같은 서블릿 컨테이너를 구동해서 테스트할 것인지를 정할 수 있습니다.
테스트할 때마다 WAS 실행 후 테스트 하던 번거로움을 줄일
테스트 시 실제 컨테이너 띄워주는 애노테이션 추가
스프링 부트 자동 구성 분석 방법
Spring initializr 로 스프링 부트 프로젝트 생성시 아무런 dependencies가 없는 기본 스프링 부트 프로젝트를 만들고 살펴보도록 한다.
보통 ~AutoConfiguration Bean이 등록되면 내부에 실제적으로 사용되는 Bean들을 등록하는 중첩 클래스가 있고 해당 Bean을 사용할 때 필요한 Property 정보를 가지고 있는 Properties 클래스들도 같이 Bean으로 등록된다.
Run/Debug Configurations 설정에서 VM option에 -Ddebug 옵션을 주면 스프링 부트 실행시 어떤 객체들이 사용되는지 알 수 있다.
ConditionEvaluationReport : 컨테이너의 Bean으로 등록되는데 컨테이너 띄울때 나온 로그 내용을 가지고 있는 객체
이 객체를 사용하여 필터링 조건을 걸어 원하는 로그내용만 출력해 볼 수 있다.
isFullMatch 메서드는 condition 조건들을 통과해서 Bean으로 등록된 애들 추출
getOutCome 메서드는 Bean 등록된 애들이 어떤 컨디션 조건을 통과했는지 내역이 나온다.
등록된 스프링 Core 자동 구성 Bean을 살펴보면
properties 파일에 spring.aop.auto 라는 설정을 한 적없지만 마지막 설정인
matchIfMissing = true는 만약 설정된 property를 찾을 수 없으면 Condition이 통과가 되는 설정이기 때문
중첩 클래스인 ClassProxyingConfiguration 은 org.aspectj.weaver.Advice Bean을 찾을 수 없고 matchIfMissing = true 조건으로 컨디션이 통과가 된 것을 볼 수 있다.
TaskExecutionAutoConfiguration : 스레드 사용을 위한 자동 구성 정보 Bean을 등록하기 위한 설정 Bean
TaskExecutionProperties : 스프링 부트에서 정의한 스레드 풀 구성 정보
ThreadPoolTaskExecutor : 스레드풀을 이용하여 멀티 스레드 구현을 쉽게 해주는 클래스 java.util.concurrent.Executor를 Spring에서 구현했다. 주로 비동기처리를 위해 사용된다.
TaskExecutorBuilder : ThreadPoolTaskExecutor 생성을 위해 설정 정보를 만들어 주는 Bean
Web 자동 구성 살펴보기
HttpMessageConvertersAutoConfiguration : MessageConverters 를 자동 구성을 담당하는 Bean
HttpMessageConverters :
- HTTP API처럼 JSON 데이터를 HTTP 메시지 바디 내 직접 읽거나 쓰는 경우 사용
- @ResponseBody 어노테이션을 사용할 때 HTTP Body 내 문자 내용을 직접 반환하므로 HttpMessageConverter가 동작
- String 문자 처리에는 StringHttpMessageConverter, 객체 처리에는 MappingJackson2HttpMessageConverter 사용
- 이외에도 다양한 HttpMessageConverter가 존재
JacksonHttpMessageConverters : MessageConverter 서버로 들어오는 데이터를 객체로 변환하거나, 비즈니스 로직으로 처리되어 가공된 객체를 응답으로 보내기 위해 Http 메세지로 변환하는 변환기이다.여러가지 변환기 중에, Json 을 객체로 변환하는 라이브러리 중 스프링은 기본으로 Jackson 을 사용
Jacson의 ObjectMapper 가 필요한경우 자동구성정보로 제공해주고 있으니 해당 builder 사용해서 쓰면 된다.
RestTemplateAutoConfiguration
Rest 요청을 보낼 수 있도록 클라이언트 라이브러리 제공
프로젝트에 spring-web 모듈이 있다면 RestTemplateBuilder를 빈으로 등록해 줍니다.
EmbeddedWebServerFactoryCustomizerAutoConfiguration : 임베디드된 웹 서버 자동 구성 담당 BeanDispatcherServletAutoConfiguration : Http 요청을 적절한 Bean 에게 위임해주는 디스패쳐 서블릿 자동 구성 담당 BeanHttpEncodingAutoConfiguration : 웹 요청 / 응답 주고 받을 때 인코딩 관련 자동 구성 담당 BeanMultipartAutoConfiguration : 파일 업로드 기능 담당 자동 구성 담당 Bean... 웹기술에 필요한 기능들 자동 구성으로 잡아놨다
Jdbc 자동 구성 살펴보기
PersistenceExceptionTranslationAutoConfiguration : spring의 모든 데이터 기술은 Exception이 발생하면 적절히 추상화 해주는데 그 기능을 수행하는데 필요한 postProcessor 등록
DataSourceAutoConfiguration : DataSource 관련된 Bean들 만들어주는 설정 Bean
DataSourceTransactionAutoConfiguration
JdbcTemplateAutoConfiguration
JdbcTemplateConfiguration
NamedParameterJdbcTemplateConfiguration
DataSourceInitializationConfiguration
SqlInitializationAutoConfiguration : JDBC 사용할 때 데이터베이스 초기화, 데이터 넣거나 정리할 때 사용하는 기능을 spring에서 제공
TransactionAutoConfiguration
부트가 자동구성정보로 어떤 Bean이 등록되는지 안다면 해당 Bean을 주입받아 사용하면 되지만 잘 모른다면 있는지 모르고 매번 직접 생성해서 사용하게 된다.
스프링 부트는
- 스프링 프레임워크를 잘 쓰게 도와주는 도구의 모음
- 서블릿 컨테이너와 관련된 모든 번거로운 작업을 감춰줌
- 스프링과 각종 기술의 주요 인프라스트럭쳐 빈을 자동 구성을 이용해서 자동으로 등록해줌
- 외부설정, 커스텀 빈 등록을 통해서 유연하게 확장가능
스프링 프레임워크
- 빈 오브젝트의 생명주기를 관리하는 컨테이너
- 빈 오브젝트의 의존 관계를 동적으로 주입해주는 어셈블러
- 구성 정보(configuration metadata)와 애플리케이션 기능을 담은 오브젝트가 결합되어 동작하느 ㄴ애플리케이션이 된다.
- @Configuration. @Bean. @Import를 이용한 구성 정보
- 메타 애너토에션, 합성 애노테이션 활용
'자바 > 스프링 부트' 카테고리의 다른 글
웹 서버와 서블릿 컨테이너 (0) | 2023.03.11 |
---|---|
스프링 부트소개 (0) | 2023.03.07 |
섹션 9. Spring JDBC 자동 구성 개발 (0) | 2023.02.28 |
섹션8. 외부 설정을 이용한 자동 구성 (0) | 2023.02.19 |
섹션7. 조건부 자동 구성 (0) | 2023.02.16 |