개요 목적
SpringBoot 설정 파일의 다야한 기능을 활용해서 개발 친화적인 프로젝트 만드는 방법을 알아본다.
알아볼 설정 파일 기능으로는
- Profiles 나누기
- profile별로 나누는 서비스 개발 환경 종류
- gradle bootrun으로 profile별 실행 방법
- 설정 파일 환경 변수 가져오기
- 설정 파일 자체를 분리하기
- spring.profiles.group을 통해 profile 그룹 분리하기
Profile 나누기
로컬 환경 실제 배포 환경에 따라 사용할 설정이 다를 때 Profile을 통해서 설정 정보를 편리하게 나눌 수 있다. 실행 시점에만 어떤 profile을 설정하는 지 선택하면 해당 설정 정보를 사용할 수 있다.
Profile을 나누는 방법은 spring.config.activate.on-profile 설정을 통해서 원하는 profile 이름을 작성을 적고 그 아래 해당 설정 정보를 적으면 된다. 그리고 —- 을 통해 profile간 구분을 명시하면 된다.
#profile이 설정되지 않은 맨 위에 부분은 모든 Profile에 공통 설정 부분이다
spring:
jpa:
open-in-view: false
#이런식으로 ---를 통해 profile별 구분을 나누고 원하는 profile 이름과 설정 정보를 아래에 작성한다.
---
spring:
config:
activate:
on-profile: local
server:
port: 1111
---
spring:
config:
activate:
on-profile: server
server:
port: 9999
profile별로 나누는 서비스 개발 환경 종류
profile별로 설정하는 서비스 각 개발 단계 종류와 특징에 대해서 알아본다.
- Local
Local은 각자 개발자 PC에서 개발 및 테스트를 하는 것이다. 여기서 주의할 점은 프로젝트에 참여하는 개발자들은 같은 환경을 설정해야 하는 것이다. Jdk 버전 같은.
- Develope
나의 Local에서는 개발을 완료했고, 다른 사람들이 내 프로젝트를 사용할 때, 설정해 놓는 설정이다. 개발자들이 만든 코드를 합쳐서 서버 환경에서 테스트 해볼 수 있는 환경이다.
- Beta
테스트 환경을 위한 설정이다. Develope와 같이 사용하기도 한다.
- RC
실제 서비스를 배포 하기 전에, 최종적 테스트를 해볼 수 있는 환경을 설정한다.
- Production(실제 서비스 환경)
- Canary (테스트 계정이나 몇 명의 유저에게만 서비스를 적용해본다)
- Stage(일부 유저에게만 공개 하면서 상황 지켜보기)
- Real (모든 유저에게 배포한다)
gradle bootrun에 profile별 적용하기
- 먼저 build.gradle 파일을 수정을 해준다.
bootRun {
String activeProfile = System.properties['spring.profiles.active']
systemProperty "spring.profiles.active", activeProfile
}
아래의 설정을 최하단에 넣어준다.
- gradle bootRun -Dspring.profiles.active=db-mysql
cli를 작동 시켜서 원하는 profile을 선택하여 gradle bootrun을 실행할 수 있다.
설정 파일 환경 변수 가져오기
profile별로 다른 환경 변수를 스프링 부트 설정 파일에 넣고 사용하면 개발의 편리성이 올라간다.
코드 예시를 통해서 환경 변수 값을 저장, 가져오는 방법을 알아보자.
<환경 변수 저장>
spring:
config:
activate:
on-profile: local
server:
name: local-server
---
spring:
config:
activate:
on-profile: development
server:
name: development-server
<실제 코드에서 환경 변수 사용>
이런 식으로 @Value를 사용하여 원하는 설정 정보를 작성하여 환경 변수를 가져올 수 있다.
: default-server 작성을 통해 값이 존재하지 않을 때 기본 값을 설정할 수 있다.
@Service
public class Service {
@Value("${value.test: default-server}")
private String test;
public Service() {
System.out.println(test);
}
}
설정 파일 자체를 분리
Kafak같은 외부 서버와 통신할 때 설정 정보가 굉장히 복잡하다. 이런 설정 정보를 하나의 파일에 넣게 되면 한눈에 설정 파일 정보를 확인하기가 어렵다 그래서 설정 파일 자체를 분리하고 첨부하는 식으로 이 문제를 해결할 수 있다.
실제 설정 파일 코드를 보면서 방법을 알아보자.
#application.yml
#파일 config.import에 추가하고 싶은 설정 파일을 추가하면 된다.
spring:
config:
import: kafka.yml
#kafka.yml 파일
#분리된 kafka 파일을 첨부하여 하나의 설정 파일에 적용할 수 있다.
spring:
config:
activate:
on-profile: local
kafka:
producer:
bootstrap-servers: 127.0.0.7:9093
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
---
spring:
config:
activate:
on-profile: server
kafka:
producer:
bootstrap-servers: 10.0.2.7:9092
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
spring.profiles.group을 통해 profile 그룹 설정
spring.profiles.group을 통해 분리된 설정 파일의 profile들을 하나의 group으로 지정하여 사용할 수 있다.
db와 kafka 설정 파일 내부에 있는 여러 profile들을 하나의 그룹으로 설정하기
#application.yml
spring:
profiles:
active:
- local
group:
local:
- db-local
- kafka-local
dev:
- db-dev
- kafka-dev
include:
- db
- kafaka
- spring-profiles-active : 기본적으로 활성화할 profile을 local로 설정한다.
- spring-profiles-group profile group 을 정의한다.
- local : profile이 local일 경우 db-local, kafka-local 의 profile과 그룹을 정의
- dev : profile이 local일 경우 db-dev, kafka-dev 의 profile과 그룹을 정의
- spring-profiles-include 설정을 통해 어플리케이션을 실행할 때 profile을 포함한다.
Reference
https://zzang9ha.tistory.com/415
https://velog.io/@beenz/Spring-Boot에서-application.properties-값을-객체에-저장하는-2가지-방법
https://lejewk.github.io/springboot-gradle-spring-profiles-active/
'Web Sever 개발과 CS 기초 > 스프링' 카테고리의 다른 글
ORM과 JPA, 영속성 쉽게 이해하기 (0) | 2022.12.11 |
---|---|
DB Connection Pool 필요성, Hikari CP 알아보기 (0) | 2022.12.11 |
@ExceptionHandler, @ControllerAdvice를 사용한 예외를 원하는 Response 처리 (0) | 2022.11.12 |
RFC7807가 제시한 오류 메시지 생성하기 (0) | 2022.11.07 |
Spring MVC 구조와 사용법 (0) | 2022.09.24 |