Home
>
Spring
>
๐[Spring] ์ธ์ `@Configuration`์ `@Bean`์ ํจ๊ป ์ฌ์ฉํ ๊น?
Spring
Framework
๐[Spring] ์ธ์ @Configuration
์ @Bean
์ ํจ๊ป ์ฌ์ฉํ ๊น?
-
@Configuration
๊ณผ @Bean
์ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ฐ ๊ธฐ๋ฐ์ ์ค์ ํด๋์ค ๋ฅผ ์ ์ํ ๋์
๋๋ค.
- ์ด ๋ฐฉ์์ ์๋์ผ๋ก ๋น์ ์ ์ํ๊ณ ์ค์ ๊ณผ์ ์ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ํนํ ์ธ๋ถ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ค์ ๋น์ผ๋ก ๋ฑ๋กํ๊ฑฐ๋, ๋น์ ์์ฑ๊ณผ ์ด๊ธฐํ ๊ณผ์ ์ ์ปค์คํฐ๋ง์ด์งํด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค.
1๏ธโฃ @Configuration
๊ณผ @Bean
์ ํจ๊ป ์ฌ์ฉํ๋ ์ฃผ์ ์ด์ .
1. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค์ ๋น ๋ฑ๋ก.
-
@Configuration
๊ณผ @Bean
์ ์ฌ์ฉํ๋ฉด ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค๋, Spring์ด ์ง์ ๊ด๋ฆฌํ์ง ์๋ ๊ฐ์ฒด๋ค์ ๋น์ผ๋ก ๋ฑ๋กํ ์ ์์ต๋๋ค.
- Spring์ ์๋ ์ค์บ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ํด๋์ค๋ง ๋์์ผ๋ก ํ๊ธฐ ๋๋ฌธ์, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ ์๋์ผ๋ก ๋น์ผ๋ก ๋ฑ๋กํด์ผ ํฉ๋๋ค.
2. ์ปค์คํ
๋น ์ด๊ธฐํ ๋ฐ ์ค์ .
-
@Bean
์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ๋น์ด ์์ฑ๋๋ ๋ฐฉ์์ ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค.
- ์์ฑ์ ํ๋ผ๋ฏธํฐ, ์ด๊ธฐํ ๊ณผ์ , ์์กด์ฑ ์ฃผ์
๋ฐฉ์ ๋ฑ์ ์ธ๋ถ์ ์ผ๋ก ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ด ์ค์ ์ Java ์ฝ๋๋ก ์์ฑํจ์ผ๋ก์จ XML ๊ธฐ๋ฐ ์ค์ ์ ๋์ฒดํ ์ ์์ต๋๋ค.
3. ๋ณต์กํ ๋น ์์ฑ ๋ก์ง ์ฒ๋ฆฌ.
- ๋น ์์ฑ ๊ณผ์ ์ด ๋ณต์กํ๊ฑฐ๋ ์ฌ๋ฌ ์์กด์ฑ์ ํ์๋ก ํ ๊ฒฝ์ฐ,
@Configuration
ํด๋์ค์์ ์ด๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค.
- ๋น ๊ฐ์ ์์กด์ฑ, ํน์ ์ํฉ์ ๋ฐ๋ฅธ ๋น ์์ฑ ๋ก์ง ๋ฑ์ ์๋ฐ ์ฝ๋๋ก ๋ช
ํํ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
4. XML ์ค์ ์ ๋์ฒด.
- Spring์ ๊ณผ๊ฑฐ์ XML ๊ธฐ๋ฐ ์ค์ ์ ์ฃผ๋ก ์ฌ์ฉํ์ง๋ง,
@Configuration
๊ณผ @Bean
์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ์ค์ ์ ์๋ฐ ์ฝ๋๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ์๋ฐ ๊ธฐ๋ฐ ์ค์ ์ ํ์
์์ ์ฑ์ ์ ๊ณตํ๋ฉฐ, ์ฝ๋์ ์ค์ ์ด ํ๋์ ํ์ผ ๋ด์ ํตํฉ๋์ด ์ ์ง๋ณด์ํ๊ธฐ ์ฌ์์ง๋๋ค.
2๏ธโฃ ์์
1. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋น ๋ฑ๋ก
- ์๋ฅผ ๋ค์ด, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
ํ(
HikariDataSource
)์ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ , ์ด๋ฅผ ์ปค์คํฐ๋ง์ด์งํ๋ ๊ฒฝ์ฐ์
๋๋ค.
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setMaximumPoolSize(10);
return dataSource;
}
}
-
@Configuration
- ์ด ํด๋์ค๊ฐ Spring์ ์ค์ ํ์ผ๋ก ์ฌ์ฉ๋๋ฉฐ, ๋น์ ์ ์ํ๋ ํด๋์ค์์ ๋ํ๋
๋๋ค.
-
@Bean
- ์ด ๋ฉ์๋๊ฐ ๋ฐํํ๋
HikariDataSource
๊ฐ์ฒด๋ ์คํ๋ง ์ปจํ
์ด๋์ ๋น์ผ๋ก ๋ฑ๋ก๋ฉ๋๋ค.
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ์ฒด์ด๋ฏ๋ก ์๋ ์ค์บ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ, ์ด๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํ๋ ๋ฐฉ์์
๋๋ค.
2. ๋ณต์กํ ๋น ์ด๊ธฐํ
- ๋ค์์ ์๋น์ค ๋น์ด ์ฌ๋ฌ ๊ฐ์ง ์์กด์ฑ์ ํ์๋ก ํ๊ณ , ๋น ์ด๊ธฐํ ๊ณผ์ ์์ ํน์ ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ์
๋๋ค.
@Configuration
public class AppConfig {
@Bean
public UserService userService(UserRepository userRepository, NotificationService notificationService) {
UserService userService = new UserService(userRepository);
userService.setNotificationService(notificationService); // ์ถ๊ฐ ์ค์
return userService;
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
@Bean
public NotificationService notificationService() {
return new EmailNotificationService();
}
}
- ์ด ์์์๋
UserService
๊ฐ ์ฌ๋ฌ ์์กด์ฑ์ ํ์๋ก ํ๊ณ , ํน์ ์ถ๊ฐ ์ค์ ์ด ํ์ํ ์ํฉ์ ์ฒ๋ฆฌํฉ๋๋ค.
-
Configuration
: ์ ํ๋ฆฌ์ผ์ด์
์ ์ค์ ํด๋์ค์์ ๋ช
์ํฉ๋๋ค.
-
@Bean
: UserService
, UserRepository
, NotificationService
๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ , ์์กด์ฑ์ ์๋์ผ๋ก ์ฃผ์
ํ๊ณ ์ถ๊ฐ ์ค์ ์ ํ ์ ์์ต๋๋ค.
3. ๋น ๊ฐ ์์กด์ฑ ๊ด๋ฆฌ.
-
@Configuration
ํด๋์ค์์ ๋น ๊ฐ์ ์์กด์ฑ์ ๋ช
ํํ๊ฒ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
- ๋ค์์ ์ฌ๋ฌ ๋น ๊ฐ์ ์์กด์ฑ์ ์ฒ๋ฆฌํ๋ ์์์
๋๋ค.
@Configuration
public class ServiceConfig {
@Bean
public UserService userService() {
return new UserService(userRepository());
}
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
}
- ์ฌ๊ธฐ์
UserService
๋ UserRepository
์ ์์กดํ๋ฉฐ, @Bean
๋ฉ์๋๋ฅผ ํตํด UserRepository
๋น์ ์ฐธ์กฐํฉ๋๋ค.
- ์คํ๋ง์ ์ด๋ฌํ ์์กด์ฑ์ ์๋์ผ๋ก ํด๊ฒฐํ์ฌ ๋น์ ๋ฑ๋กํฉ๋๋ค.
3๏ธโฃ ์ธ์ @Configuration
๊ณผ @Bean
์ ์ฌ์ฉํด์ผ ํ ๊น?
1. ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ์คํ๋ง์ด ์๋์ผ๋ก ๊ด๋ฆฌํ์ง ์๋ ํด๋์ค ๋ฑ๋ก
- ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํด๋์ค๋ ๋ค๋ฅธ ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ ๊ฐ์ฒด๋ค์ ๋น์ผ๋ก ๋ฑ๋กํด์ผ ํ ๋
@Configuration
๊ณผ @Bean
์ ํจ๊ป ์ฌ์ฉํฉ๋๋ค.
2. ๋ณต์กํ ๋น ์์ฑ ๋ก์ง์ด ํ์ํ ๋
- ๋น ์์ฑ ์ ์์กด์ฑ ์ฃผ์
์ธ์ ์ถ๊ฐ์ ์ธ ์ค์ ์ด ํ์ํ ๊ฒฝ์ฐ(ํน์ ๋ฉ์๋ ํธ์ถ, ๊ฐ์ฒด ์ด๊ธฐํ, ์ถ๊ฐ ์ค์ ๋ฑ)
@Bean
์ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๋น์ ์์ฑํ๊ณ , ์ด๋ฅผ ์ปค์คํฐ๋ง์ด์งํ ์ ์์ต๋๋ค.
3. ๋น ๊ฐ์ ๋ช
์์ ์์กด์ฑ ๊ด๋ฆฌ
- ์๋ก ์์กดํ๋ ๋น๋ค์ด ์์ ๋,
@Configuration
ํด๋์ค์์ ๋น์ ์์ฑ ์์์ ์์กด์ฑ์ ๋ช
์์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
4. ์ ์ฐํ ์ค์ ์ด ํ์ํ ๋
- ์ ํ๋ฆฌ์ผ์ด์
์ค์ ์ ์๋ฐ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ฉด์, ์กฐ๊ฑด๋ถ ๋น ์์ฑ, ํ๋กํ์ผ ๊ธฐ๋ฐ ๋น ๊ด๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ด ๋ ๋ณต์กํ๊ณ ์ ์ฐํ ์ค์ ์ด ํ์ํ ๋ ์ ์ฉํฉ๋๋ค.
4๏ธโฃ ๊ฒฐ๋ก
-
@Configuration
๊ณผ @Bean
์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์
์์ ๋น์ ์๋์ผ๋ก ๋ฑ๋กํ๊ณ ์ค์ ํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ด ๋ ์ด๋
ธํ
์ด์
์ ํจ๊ป ์ฌ์ฉํจ์ผ๋ก์จ ์คํ๋ง์ ์๋ฐ ๊ธฐ๋ฐ์ผ๋ก ๋น์ ์์ฑํ๊ณ ๊ด๋ฆฌํ ์ ์๊ฒ ๋๋ฉฐ, ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์คํ๋ง์ด ์๋์ผ๋ก ๊ด๋ฆฌํ์ง ์๋ ๊ฐ์ฒด๋ค๋ ๋น์ผ๋ก ๋ฑ๋กํ ์ ์์ต๋๋ค.
- ์ด๋ฌํ ๋ฐฉ์์ ํนํ ๋ ๋ณต์กํ ๋น ์์ฑ ๋ก์ง์ ํ์๋ก ํ๊ฑฐ๋ ์ธ๋ถ ๋ฆฌ์์ค์์ ํตํฉ์ด ํ์ํ ๋ ์ ์ฉํฉ๋๋ค.