Contents

[Spring] Auto Configuration

Auto Configuration ?

auto configuration์€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ classspath ๋‚˜ bean์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•„์š”ํ•œ ์„ค์ •์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด, application.yaml ์— db connection ๊ณผ ๊ด€๋ จ๋œ property๋ฅผ ์ •์˜ํ•˜๊ณ  db dependency๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ db์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์‰ฝ๊ฒŒํ•  ์ˆ˜ ์žˆ๋‹ค.

auto configuration์€ @SpringBootApplication ์–ด๋…ธํ…Œ์ด์…˜์— ํฌํ•จ๋œ @EnableAutoConfiguration ์–ด๋…ธํ…Œ์ด์…˜์— ์˜ํ•ด ํ™œ์„ฑํ™”๊ฐ€ ๋œ๋‹ค.

์ž‘๋™์›๋ฆฌ

  1. @EnableAutoConfiguration ์— ์˜ํ•ด ํ™œ์„ฑํ™”

  2. META-INF/spring.factories์— ์ •์˜๋œ ๊ฒƒ์„ ๋ณด๊ณ  ์–ด๋–ค ํด๋ž˜์Šค๋“ค์„ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•  ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

  3. ์กฐ๊ฑด๋ถ€๋กœ ๊ตฌ์„ฑ @Conditional~~ annotation์— ์˜ํ•ด ํŠน์ • ํด๋ž˜์Šค๊ฐ€ classpath์— ์กด์žฌํ•  ๋•Œ๋งŒ ํ™œ์„ฑํ™”๋ฅผ ์‹œํ‚ค๊ฑฐ๋‚˜, ์กด์žฌํ•˜์ง€ ์•Š์„ ๋•Œ๋งŒ ํ™œ์„ฑํ™”๋ฅผ ์‹œํ‚จ๋‹ค.

์•„๋ž˜๋Š” RedisAutoConfiguration ํด๋ž˜์Šค์˜ ๋ชจ์Šต์ธ๋ฐ, ์ฒซ๋ฒˆ์งธ ์ด๋ฏธ์ง€๋Š” redis์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ด๊ณ , ๋‘๋ฒˆ์งธ๋Š” redis์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ์ถ”๊ฐ€ํ•œ ํ›„์— ๋Œ€ํ•œ ์ด๋ฏธ์ง€์ด๋‹ค.

@ConditionalOnClass(RedisOperations.class) ์˜ ์˜๋ฏธ๋Š” RedisOperation ํด๋ž˜์Šค๊ฐ€ classpath ์— ์žˆ์„ ๋•Œ๋งŒ ํ™œ์„ฑํ™”ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

  1. ์„ค์ •ํŒŒ์ผ AutoConfiguration ํด๋ž˜์Šค๋Š” application.yaml(properties) ํŒŒ์ผ์„ ์ฝ์–ด ํŠน์ • ํด๋ž˜์Šค์˜ ์„ค์ •์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•œ๋‹ค.

  2. ๋นˆ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™” AutoConfiguration ํด๋ž˜์Šค๋Š” ์ •์˜ํ•œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๊ฒฝ์šฐ, ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

  3. ์šฐ์„ ์ˆœ์œ„ AutoConfiguration ํด๋ž˜์Šค์— ์ •์˜๋œ ๋นˆ์ด ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ์ž๊ฐ€ ๋นˆ์„ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ์—” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ๋นˆ์ด ์šฐ์„  ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ตฌ์„ฑ ์„ค์ • ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๋˜ํ•œ Auto ConfigurationOrder๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ์„ฑ ํด๋ž˜์Šค์˜ ์ ์šฉ ์ˆœ์„œ์— ๋Œ€ํ•œ ์ œ์–ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.