Community

๐Ÿ“š Spring Boot Starter ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ด์š”!

Microservice ์•„ํ‚คํ…์ณ๋กœ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด ๊ณตํ†ต์ ์œผ๋กœ ์“ฐ๊ฒŒ ๋˜๋Š” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง๋“ค์ด ์žˆ์„ํ…๋ฐ์š”, ์ด๋Ÿด ๊ฒฝ์šฐ ๋ถ„์‚ฐ๋œ ๊ฐ ์„œ๋น„์Šค๋งˆ๋‹ค ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ๋ณด๋‹จ ํ•˜๋‚˜์˜ ๊ณตํ†ต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์˜์กด์„ฑ์„ ๊ฐ€์ง€๋„๋ก ํ•˜๋Š”๊ฒŒ ์—ฌ๋Ÿฌ๋ชจ๋กœ ํšจ์œจ์ ์ผ ๋•Œ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ• ์ค‘ Spring Boot Starter ๋ฅผ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋Š” ๋ฐฉ๋ฒ•์„ ๊ณต์œ ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. Spring Boot Starter ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1๏ธโƒฃ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ค์ค‘ ๋ชจ๋“ˆ๋กœ ํ• ์ง€ ๋‹จ์ผ ๋ชจ๋“ˆ๋กœ ํ• ์ง€ ์„ ํƒ Spring ๊ณต์‹๋ฌธ์„œ(https://docs.spring.io/spring-boot/docs/2.6.7/reference/htmlsingle/#features.developing-auto-configuration.custom-starter) ๋‚ด์šฉ์„ ์ฐธ๊ณ ํ•˜๋ฉด Spring Boot Starter ๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ค ๊ฒฝ์šฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์„œ๋น„์Šค์— ๊ตฌ์„ฑ์ด ๋˜๋„๋ก ํ•˜๋Š” ๋ชจ๋“ˆ๊ณผ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ต์…˜์— ๋งž๊ฒŒ ์„ ํƒ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋„๋ก ํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๋ ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋Šฅ์ด ๋ณต์žกํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋‹จ์ˆœํ•˜๊ฒŒ ๊ฐ€๋Š”๊ฒŒ ์ข‹๊ณ  ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ฐ ์ƒํ™ฉ์— ๋งž์ถฐ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 2๏ธโƒฃ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„ ์„ ํƒ Spring ์—์„œ ์ œ์‹œํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ช…๋ช… ๊ทœ์น™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด๋ฆ„์œผ๋กœ ์ด๋ฆ„์„ ์‹œ์ž‘ํ•˜๊ณ  "-spring-boot-starter" ๊ฐ€ ๋’ค์— ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋ฆ„์ด sample ์ด๋ฉด, artifact ID ๋ฅผ "sample-spring-boot-starter" ๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 3๏ธโƒฃ ์ข…์†์„ฑ ์ถ”๊ฐ€ Maven ์„ ์“ธ ๊ฒฝ์šฐ tag ๋ฅผ ํ†ตํ•ด 'spring-boot-starter-parent' ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Spring ์˜ AutoConfigure ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด 'spring-boot-autoconfigure' ์— ๋Œ€ํ•œ ์˜์กด์„ฑ๋„ ์ถ”๊ฐ€ํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค. 4๏ธโƒฃ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง ๊ฐœ๋ฐœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. 5๏ธโƒฃ Auto-Configuration Class ์ž‘์„ฑ ๊ฐœ๋ฐœ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ์ด ๋˜๋„๋ก Auto-Configuration Class ๋ฅผ ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค. Auto-Configuration Class ์ž‘์„ฑ์‹œ ๋ช‡๊ฐ€์ง€ ํŒ์ด ์žˆ๋Š”๋ฐ ๊ทธ์ค‘ @ConditionalOnClass, @ConditionalOnMissingBean ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ •์˜ํ•œ class ๊ฐ€ ํฌํ•จ๋˜์—ˆ๊ฑฐ๋‚˜ Bean ์œผ๋กœ ๋“ฑ๋ก๋˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑ์ด ๋˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 6๏ธโƒฃ Auto-Configuration Class ๊ฐ€ ๋™์ž‘ํ•˜๋„๋ก spring.factories ์— ์ •์˜ Auto-Configuration Class ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค๊ณ  ํ•ด์„œ Spring ์—์„œ ๊ตฌํ˜„ํ•œ ๋ชจ๋“ˆ์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Spring Boot ๋Š” Application ์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ jar ํŒŒ์ผ ๋‚ด์˜ META-INF ๋””๋ ‰ํ† ๋ฆฌ์—์„œ spring.factories ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์—ฌ๊ธฐ์— ์ •์˜๋œ ๋‚ด์šฉ๋Œ€๋กœ ์ž๋™๊ตฌ์„ฑ์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ณต์œ ๋“œ๋ฆฐ ์•„ํ‹ฐํด์— Spring Boot Starter ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐœ๋ฐœ๊ณผ ๊ด€๋ จ๋˜์„œ ์ข€๋” ์ƒ์„ธํ•œ ๋‚ด์šฉ๊ณผ ์ƒ˜ํ”Œ ์ฝ”๋“œ ๋“ฑ์ด ์žˆ์œผ๋‹ˆ ๊ด€์‹ฌ์žˆ์œผ์‹  ๋ถ„๋“ค๊ป˜์„œ๋Š” ํ•œ๋ฒˆ ๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค