์คํ๋ง ๋ถํธ ๋น๋ ์ ๋ณด
๋ณธ ๊ธ์ ๋ํ ๊ด๋ จ ์ฝ๋๋ https://github.com/kdevkr/spring-demo ์์ ์ฐธ๊ณ ํ ์ ์์ต๋๋ค.
์คํ๋ง ๋ถํธ ํ๋ก์ ํธ์์ ๋น๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ๊ทธ๋๋ค์ด๋ ๋ฉ์ด๋ธ ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ผ ์๋์ ๊ฐ์ด buildInfo()๊ฐ ๋์ํ๋๋ก ๊ตฌ์ฑํด์ผํ๋ค. ์ด๋ ๊ฒ ๊ตฌ์ฑํ๋ฉด ๋น๋ ๋จ๊ณ์์ ํด๋์คํจ์ค์ META-INF/build.properties๋ผ๋ ํ์ผ์ ๋น๋ ์ ๋ณด๊ฐ ํฌํจ๋๋ค.
springBoot {
buildInfo()
}
ํด๋์คํจ์ค์ ์ถ๊ฐ๋ build-info.properties์ ๋ด์ฉ์ ProjectInfoAutoConfiguration ํด๋์ค์ ์ํด์ BuildProperties ํด๋์ค๊ฐ ๋น์ผ๋ก ๋ฑ๋ก๋๊ฒ ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ด BuildProperties๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ API๋ฅผ ์์ฑํ ์ ์๋ค.
@RestController
public class BuildController {
private final BuildProperties buildProperties;
public BuildController(final BuildProperties buildProperties) {
this.buildProperties = buildProperties;
}
@GetMapping("build-info")
public BuildProperties buildInfo() {
return buildProperties;
}
}
ํ์ง๋ง, ๊ทธ๋๋ค ๋ช ๋ น์ด์ ์ํด ๋น๋๋ ์ ํ๋ฆฌ์ผ์ด์ ํ์ผ์ผ๋ก ์คํ๋ ๊ฒ์ด ์๋๋ผ ์ธํ ๋ฆฌ์ ์ด์ ๊ฐ์ IDE๋ก ๊ตฌ๋ํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด BuildProperties๊ฐ ๋ฑ๋ก๋์ง ์์ผ๋ฏ๋ก ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ํด๋์คํจ์ค์ ์๋ ๋น๋ ์ ๋ณด๋ฅผ ๋จผ์ ์ฌ์ฉํ ์ ์๋๋ก @AutoConfiguration์ ํตํด ์๋ ๊ตฌ์ฑ ํด๋์ค๋ฅผ ๋ง๋ค๊ณ ProjectInfoAutoConfiguration๊ฐ ๋์ํ ์ดํ์ ์ํํ๋๋ก ํ๋ฉด ๋๋ค.
//@Import(ProjectInfoAutoConfiguration.class)
@AutoConfiguration(after = ProjectInfoAutoConfiguration.class)
@Configuration
public class BuildConfiguration {
@ConditionalOnMissingBean(BuildProperties.class)
@Bean
public BuildProperties buildProperties() {
Properties properties = new Properties();
properties.setProperty("time", DateTimeFormatter.ISO_INSTANT.format(Instant.now()));
properties.setProperty("artifact", "demo");
properties.setProperty("group", "kr.kdev");
properties.setProperty("name", "demo");
properties.setProperty("version", "local");
return new BuildProperties(properties);
}
}
์ ์ฝ๋์์ @AutoConfiguration๋ ์คํ๋ง ๋ถํธ 2.7 ์์ ์ถ๊ฐ๋ ์ด๋ ธํ ์ด์ ์ด๋ฏ๋ก ์ด์ ๋ฒ์ ์ด๋ผ๋ฉด @Import๋ฅผ ํตํด ์๋์ผ๋ก ๋์ํ๋๋ก ํด์ผํ๋ค.
๊ทธ๋ฌ๋ฉด ์ด์ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ProjectInfoAutoConfiguration์ ์ํด BuildProperties๊ฐ ๋ฑ๋ก๋์ง ์๋๋ผ๋ ์ฝ๋๋ก ์ ์๋ BuildProperties๊ฐ ๋ฑ๋ก๋์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. ๋น๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋น๋ ์ ๋ณด API๊ฐ ๋ฑ๋ก๋๋ฏ๋ก ์๋์ ๊ฐ์ด ๋น๋ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค.
# java -jar '-Dspring.profiles.active=prod' .\demo-1.0.0.jar
# /build-info
{"name":"demo","version":"local","time":"2023-03-22T13:13:58.186Z","artifact":"demo","group":"kr.kdev"}