![[Spring Boot 핵심 원리와 활용] 자동 구성 라이브러리 제작 및 사용](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwSsvf%2FbtsNIM8HBg6%2FOjAQl7EpaaA2gmBs3KJaZK%2Fimg.png)
[Spring Boot 핵심 원리와 활용] 자동 구성 라이브러리 제작 및 사용Back-End/Spring2025. 5. 2. 19:16
Table of Contents
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.
package memory;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
@AutoConfiguration
@ConditionalOnProperty(name = "memory", havingValue = "on")
public class MemoryAutoConfig {
@Bean
public MemoryController memoryController() {
return new MemoryController(memoryFinder());
}
@Bean
public MemoryFinder memoryFinder() {
return new MemoryFinder();
}
}
@AutoConfiguration
- 스프링 부트가 제공하는 자동 구성 기능을 적용할 때 사용하는 애노테이션이다.
@ConditionalOnProperty
- 라이브러리를 가지고 있더라도 상황에 따라서 해당 기능을 켜고 끌 수 있게 유연한 기능을 제공한다.
- memory=on 이라는 환경 정보가 있을 때 라이브러리를 적용한다. (스프링 빈을 등록)
@ConditionalOnXxx
- @ConditionalOnClass, @ConditionalOnMissingClass : 클래스가 있는 경우 동작한다.
- @ConditionalOnBean, @ConditionalOnMissingBean : 빈이 등록되어 있는 경우 동작한다.
- @ConditionalOnProperty : 환경 정보가 있는 경우 동작한다. @ConditionalOnResource 리소스가 있는 경우 동작한다.
- @ConditionalOnWebApplication, @ConditionalOnNotWebApplication : 웹 애플리케이션인 경우 동작한다.
- @ConditionalOnExpression : SpEL 표현식에 만족하는 경우 동작한다.
package memory;
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 +
'}';
}
}
package memory;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequiredArgsConstructor
public class MemoryController {
private final MemoryFinder memoryFinder;
@GetMapping("/memory")
public Memory system() {
Memory memory = memoryFinder.get();
log.info("memory={}", memory);
return memory;
}
}
package memory;
import jakarta.annotation.PostConstruct;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class MemoryFinder {
public Memory get() {
long max = Runtime.getRuntime().maxMemory();
long total = Runtime.getRuntime().totalMemory();
long free = Runtime.getRuntime().freeMemory();
long used = total - free;
return new Memory(used, max);
}
@PostConstruct
public void init() {
log.info("init memoryFinder");
}
}
자동 구성 대상 지정
스프링 부트 자동 구성을 적용하려면, 다음 파일에 자동 구성 대상을 꼭 지정해주어야한다.
폴더 위치와 파일 이름이 길기 때문에 주의하자
- src/main/resources/META-INF/spring/ 위치에 아래의 파일을 만든다.
org.springframework.boot.autoconfigure.AutoConfiguration.imports - 해당 파일에 아래의 내용을 입력한다.
memory.MemoryAutoConfig
빌드
- 명령어 : ./gradlew clean build
- 빌드 결과물 : build/libs/memory-v2.jar
자동 구성 라이브러리 사용
- 프로젝트의 최상위 폴더 하위에 libs 디렉터리를 생성한다.
- 해당 디렉터리에 이전에 빌드한 memory-v2.jar를 추가한다.
- 이후 아래와 같이 의존성을 추가한다.
memory=on 조건을 주고 실행해보면 정상적으로 실행되는 것을 확인할 수 있다.
'Back-End > Spring' 카테고리의 다른 글
[Spring Boot 핵심 원리와 활용] 외부 설정 (0) | 2025.05.03 |
---|---|
[스프링 핵심원리 - 고급] 스프링 AOP 실무 주의사항 (0) | 2025.04.27 |
[Spring 핵심원리 - 고급] 포인트컷 지시자(PCD) (0) | 2025.04.27 |
[Spring 핵심원리 - 고급] 스프링 AOP 구현 (0) | 2025.04.21 |
[Spring 핵심원리 - 고급] @Aspect AOP (0) | 2025.04.17 |