스프링 부트(핵심 원리와 활용)

Ch04. 자동 구성(Auto Configuration) - 순수 라이브러리 사용하기

webmaster 2023. 3. 10. 00:50
728x90

project-v1 기본 설정하기

build.gradle

plugins {
    id 'org.springframework.boot' version '3.0.2'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}
  • 스프링 부트에서 다음 라이브러리를 선택했다.
  • Lombok , Spring Web

HelloController

@RestController
public class HelloController {

  @GetMapping("/hello")
  public String hello(){
    return "hello";
  }

}
  • 여기는 helloController 하나만 있지만, 대규모 시스템이라고 생각해 보자

순수 라이브러리 사용하기

앞서 만든 memory-v1.jar 라이브러리를 project-v1에 적용해 보자..

라이브러리 추가

  1. libs 폴더를 생성하자
  2. memory-v1 프로젝트에서 빌드한 memory-v1.jar 를 이곳에 복사
  3. project-v1/build.gradle memory-v1.jar 를 추가
dependencies {
    implementation files('libs/memory-v1.jar') //라이브러리 추가
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
  • 라이브러리를 jar 파일로 직접 가지고 있으면 files 로 지정하면 된다.

라이브러리 설정

MemoryConfig

@Configuration
public class MemoryConfig {

  @Bean
  public MemoryFinder memoryFinder(){
    return new MemoryFinder();
  }

  @Bean
  public MemoryController memoryController(){
    return new MemoryController(memoryFinder());
  }

}
  • 스프링 부트 자동 구성을 사용하는 것이 아니기 때문에 빈을 직접 하나하나 등록해주어야 한다.

문제점

  • 외부 라이브러리를 직접 만들고 또 그것을 프로젝트에 라이브러리로 불러서 적용해보았다.
  • 그런데 라이브러리를 사용하는 클라이언트 개발자 입장을 생각해보면, 라이브러리 내부에 있는 어떤 빈을 등록해야하는지 알아야 하고, 그것을 또 하나하나 빈으로 등록해야 한다. 지금처럼 간단한 라이브러리가 아니라 초기 설정이 복잡하다면 사용자 입장에서는 상당히 귀찮은 작업이 될 수 있다.
  • 이런 부분을 자동으로 처리해주는 것이 바로 스프링 부트 자동 구성(Auto Configuration)이다

 

728x90