๐ 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 ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ๊ณผ ๊ด๋ จ๋์ ์ข๋ ์์ธํ ๋ด์ฉ๊ณผ ์ํ ์ฝ๋ ๋ฑ์ด ์์ผ๋ ๊ด์ฌ์์ผ์ ๋ถ๋ค๊ป์๋ ํ๋ฒ ๋ณด์๋ฉด ์ข๊ฒ ์ต๋๋ค.