티스토리 뷰

custom으로 만들었던 자동구성정보를 날리고

스프링부트에 만들어져 있는 자동 구성과 테스트로 변경한다.

 

안녕...
스프링부트에 내장된 애노테이션 사용
properties prefix 변경
HelloApiTest 성공 컨테이너 잘 동작

@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 옵션을 주면 스프링 부트 실행시 어떤 객체들이 사용되는지 알 수 있다.

기본 프로젝트라도 사용되는게 많은 Bean들

 

관심있는 Bean들만 출력해보고 싶을 떄 filter 조건을 걸어서 확인해본다.

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 자동 구성 살펴보기

-web 추가하면 웹 라이브러리 추가
62개 의존성 추가

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 자동 구성 살펴보기

Jdbc 자동 구성 라이브러리 추가
WAS 실행시 에러 DataSource 자동구성 시 DB 연결할 url이 없어서 나는 에러. Emvedded DB를 사용하면 classpath에 넣으면 연결된다. spring boot 자동구성에 embedded DB 자동 구성에 대한 구성 정보를 제공해주기 때문
hsql DB 라이브러리 추가
정상적으로 컨테이너 띄워짐

PersistenceExceptionTranslationAutoConfiguration : spring의 모든 데이터 기술은 Exception이 발생하면 적절히 추상화 해주는데 그 기능을 수행하는데 필요한 postProcessor 등록

DataSourceAutoConfiguration : DataSource 관련된 Bean들 만들어주는 설정 Bean 

DataSourceTransactionAutoConfiguration 

JdbcTemplateAutoConfiguration

 

AutoConfiguration(after = DatasourceAutoConfiguration.class) 애노테이션 설정은 DataSourceAutoConfiguration.class 가 처리 된 후 JdbcTemplateConfiguration.class 자동구성 진행

JdbcTemplateConfiguration

NamedParameterJdbcTemplateConfiguration

DataSourceInitializationConfiguration

SqlInitializationAutoConfiguration : JDBC 사용할 때 데이터베이스 초기화, 데이터 넣거나 정리할 때 사용하는 기능을 spring에서 제공

TransactionAutoConfiguration

 

부트가 자동구성정보로 어떤 Bean이 등록되는지 안다면 해당 Bean을 주입받아 사용하면 되지만 잘 모른다면 있는지 모르고 매번 직접 생성해서 사용하게 된다.

 

 

스프링 부트는

  • 스프링 프레임워크를 잘 쓰게 도와주는 도구의 모음
  • 서블릿 컨테이너와 관련된 모든 번거로운 작업을 감춰줌
  • 스프링과 각종 기술의 주요 인프라스트럭쳐 빈을 자동 구성을 이용해서 자동으로 등록해줌
  • 외부설정, 커스텀 빈 등록을 통해서 유연하게 확장가능

스프링 프레임워크

  • 빈 오브젝트의 생명주기를 관리하는 컨테이너
  • 빈 오브젝트의 의존 관계를 동적으로 주입해주는 어셈블러
  • 구성 정보(configuration metadata)와 애플리케이션 기능을 담은 오브젝트가 결합되어 동작하느 ㄴ애플리케이션이 된다.
  • @Configuration. @Bean. @Import를 이용한 구성 정보
  • 메타 애너토에션, 합성 애노테이션 활용

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함