Profile

์„œ๋น„์Šค ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ(dev, prod) ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์—๋Š” Profile๊ณผ Property๊ฐ€ ์žˆ๋‹ค.

์ •์˜

์„œ๋น„์Šค ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐœ๋ฐœ ์‹œ์™€ ๋ฐฐํฌ ์‹œ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๊ฐ๊ฐ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์ด๋ฅผ ํ™˜๊ฒฝ๋งˆ๋‹ค ์ˆ˜๋™์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ˆ˜๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์—, Spring์—์„œ๋Š” Profile์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ์‰ฝ๊ฒŒ ์„ค์ • ์ •๋ณด๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

Profile ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด, ๋ณ„๋„์˜ ์„ค์ •(Configuration)์„ ์ด์šฉํ•˜์—ฌ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์šฉ๋ฒ•

๋‹ค์Œ๊ณผ ๊ฐ™์ด @Profile ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•ด ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.

@Configuration
@Profile("dev")
public class DsDevConfig {

	... ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค

}
@Configuration
@Profile("prod")
public class DsProdConfig {

	... ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค

}

์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์ „ ์‚ฌ์šฉํ•  ํ”„๋กœํ•„์„ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค. ์•„๋ž˜์˜ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

public class MyConfigClass {

	AnnotationConfigApplicationContext context =
		new AnnotationConfigApplicationContext();
	context.getEnvironment().setActiveProfiles("dev"); // dev ํ”„๋กœํ•„ ํ™œ์„ฑํ™”
	context.register(MyConfigClass.class, DsDevConfig.class, DsProdConfig.class);
	context.refresh(); // ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”

}

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœํ•„์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœํ•„๋ช…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.

context.getEnvironment().setActiveProfiles("dev", "mysql"); // dev ํ”„๋กœํ•„ ํ™œ์„ฑํ™”

๋˜๋Š” ํ”„๋กœํ•„์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ช…์‹œํ•˜๋ฉด ๋œ๋‹ค.

@Configuration
@Profile("prod,test") // ํ”„๋กœํ•„๋ช…์œผ๋กœ "prod" ๋˜๋Š” "test"๊ฐ€ ์„ ํƒ๋  ์‹œ ํฌํ•จ๋˜๋Š” ์„ค์ •๋“ค
public class DsProdConfig {

	... ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค

}

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋””ํดํŠธ ํ”„๋กœํ•„(ํ”„๋กœํ•„ ์„ ํƒ๋ฌธ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ ์šฉํ•  ํ”„๋กœํ•„)์„ ์ง€์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

@Configuration
@Profile("!dev") // !๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ธฐ๋ณธ ํ”„๋กœํ•„ ์ง€์ •
public class DsProdConfig {

	... ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํ•„์š”ํ•œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋“ค

}

Last updated