springboot profiles

2024. 3. 3. 13:55OpenSource/Spring Boot

반응형

profiles? 

이녀석은 언제 사용하는가?
바로 우리가 만든 어플리케이션을 환경에 따라 기동을 시킬때 필요한 내용 입니다.

환경에 따라 기동을 한다는건 로컬에서 실행을하거나 개발서버에서 실행을 한다거나 할때
즉, 개발환경 dev, staging, prod(real)을 뜻 합니다.

보통 배포를 할 때 필요합니다.
로컬에서 개발하다가 개발환경으로 올려서 테스트 하기 위해 배포할 때(혹은 prod)
로컬과 개발환경은 구분되어야 합니다.

여기서 구분되어야할 것은 db설정 같은 정보 입니다.


profiles 구성 방법

첫번째 profiles는 보통 하나의 application.yaml에서 구분해서 가져오거나 
두번째 application.yaml 즉, 파일 자체를 구분해서 가져올수 있는 방법 2가지 정도로 보시면 됩니다.
(예. application-local.yaml application-dev.yaml, application-prod.yaml)


첫번째 방법
하나의 application.yml파일에서 나누기

2016.07.18 - [OpenSource/Spring Boot] - spring boot 환경 나누기(profiles)

2016년에 작성한 내용이 있군요 ㅎㅎ 참고하시면 좋을것 같습니다.

$ java -jar -Dspring.profiles.active=production demo-0.0.1-SNAPSHOT.jar

-D옵션으로 자바를 실행시킬때 환경변수를 넣어줍니다.
inteliJ에서는 아래와 같이 Active profiles에 넣어주면 됩니다.

server:
  port: 0
---
spring:
  config:
    activate:
      on-profile: "dev"
server:
  port: 9000
---
spring:
  config:
    activate:
      on-profile: "prod"
server:
  port: 9001

prod로 설정을 해주면 9091포트로 톰캣이 실행 됩니다.
dev로 설정을 해주면 9000포트로 톰캣이 실행 되겠죠? ㅎㅎ

두번째로 파일의 경우 
application-{profile}.yml 의 스타일로 yml파일을 만들어 줍니다.

application.yml의 경우는

---
spring:
  profiles:
    default: "prod"

이렇게 default: "prod"로하면 active profiles에 아무것도 넣지 않으면 prod의 파일
즉,  application-prod.yml의 내용이 반영됩니다.(default가 prod)
물론 prod를 넣어도 마찬가지입니다.
dev를 넣으면 application-dev.yml의 내용이 반영됩니다.

파일의 경우는 application.yml를 삭제해도 됩니다.
default 설정이라던지 공통적인 설정이 필요하면 넣어주는 용도의 파일로 생각하시면 될것 같습니다.

결론적으로 파일은 active profiles 설정변수(profile)를 가지고 application-{profile}.yml 스타일의 파일을 찾습니다.

그리고 하나의 파일에서 profiles를 분기를 시킬 것이냐 파일별로 분기를 시킬것이냐는 장단점이 있습니다.
복잡한 설정이 없고 단순하다면 application.yml 파일에서 설정하는게 좋다고 생각합니다.
하지만 설정들이 많고 복잡하다면 휴먼에러가 있을수 있기 때문에 파일별로 관리하는게 더 좋다고 생각합니다.

프로젝트별 상황에 맞게 결정해서 사용하면 됩니다.

이상 springboot profiles 설정 2가지 방법에 대해서 알아보았습니다:)

즐프하세요~~

참고 : https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.profiles

반응형