์คํ๋ง ๋ถํธ๋ ๊ฐ๋ฐ์์ ํธ์๋ฅผ ์ํด ์๋ ๊ตฌ์ฑ(Auto Configuration)์ด๋ผ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์ฃผ ์ฌ์ฉํ๋ ๋ง์ ๋น๋ค์ ์๋์ผ๋ก ๋ฑ๋กํด์ฃผ์ด, ๋ฐ๋ณต์ ์ด๊ณ ๋ณต์กํ ์ค์ ์ ์ต์ํํ๊ณ ๋น ๋ฅด๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์์ํ ์ ์์ต๋๋ค. ์ด๋ฒ ๊ธ์์๋ ์๋ ๊ตฌ์ฑ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์์ ๋ฅผ ํตํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์๋ ๊ตฌ์ฑ ์์๋ณด๊ธฐ
์คํ๋ง ๋ถํธ๋ spring-boot-autoconfigure ํ๋ก์ ํธ ์์์ ์๋ง์ ์๋ ๊ตฌ์ฑ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, JdbcTemplate์ ์ค์ ํ๊ณ ๋น์ผ๋ก ๋ฑ๋กํด์ฃผ๋ ์๋ ๊ตฌ์ฑ์ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
JdbcTemplateAutoConfiguration
package org.springframework.boot.autoconfigure.jdbc;
import javax.sql.DataSource;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.sql.init.dependency.DatabaseInitializationDependencyConfigurer;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@AutoConfiguration(after = DataSourceAutoConfiguration.class)
@ConditionalOnClass({ DataSource.class, JdbcTemplate.class })
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(JdbcProperties.class)
@Import({ DatabaseInitializationDependencyConfigurer.class, JdbcTemplateConfiguration.class, NamedParameterJdbcTemplateConfiguration.class })
public class JdbcTemplateAutoConfiguration {
}
์ ์ฝ๋๋ฅผ ํตํด ์๋ ๊ตฌ์ฑ์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
- @AutoConfiguration: ์๋ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์ ๋ ธํ ์ด์ ์ ๋ฑ๋กํด์ผ ํฉ๋๋ค. ์ด๋ ๋ด๋ถ์ @Configuration์ด ์์ด ๋น์ ๋ฑ๋กํ๋ ์๋ฐ ์ค์ ํ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- after = DataSourceAutoConfiguration.class: ์๋ ๊ตฌ์ฑ์ด ์คํ๋๋ ์์๋ฅผ ์ง์ ํฉ๋๋ค. JdbcTemplate์ DataSource๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ DataSourceAutoConfiguration ๋ค์์ ์คํ๋๋๋ก ์ค์ ๋์ด ์์ต๋๋ค.
- @ConditionalOnClass({ DataSource.class, JdbcTemplate.class }): ํน์ ํด๋์ค๊ฐ ์กด์ฌํ ๋๋ง ์ค์ ์ด ๋์ํ๋๋ก ํฉ๋๋ค. ๋ง์ฝ ํด๋น ํด๋์ค๋ค์ด ์์ผ๋ฉด ์ค์ ์ด ๋ฌดํจํ๋๊ณ , ๋น๋ ๋ฑ๋ก๋์ง ์์ต๋๋ค.
@Import์ ๋์์ด ๋๋ JdbcTemplateConfiguration๋ฅผ ์ถ๊ฐ๋ก ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
JdbcTemplateConfiguration
package org.springframework.boot.autoconfigure.jdbc;
import javax.sql.DataSource;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcOperations;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration(proxyBeanMethods = false)
@ConditionalOnMissingBean(JdbcOperations.class)
class JdbcTemplateConfiguration {
@Bean
@Primary
JdbcTemplate jdbcTemplate(DataSource dataSource, JdbcProperties properties) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
JdbcProperties.Template template = properties.getTemplate();
jdbcTemplate.setFetchSize(template.getFetchSize());
jdbcTemplate.setMaxRows(template.getMaxRows());
if (template.getQueryTimeout() != null) {
jdbcTemplate.setQueryTimeout((int) template.getQueryTimeout().getSeconds());
}
return jdbcTemplate;
}
}
์ ์ค์ ์์๋ JdbcTemplate์ด ๋น์ผ๋ก ๋ฑ๋ก๋๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค.
- @Configuration: ์๋ฐ ์ค์ ํ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- @ConditionalOnMissingBean(JdbcOperations.class): JdbcOperations ๋น์ด ์์ ๋ ๋์ํฉ๋๋ค. ์ฆ, JdbcTemplate์ด ์ด๋ฏธ ๋น์ผ๋ก ๋ฑ๋ก๋์ด ์์ง ์์ ๊ฒฝ์ฐ์๋ง ๋์ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ค๋ณต ๋ฑ๋ก ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์๋ ๋ฑ๋ก ์ค์
๋ค์ ์๋ ๊ตฌ์ฑ ๊ธฐ๋ฅ๋ค์ด ๋น๋ค์ ๋ฑ๋กํด์ค๋๋ค.
- JdbcTemplateAutoConfiguration: JdbcTemplate
- DataSourceAutoConfiguration: DataSource
- DataSourceTransactionManagerAutoConfiguration: TransactionManager
๋ฐ๋ผ์ ๊ฐ๋ฐ์๊ฐ ์ง์ ๋น์ ๋ฑ๋กํ์ง ์์๋ JdbcTemplate, DataSource, TransactionManager๊ฐ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋ฉ๋๋ค.
์ฉ์ด ์ค๋ช
- ์๋ ์ค์ (Auto Configuration): ๋น๋ค์ ์๋์ผ๋ก ๋ฑ๋กํ์ฌ ์คํ๋ง์ด ๋์ํ๋ ํ๊ฒฝ์ ์๋์ผ๋ก ์ค์ ํด์ฃผ๋ ๊ฒ.
- ์๋ ๊ตฌ์ฑ(Auto Configuration): ์คํ๋ง ์คํ์ ํ์ํ ๋น๋ค์ ์ ์ ํ๊ฒ ๋ฐฐ์นํด์ฃผ๋ ๊ฒ.
[์ฐธ์กฐ]
์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ
'๐ป FrameWork(ํ๋ ์์ํฌ) > SpringBoot(์คํ๋ง๋ถํธ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์คํ๋ง ๋ถํธ์ @Conditional ์ด๋ ธํ ์ด์ (0) | 2024.08.08 |
---|---|
์คํ๋ง ๋ถํธ ์คํํฐ (0) | 2024.07.28 |