[Spring] Auto Configuration
Auto Configuration ?
auto configuration์ ์ดํ๋ฆฌ์ผ์ด์ ์ classspath ๋ bean์ ๊ธฐ๋ฐ์ผ๋ก ํ์ํ ์ค์ ์ ์๋์ผ๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด, application.yaml ์ db connection ๊ณผ ๊ด๋ จ๋ property๋ฅผ ์ ์ํ๊ณ db dependency๋ฅผ ์ค์นํ๋ ๊ฒ์ผ๋ก ๊ฐํธํ๊ฒ db์ ๋ํ ์ ๊ทผ์ ์ฝ๊ฒํ ์ ์๋ค.
auto configuration์ @SpringBootApplication
์ด๋
ธํ
์ด์
์ ํฌํจ๋ @EnableAutoConfiguration
์ด๋
ธํ
์ด์
์ ์ํด ํ์ฑํ๊ฐ ๋๋ค.
์๋์๋ฆฌ
@EnableAutoConfiguration ์ ์ํด ํ์ฑํ
META-INF/spring.factories
์ ์ ์๋ ๊ฒ์ ๋ณด๊ณ ์ด๋ค ํด๋์ค๋ค์ ์๋์ผ๋ก ๊ตฌ์ฑํ ์ง ๊ฒฐ์ ํ๋ค.์กฐ๊ฑด๋ถ๋ก ๊ตฌ์ฑ
@Conditional~~
annotation์ ์ํด ํน์ ํด๋์ค๊ฐ classpath์ ์กด์ฌํ ๋๋ง ํ์ฑํ๋ฅผ ์ํค๊ฑฐ๋, ์กด์ฌํ์ง ์์ ๋๋ง ํ์ฑํ๋ฅผ ์ํจ๋ค.
์๋๋ RedisAutoConfiguration ํด๋์ค์ ๋ชจ์ต์ธ๋ฐ, ์ฒซ๋ฒ์งธ ์ด๋ฏธ์ง๋ redis์ ๋ํ ์ข ์์ฑ์ ์ถ๊ฐํ์ง ์์ ์ํ์ด๊ณ , ๋๋ฒ์งธ๋ redis์ ๋ํ ์ข ์์ฑ์ ์ถ๊ฐํ ํ์ ๋ํ ์ด๋ฏธ์ง์ด๋ค.
@ConditionalOnClass(RedisOperations.class)
์ ์๋ฏธ๋ RedisOperation ํด๋์ค๊ฐ classpath ์ ์์ ๋๋ง ํ์ฑํํ๋ค๋ ์๋ฏธ์ด๋ค.
์ค์ ํ์ผ AutoConfiguration ํด๋์ค๋ application.yaml(properties) ํ์ผ์ ์ฝ์ด ํน์ ํด๋์ค์ ์ค์ ์ ์ปค์คํฐ๋ง์ด์งํ๋ค.
๋น ์์ฑ ๋ฐ ์ด๊ธฐํ AutoConfiguration ํด๋์ค๋ ์ ์ํ ์กฐ๊ฑด์ ๋ง์กฑํ ๊ฒฝ์ฐ, ๋น์ ๋ฑ๋กํ๊ณ ์ด๊ธฐํํ๋ค.
์ฐ์ ์์ AutoConfiguration ํด๋์ค์ ์ ์๋ ๋น์ด ์์ง๋ง, ์ฌ์ฉ์๊ฐ ๋น์ ์ง์ ์ ์ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ์๊ฐ ์ง์ ์ ์ํ ๋น์ด ์ฐ์ ์ฌ์ฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ตฌ์ฑ ์ค์ ์ค๋ฒ๋ผ์ด๋ฉ์ ์ฝ๊ฒ ํ ์ ์๋ค.
๋ํ Auto ConfigurationOrder๋ฅผ ์ฌ์ฉํด์ ๊ตฌ์ฑ ํด๋์ค์ ์ ์ฉ ์์์ ๋ํ ์ ์ด๋ ๊ฐ๋ฅํ๋ค.