영원히 남는 기록, 재밌게 쓰자

@SpringBootApplication 설정 애너테이션들 (@Import, scanBasePackages 속성, @Profile) 본문

springboot

@SpringBootApplication 설정 애너테이션들 (@Import, scanBasePackages 속성, @Profile)

youngjae-kim 2024. 2. 8. 16:58
728x90
반응형

웹 애플리케이션의 메인 클래스가 위치한다. 이 클래스에 메인 메서드가 위치하고 main()를 실행하면 스프링 부트가 서버를 띄우게 된다.

@Import(Config.class)
@SpringBootApplication(scanBasePackages = "hello.itemservice.web")
public class ItemServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ItemServiceApplication.class, args);
    }

    @Bean
    @Profile("local")
    public TestDataInit testDataInit(ItemRepository itemRepository) {
        return new TestDataInit(itemRepository);
    }
}

웹 어플리케이션을 그냥 띄우게 되면 스프링부트는 해당 프로젝트 하위 경로와 모든 설정 파일에 대해서 컴포넌트 스캔을 하게 되고 내가 설정에 포함 시키고 싶지 않은 설정 클래스들이 설정으로 등록되게 될 수 있다.

그리고 설정 클래스들끼리 충돌이 날 수 도 있다. 그래서 서버를 띄울 때 스프링 부트의 다양한 설정 옵션들을 사용할 수 있다.

  • 내가 원하는 설정 파일 하나만 등록하고 싶고 싶다.
  • 원하는 경로의 하위 경로만 자동 컴포넌트 대상으로 등록하고 스캔하고 싶다.
  • 테스트나 다른 프로그램이 아니라 웹 애플리케이션 서버를 시작할 때만 실행을 하고 싶은 설정 메서드나 빈들이 있다.

위 경우를 설정하는데 도움을 줄 수 있는 애너테이션들이 위 코드에 들어있다.

@Import(Config.class)

  • 설정 파일 관련 패키지 하위에 여러 설정 파일들이 존재할 때 그 중 하나만 설정 파일로 등록 시킬 때 사용
  • 설정 파일로 등록하고 싶은 클래스의 이름을 넣어주면 된다.

**@SpringBootApplication(scanBasePackages = "hello.itemservice.web")**

  • 웹 어플리케이션을 띄울 때 자동으로 컴포넌트 스캔을 할 대상 하위 패키지를 지정할 수 있다.
  • 지정하지 않으면 프로젝트 하위의 모든 경로를 컴포넌트 스캔의 대상으로 잡는다.
  • 여기서는 hello.itemservice.web 패키지 하위만 컴포넌트 스캔 대상으로 지정했다.
  • 여기 이외의 경로를 빈 등록을 할 때는 수동으로 넣어주면 된다.

@Profile("local")

  • application.properties에 프로필을 지정할 수 있다. 로딩 시점에 properties의 spring.profiles.active 속성을 읽어서 프로필로 사용한다.
  • 해당 프로필 애너테이션이 붙어 있고 컴포넌트 스캔 대상의 빈이면 스프링 컨테이너에 등록이 된다.

간단하게 실습하면서 알게된 스프링 로딩 시 설정 관련 애너테이션들에 대해서 정리해보았다.

728x90
반응형