실습을 진행하던 중 @ActiveProfiles 라는 어노테이션을 사용할 일이 있었다.
물론 여러가지 추가적인 절차는 필요했지만, 이 어노테이션 하나만 사용해줌으로 테스트를 아예 새로운 환경에서 진행할 수 있었다.
ActiveProfiles. 직역하면 프로필을 활성화한다는 것인데, 프로필? 생소하지만 생소하지 않은 단어이다.
자바 스프링에서의 프로필도 우리가 흔히 프로필이라는 이름으로 사용하듯, 본인 정보를 의미하는 것일까?
자바에서의 프로필은 무엇을 이야기하는 것일까?
@Primary 로 우선순위를 지정해주거나, 프로필별로 독립적인 빈을 생성해야 함public interface CustomMode {
public String printMode();
}
@Component
@Profile("dev")
public class DevMode implements CustomMode {
public String printMode() {
return "Now is the dev mode";
}
}
@Component
@Profile("test")
public class TestMode implements CustomMode {
public void printMode() {
return "Now is the test mode";
}
}
dev 프로필일 때, Devmode 빈만 활성화test 프로필일 때, TestMode 빈만 활성화@SpringBootTest
@ActiveProfiles("test")
public class CustomModeTest {
@Autowired
private CustomMode customMode;
@Test
void test() {
assertEquals(customMode.printMode(), "Now is the test mode");
}
}
test 프로필을 활성화customMode.printMode() 는 TestMode 클래스의 메서드를 호출application.yml 또는 application.properties 파일에서 환경별 설정을 정의application.yml 예제
# 공통 설정
spring:
profiles: dev
datasource:
url: jdbc:mysql://localhost:3306/common_db
username: sa
password:
# 개발 환경 (dev)
spring:
profiles: dev
datasource:
url: jdbc:mysql://localhost:3306/dev_db
username: dev
password:
# 테스트 환경 (test)
spring:
profiles: test
datasource:
url: jdbc:mysql://localhost:3306/test_db
username: test
password:
spring.profiles.active 를 사용해, 기본적으로 활성화할 프로필 지정default 프로필 활성spring.profiles 값의 변경을 통해 프로필 설정 변경dev 프로필이 활성화되며, test 프로필을 활성화 할 시의 설정 값도 지정💡 프로필 별
application.yml값 불러오기
application.yml 파일
spring:
profiles:
active: dev
spring:
profiles: dev
custom.msg: "dev mode message"
spring:
profiles: test
custom.msg: "test mode message"
Class 파일
@Component
public class CustomMode {
@Value("${custom.msg}")
private String msg;
public void printMsg() {
System.out.println(msg);
}
}
yml 의 profiles 선택에 따라 CustomMode 에서의 msg 이 변경@Value("${custom.msg}") 어노테이션으로, 설정 파일의 custom.msg 값을 가져옴dev 모드가 active 되어 있으므로, "dev mode message" 가 출력application.yml 파일을 먼저 읽음application-{profile}.yml 파일을 추가로 읽음{profile} : 활성화된 프로필 이름application-test.yml , application-dev.yml ...application-dev.yml 같은 프로필별 설정 파일의 값이 application.yml , 즉 기본 설정 파일의 값을 덮어씀@Profile 을 이용해 특정 프로필 별로 이용할 빈을 정의spring.profiles.active 를 사용해서 기본적으로 사용할 프로필 활성화default , 즉 기본 프로필 사용application.yml 설정 값 변경을 이용Environment 를 사용하여 현재 활성화된 프로필 확인 가능@Component
@RequiredArgsConstructor
public class CustomClass {
private final Environment environment;
public void printActiveProfiles() {
String[] profiles = environment.getActiveProfiles();
System.out.print("활성화된 프로필 : ");
for (String profile : profiles) {
System.out.print(profile + " ");
}
profiles = environment.getDefaultProfiles();
System.out.print("디폴트 프로필 : ");
for (String profile : profiles) {
System.out.print(profile + " ")
}
}
}
environment.getActiveProfiles() : 현재 활성화된 프로필 목록 반환environment.getDefaultProfiles() : 활성화된 프로필이 없을 때 사용할 디폴트 프로필 목록을 반환참고) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/