본 글은 백기선님의 스프링부트 개념과 활용강좌를 수강하며 정리한 내용입니다.

이번 포스트는 Autoconfoguration을 직접 만들어 실제 스프링부트 프로젝트에서 어떻게 활용될 수 있는지 연습해 본다.

먼저 Autoconfiguration을 제공할 새로운 스프링부트 프로젝트를 생성한다. 나의 경우 minsik-springboot-stater라는 이름으로 프로젝트를 생성하였다.

프로젝트가 생성되었다면 (maven의 경우) pom.xml 파일에 다음과 같은 디펜던시 설정을 해준다.

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure-processor</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.0.3.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

이후, 자동설정에 활용할 클래스를 만들어 Bean객체로 등록해 준다.

예를들어 다음과 같은 클래스를 만들 수 있다.

public class Holoman {

    String name;
    int howLong;

    public String getName() {
        return name;
    }

    public int getHowLong() {
        return howLong;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setHowLong(int howLong) {
        this.howLong = howLong;
    }

    @Override
    public String toString() {
        return "Holoman{" +
                "name='" + name + '\\'' +
                ", howLong=" + howLong +
                '}';
    }
}

이후 위와 같은 클래스를 빈객체로 등록해 줄 수 있는 다른 Configuration 클래스를 만든다. (원래 이러한 자동설정파일은 새로운 프로젝트로 만드는게 일반적이라고 한다.)

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HolomanConfiguration {

    @Bean
    public Holoman holoman(){
        Holoman holoman = new Holoman();
        holoman.setHowLong(5);
        holoman.setName("Minsik");
        return holoman;
    }

이 Configuration클래스는 이전에 만든 Holoman이라는 클래스 객체를 자동 생성해 초기화를 시켜주는 클래스이다. 스프링 혹은 스프링부트 프로젝트에서 @Configuration 설정을 해놓을 경우 자동으로 의존성 주입이 발생하는 것 처럼 이곳에서도 해당 설정이 반드시 필요하다.

이후, META-INF폴더 밑에 spring.fatories라는 설정파일을 생성해 다음과 같은 설정을 한다.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\\
    web.ecoveloper.HolomanConfiguration

이는 @EndableAutoCofiguration 어노테이션이 자동설정을 실행할 때 이곳에 명시된 경로를 스캔하라는 것을 지시한다. (@EndableAutoCofiguration에 대한 내용은 이곳 참고)

이후, 생성된 프로젝트를 빌드해 jar파일로 변환해주어야 한다.

콘솔에서

mvn install

을 입력하게 되면 다른 메이븐 프로젝트에서 생성된 jar파일을 가져다가 사용될 수 있도록 로컬 메이븐 저장소에 설치하게 된다.