들어가기 전 이 글은 김영한님의 인프런 강의를 복습하며 작성한 글입니다. 외부 설정이란? 하나의 어플리케이션을 여러 환경에서 사용해야 할 때가 있음. (개발, Beta, Release, Rc Phase 등) 각 환경마다 서로 다른 설정값을 사용해야하는 경우가 많음 어떻게 이 문제를 해결할 수 있을까? 가장 단순한 방법 : 각각의 환경에 맞게 어플리케이션을 빌드. 이 방법은 좋은 방법이 아님. 환경에 따라 빌드를 여러 번 해야함. (빌드 결과물이 다름. A-beta.jar, A-rc.jar ) 이 경우, 개발 환경에서 검증이 다 되었다고 생각할 수 있지만 A-rc.jar는 새로운 아티팩트이기 때문에 개발과 똑같이 동작하지 않을 수도 있음. 즉, 유연성이 떨어지는 방법 주로 사용하는 방법 : 빌드는 한번만 ..
스프링 부트의 AutoConfiguration 스프링 부트는 사용하는 라이브러리 중 필요한 빈을 자동으로 스프링 컨테이너에 등록해주는 AutoConfiguration 기능윽 제공함. 스프링 부트는 spring-boot-autoconfigure 라이브러리를 이용해 AutoConfiguration으로 등록이 필요한 스프링 빈 정보들을 모아둔다. @AutoConfiguration // AutoConfigurationImportSelector.class protected List getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) { List configurations = ImportCandidates.l..
자동 구성 이해1 - 스프링 부트의 동작 스프링 부트는 다음 경로에 있는 파일을 읽어서 스프링 부트 자동 구성으로 사용한다. resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 직접 만든 memory-v2 라이브러리와 spring-boot-autoconfigure 라이브러리의 위 파일을 살펴보면 스프링 부트의 자동 구성을 확인할 수 있다. // spring-boot-autoconfigure의 org.springframework.boot.autoconfigure.AutoConfiguration.imports 파일 org.springframework.boot.autoconfigure.admin.Sp..
자동 구성 직접 만들기 - 기반 예제 자동 구성에 대해서 자세히 알아보기 위해 간단한 예제를 만들어보자. 실시간으로 자바의 메모리 사용량을 웹으로 확인할 수 있는 기능을 제공함. @Getter public class Memory { private Long used; private Long max; public Memory(Long used, Long max) { this.used = used; this.max = max; } @Override public String toString() { return "Memory{" + "used=" + used + ", max=" + max + '}'; } } @Slf4j public class MemoryFinder { public Memory get() { lo..
정리 외부 라이브러리를 직접 만들고 그것을 프로젝트에 라이브러리로 불러서 적용해봄. 그런데 라이브러리를 사용하는 클라이언트 개발자 입장을 생각해보면, 라이브러리 내부에 어떤 빈을 등록해야하는지 알아야 하고, 그것을 하나씩 다 빈으로 등록해야 함. 만약 초기 설정이 복잡하다면, 사용자 입장에서는 상당히 귀찮은 작업이 될 수 있음. 이런 부분을 자동으로 처리해주는 것이 스프링 부트의 Auto Configuration임. 순수 라이브러리 만들기 @AutoConfiguration을 이해하기 위해서는 라이브러리가 어떻게 사용되는지 이해가 필요하다. 앞서 생성한 Memory 패키지를 여러 곳에서 사용할 수 있도록 라이브러리로 만들어보자. 여기서는 순수 라이브러리를 만들어서, 특정 프로젝트에서 수동으로 스프링 빈으로..