728x90
@AutoConfiguration을 이해하기 위해서는 그전에 먼저 라이브러리가 어떻게 사용되는지 이해하는 것이 필요하다.
여러분이 만든 실시간 자바 Memory 조회 기능이 좋다고 소문이 나서, 여러 프로젝트에서 사용하고 싶어한다. 이 기능을 여러 곳에서 사용할 수 있도록 라이브러리로 만들어보자.(참고로 라이브러리를 만들 때는 스프링 부트 플러그인 기능을 사용하지 않고 진행한다.)
build.gradle
plugins {
id 'java'
}
group = 'memory'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:3.0.2'
compileOnly 'org.projectlombok:lombok:1.18.24'
annotationProcessor 'org.projectlombok:lombok:1.18.24'
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.0.2'
}
test {
useJUnitPlatform()
}
- 스프링 부트 플러그인을 사용하게 되면 앞서 설명한 실행 가능한 Jar 구조를 기본으로 만든다.
- 여기서는 실행 가능한 Jar가 아니라, 다른곳에 포함되어서 사용할 순수 라이브러리 Jar를 만드는 것이 목적이므로 스프링 부트 플러그인을 사용하지 않았다.
- 스프링 컨트롤러가 필요하므로 spring-boot-starter-web 라이브러리를 선택했다.
- 스프링 부트 플러그인을 사용하지 않아서 버전을 직접 명시했다.
Memory
public class Memory {
private long used;
private long max;
public Memory(long used, long max) {
this.used = used;
this.max = max;
}
public long getMax() {
return max;
}
public long getUsed() {
return used;
}
@Override
public String toString() {
return "Memory{" +
"used=" + used +
", max=" + max +
'}';
}
}
MemoryFinder
@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");
}
}
MemoryController
@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;
}
}
MemoryFinderTest
public class MemoryFinderTest {
@Test
public void get(){
MemoryFinder memoryFinder = new MemoryFinder();
Memory memory = memoryFinder.get();
System.out.println("memory = " + memory);
assertThat(memory).isNotNull();
}
}
- 간단한 테스트를 통해서 데이터가 조회 되는지 정도만 간단히 검증해보자.
해당 프로젝트는 라이브러리로 빌드하자
- ./gradlew clean build : 빌드
- 빌드 결과(build/libs/memory-v1.jar)
- 압축 해제(결과 확인): jar -xvf memory-v1.jar
- memory-v1.jar 는 스스로 동작하지는 못하고 다른 곳에 포함되어서 동작하는 라이브러리이다. 이제 이 라이브러리를 다른 곳에서 사용해 보자..
728x90
'스프링 부트(핵심 원리와 활용)' 카테고리의 다른 글
| Ch04. 자동 구성(Auto Configuration) - 자동 구성 라이브러리 만들기 (0) | 2023.03.10 |
|---|---|
| Ch04. 자동 구성(Auto Configuration) - 순수 라이브러리 사용하기 (0) | 2023.03.10 |
| Ch04. 자동 구성(Auto Configuration) - @Conditional (0) | 2023.03.09 |
| Ch04. 자동 구성(Auto Configuration) - 자동 구성 직접 만들기(기반 예제) (0) | 2023.03.09 |
| Ch04. 자동 구성(Auto Configuration) - 스프링 부트의 자동 구성 (0) | 2023.03.09 |