[Spring] EnvironmentCapable - Profile ์ฌ์ฉํ๊ธฐ
Spring์ ApplicationContext๋ BeanFactory ๊ธฐ๋ฅ๋ง ํ๋๊ฑด ์๋๋ค.
ApplicationContext๊ฐ ์์๋ฐ๋ ๋ค์ํ ์ธํฐํ์ด์ค๋ค ์ค EnvironmentCapable ์ธํฐํ์ด์ค๋ 'Profile(ํ๋กํ์ผ)' ์ด๋ผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Profile(ํ๋กํ์ผ)์ ๊ฐ๋
ํ๋กํ์ผ = ๋น๋ค์ ๋ฌถ์
ํ๋กํ์ผ์ ํน์ ์คํ ํ๊ฒฝ์์ ์ฌ์ฉํ ๋น๋ค์ ๋ฌถ์์ด๋ค.
ํ ์คํธ ํ๊ฒฝ์์ ์ฌ์ฉํ ๋น ๋ฌถ์๊ณผ ํ๋ก๋์ (์ด์) ํ๊ฒฝ์์ ์ฌ์ฉํ ๋น ๋ฌถ์์ด ์๋ก ๋ค๋ฅผ ์ ์๋ค.
๋ ๊ฐ ํ๊ฒฝ์ ๋ฐ๋ผ ์๋ก ๋ค๋ฅธ ๋น๋ค์ ์จ์ผํ๋ ๊ฒฝ์ฐ, ํน์ ํ๊ฒฝ์์๋ง ๋ฑ๋กํด์ผํ๋ ๋น๋ค์ด ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค.
ํ๋กํ์ผ์ ๊ทธ๋ฌํ ์๊ตฌ์ฌํญ์ ์ถฉ์กฑํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
ํ๋กํ์ผ ํ์ธํ๊ธฐ - Environment
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext ctx;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println(Arrays.toString(environment.getActiveProfiles()));
System.out.println(Arrays.toString(environment.getDefaultProfiles()));
}
}
|
cs |
ApplicationContext์ getEnvironment()๋ก Environment ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
๐ Environment์ ์ญํ
ํ์ฑํ ํ ํ๋กํ์ผ ํ์ธ ๋ฐ ์ค์
์คํ ๊ฒฐ๊ณผ
Environment์ getActiveProfiles()๋ก ํ์ฌ activeํ ํ๋กํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์๊ณ getDefaultProfiles()๋ก๋ ์ด๋ค ํ๋กํ์ผ์ด๋ ์๊ด ์์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฉ๋๋ ํ๋กํ์ผ์ ๊ฐ์ ธ์จ๋ค.
ํ๋กํ์ผ ์ ์ํ๊ธฐ - @Configuration ํด๋์ค์ ์ ์
ํ๋กํ์ผ์ @Profile ์ ๋ ธํ ์ด์ ์ผ๋ก ์ ์ํ ์ ์์ผ๋ฉฐ ํด๋์ค, ๋ฉ์๋์ ๋ถ์ผ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ ๋น ์ค์ ํ์ผ์ ์๋ก ์์ฑํด๋ณด์.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
@Profile("test")
public class TestConfiguration {
@Bean
public BookRepository bookRepository() {
return new TestBookRepository();
}
}
|
cs |
@Profile("test")์ ๊ฐ์ด ์ง์ ํด์ค์ผ๋ก์จ ์ด ๋น ์ค์ ํ์ผ์ test ํ๋กํ์ผ์ผ๋๋ง ์ฌ์ฉ๋๋ค.
์ฆ test ํ๋กํ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ง ์์ผ๋ฉด ์ด ๋น ์ค์ ํ์ผ์ด ์ ์ฉ๋์ง ์๋๋ค.
ApplicationRunner์์ ์ ์ค์ ํ์ผ์ ๋ฑ๋ก๋ ๋น์ ์ฃผ์ ๋ฐ์ผ๋ ค๊ณ ํด๋ณด์.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.context.ApplicationContext;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.util.Arrays;
@Component
public class AppRunner implements ApplicationRunner {
@Autowired
ApplicationContext ctx;
// BookRepository๋ฅผ ์ฃผ์
๋ฐ์ ์ ์๋ค.
@Autowired
BookRepository bookRepository;
@Override
public void run(ApplicationArguments args) throws Exception {
Environment environment = ctx.getEnvironment();
System.out.println(Arrays.toString(environment.getActiveProfiles()));
System.out.println(Arrays.toString(environment.getDefaultProfiles()));
}
}
|
cs |
์คํ ๊ฒฐ๊ณผ
BookRepository ํ์ ์ ๋น์ ์ฐพ์ ์ ์๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
test ํ๋กํ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ง ์์์ผ๋ฏ๋ก BookRepository ๋น์ ๋ฑ๋กํ ์ค์ ํ์ผ์ด ์ฝํ์ง ์์๊ณ ๋ฐ๋ผ์ BookRepository ๋น๋ ๋ฑ๋ก๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๋กํ์ผ ์ค์ ํ๊ธฐ
1) Active profiles ์ค์
IDE์ ์คํ ํ๊ฒฝ ์ค์ ์์ Active profiles์ ํ๋กํ์ผ์ ์ค์ ํ๋ค.
2) VM Options ์ค์
Active profiles ์ค์ ํญ๋ชฉ์ด ์์ ๊ฒฝ์ฐ VM options์ ์ค์ ํด๋ ๋๋ค.
-Dspring.profiles.active="ํ๋กํ์ผ1,ํ๋กํ์ผ2,ํ๋กํ์ผ3,..."
IDE์์ active profiles์ 'test'๋ก ์ค์ ํ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ์คํํด๋ณด์.
์๋ฌ๊ฐ ๋ฐ์ํ์ง ์๊ณ ์ ์์ ์ผ๋ก ์คํ๋๋ฉฐ getActiveProfiles()๋ก test๊ฐ ์ถ๋ ฅ๋๋ค.
Active profile์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ์์์ผ๋ฏ๋ก ๋๋จธ์ง ํ๋กํ์ผ ์ ์ ๋ฐฉ๋ฒ์ ์์๋ณด์.
ํ๋กํ์ผ ์ ์ํ๊ธฐ - ๋๋จธ์ง ๋ฐฉ๋ฒ๋ค
1) @Bean ๋ฉ์๋์ ์ ์
@Bean ๋ฉ์๋์ @Profile์ ๊ฐ์ด ๋ถ์ฌ์ ์ ์ํ ์ ์๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
|
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@Configuration
public class TestConfiguration {
@Bean @Profile("test")
public BookRepository bookRepository() {
return new TestBookRepository();
}
}
|
cs |
2) @Component ํด๋์ค์ ์ ์
@Component ํด๋์ค์ @Profile์ ๊ฐ์ด ๋ถ์ฌ์ ์ ์ํ ์ ์๋ค.
1
2
3
4
5
6
7
|
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Repository;
@Repository
@Profile("test")
public class TestBookRepository implements BookRepository {
}
|
cs |
References
์ธํ๋ฐ - ๋ฐฑ๊ธฐ์ ๋์ ์คํ๋ง ํ๋ ์์ํฌ ํต์ฌ ๊ธฐ์
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Spring ์ดํ๋ฆฌ์ผ์ด์ ๋ฉ์์ง ๋ค๊ตญ์ด ๋ฐ ์ฌ๋ก๋ฉ ์ฒ๋ฆฌ (0) | 2020.03.04 |
---|---|
[Spring] EnvironmentCapable - Property ์ฌ์ฉํ๊ธฐ (0) | 2020.03.04 |
[Spring] ๋น์ Scope - ์ฑ๊ธํค๊ณผ ํ๋กํ ํ์ (0) | 2020.03.03 |
[Spring] Component Scan๊ณผ Function์ ์ฌ์ฉํ ๋น ๋ฑ๋ก ๋ฐฉ๋ฒ (1) | 2020.03.02 |
[Spring] @Autowired ๋์ ์๋ฆฌ - BeanPostProcessor (0) | 2020.03.01 |
๋๊ธ