Spring Boot 프로젝트를 진행하다 보면 가끔 드는 생각중 하나는
단발성으로 한번만 실행하고 싶은 코드들의 모음들은 어떻게 단발성으로만 실행할 수 있을까? 라고 생각합니다.
저도 가령 dummy data를 넣는 과정을 코드로 작성하면, 서버를 실행할때 한번만 실행하고 주석처리를 한다던가....
이런 과정을 반복했던 적이 있는데요!!
이러한 부분에서 활용할 수 있는 설정중 하나는 Profile을 설정해서 활용하는 방안이라고 생각합니다.
Spring Boot Profile이란?
Spring 프레임워크에서 애플리케이션 설정을 환경별로 다르게 관리할 수 있게 해주는 기능입니다.
이를 활용하면 개발, 테스트, 프로덕션 환경 등 다양한 환경에 맞추어 설정을 손쉽게 전환할 수 있습니다.
그리고 환경에 따라 다른 속성 파일, 빈 구성, 컴포넌트를 로드할 수 있습니다.
이번 Profile설정에서는 application.yml파일 내에서 구성하는 방법에 대해서 설명드리겠습니다...!!
저는 해당 Profile설정을 활용하여, 서버 시작과 동시에 dummy data들을 DB에 넣어주는 파일을 실행하게 설정하겠습니다.
일단 InitDB 파일을 프로젝트 java 패키지안에 생성하고, 안에 내용을 다음과 같이 구성해줍니다.
(DB에 data를 먼저 넣는 작업 뿐만 아니라, 원하시는 용도에 따라(ex) 초기화 작업, 속성 파일 로드 등등,,) 활용해 주시면 됩니다!!!)
파일 생성
@Component
@Profile("dev")
@RequiredArgsConstructor
public class InitDB {
private final TestRepository testRepository;
@PostConstruct
public void dataInsert() {
...
List<Test> tests = new ArrayList<>();
for(Test test : tests) {
testRepository.save(test);
}
...
}
}
여기서 @Profile("dev")라는 설정은 Profile이 dev로 실행될 때만 활성화 시키는 annotation입니다.
추가로 @PostConstruct는 메서드 위에 적용되며, 해당 메서드는 빈 초기화가 완료된 후 자동으로 호출되게 만들어줍니다.
즉 Spring 컨테이너가 빈을 생성하고, 필요한 의존성을 주입한 후, @PostConstruct가 붙은 메서드를 실행하게 만들어줍니다.
application.yml 파일 설정
spring:
profiles:
active: dev
---
spring:
config:
activate:
on-profile: prod
datasource:
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
driver-class-name: org.mariadb.jdbc.Driver
---
spring:
config:
activate:
on-profile: dev
datasource:
url: ${DB_URL}
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
driver-class-name: org.mariadb.jdbc.Driver
...
spring: config:로 시작하는 하단 두개는 각각 prod 개발환경과 dev개발환경에 대한 설정입니다.
그리고 제일 위에 있는 profiles: active: dev는 dev개발 환경으로 활성화된 Profile이 무엇인지 지정하는 부분입니다.
즉 결론적으로 위와 같이 작성하면, dev profile을 활성화시켜, 실행하겠다는 의미입니다.
Program Argument 설정
마지막 설정은 Edit Configuration에서 Modify options에 있는 설정들 중, Program arguments 설정입니다.
program arguments 설정은 아래와 같이 합니다.
—spring.profiles.active=prod
해당 설정은 애플리케이션을 실행할 때 활성화할 profile을 dev로 지정하는걸 뜻합니다.
이 설정을 통해 애플리케이션은 최종적으로 application.yml에서 설정을 로드하고 적용하게 됩니다.
이처럼 단발성 혹은, 다른 환경에서 실행되어야 할 코드들 또는 파일들이 있다면, 이처럼 profile 설정을 통한 빌드도 하나의 방법일 수 있습니다. 아직까지 활용할 수 있는 범위는 적지만, 좀 더 연구하여 유용하게 사용해보도록 노력해야 겠습니다...!!
'Spring' 카테고리의 다른 글
Spring Batch (0) | 2024.09.22 |
---|---|
Spring Batch - Scheduler (1) | 2024.09.16 |
Spring Batch란? (1) | 2024.09.09 |
Spring Boot 회원가입 - 이메일(SMTP) 인증 구현하기 (0) | 2024.07.28 |
Spring 카카오 로그인 구현하기(Spring Security + OAuth2 + JWT) (0) | 2024.07.08 |