@Profile
- 빈이나, 컴포넌트에게 프로필을 구분하여 빈을 로드할 수 있음
@ActiveProfiles
- 테스트 수행 시 특정 빈만 로드하면서 테스트를 수행할 수 있음
서론
서버를 실행할 때는 아래와 같이 모두 몇 가지의 목적 있고 각기 다른 설정을 주고 싶을 수가 있다.
- 로컬로 애플리케이션을 구동한다. (인 메모리 DB 연결 및 요청에 맞는 파라미터 값)
- 테스트를 구동한다. (인 메모리 DB 연결 및 요청에 맞는 파라미터 값)
- 실제 운영을 하기 위한 배포를 한다. (실제 실무에 사용하는 DB 연결 및 요청에 맞는 파라미터 값)
이런 경우 사용하는 것이 @Profile이다.
해당 어노테이션을 알아보기 이전에 properties/yml 설정 파일을 살펴보며 profiles가 무엇인지 간략히 보자.
spring:
profiles:
active: local
---
spring:
profiles: local
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password:
---
spring:
profiles: prod
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:8080/db_name?serverTimezone=UTC&characterEncoding=UTF-8
username: sa
password:
위의 코드를 보면 하나의 파일에 여러개의 profiles에 대한 설정을 해준 것을 알 수 있다.
현재 설정은 맨 위의 local을 active 하고있다.(profile:local의 설정이 세팅되어 실행될 것이다.)
이런 것에 profiles이다.
@ActiveProfiles
테스트 수행 시에 어떤 profile을 사용할 것인지 정해주는 어노테이션이다.
@SpringBootTest
@ActiveProfiles("local")
class TestConfiguration {
@Autowired
Test test;
@Test
void testGetPlaceNo() {
System.out.println('test');
}
}
위와 같이 @ActiveProfiles("local")라고 붙였기 때문에, local profiles로 세팅되어 실행하게 된다.
처음에 살펴본 것을 보면 yml 파일에서는 한 파일에 여러 profiles들을 선언해 주었다.
이것은 다음과 같이 나눌 수가 있다.
이렇게 application-{profiles}.properties로 파일명을 붙여서 구분 가능하다.(yml도 가능)
사실 이 상태로 그냥 실행하게 되면 어떤 profiles를 사용해야 할지 모르기 때문에 runtime Error가 발생할 수 있다.
그래서 application.properties를 추가한 후에 spring.profiles.active=local을 추가해서 지정해줘야 한다.
테스트 코드에서 @ActiveProfiles를 사용한 경우에는 상관없다.
application.properties (profile이 없는 상태 = default)
아무런 profile을 작성하지 않을 경우 Spring boot는 default라는 기본 값을 사용한다.
그렇다고 하여 application-default.properties가 존재해야 한다는 것은 아니다.
profile이 없다면 application.properties를 가져온다.
스프링 부트 설정 = build.gradle 수정
- gradle bootRun 일 때 스프링 부트가 제공하는 spring.profiles.active를 적용받기 위해 아래와 같은 설정을 추가해 준다.
bootRun {
String activeProfile = System.properties['spring.profiles.active']
if (activeProfile == null) {
activeProfile = "local"
}
systemProperty "spring.profiles.active", activeProfile
}
gradle CLI
- cli 환경에서 세팅할 경우
gradle bootRun -Dspring.profiles.active=prod
# -Dspring.profiles.active=prod
# -Dspring.profiles.active=dev
# -Dspring.profiles.active=stage
참고
빌드할 때
(테스트 코드 실행 시 프로필 설정이 필요한 경우에만)
gradle build -Dspring.profiles.active=local
Jar 실행할 때
java -jar -Dspring.profiles.active=local [jar_name].jar
Jar 실행할 때 참고 예시
nohup java -jar -Dspring.profiles.active=prd Test-batch.jar > /dev/null 2>&1 &
'Java' 카테고리의 다른 글
[JS] localStorage & sessionStorage 비교 (0) | 2022.07.29 |
---|---|
[JS] JSON 값 넣는 방법 (0) | 2022.07.29 |
[알고리즘/Java] String(문자열) - 특정 문자 뒤집 (0) | 2022.07.24 |
[알고리즘/Java] String(문자열) - 단어 뒤집기 (0) | 2022.07.24 |
[Spring] RestTemplate 이란 무엇인가? (0) | 2022.07.24 |