99클럽 8일차 TIL: SpringBoot - Profile

2024. 4. 11. 16:3299클럽/TIL

728x90
반응형

#1. 오늘의 학습 키워드

자바스프링부트에서 같은 소스 코드로 여러 다른 환경에서 실행시키려 할 때, 각 환경에 맞게 환경변수를 주입하고 싶으면 어떻게 해야할까? - Profile

  • Loki 서버로 API 호출하는 Util 클래스를 만들고 배포하였을 때, Profile 과 연관 된 오류가 있었다.
    • Bean 등록과 @Profile 어노테이션 관련된 오류였다.
      • 컴파일 타임 및 기본 환경에서는 검출이 안 된 오류.
    • 해당 오류와 해결 과정은 따로 상세히 다뤄보겠다.
  • 과정에서 Profile 과 관련된 오류인 것을 깨닫고 다시 Profile에 대한 공부를 하였고, 다른 Profile로 로컬에서 실행을 해보았다.

#2. 공부한 내용

  • Profile
    • 환경에 따라 개발자가 의도한 설정파일을 소스코드가 바라보도록 도와주는 것이 Profile.
      • 해당 설정 파일 안에는 보통 원하는 환경과 매칭이 된 DB 커넥션 정보 등이 있다.
        • test 환경 → test DB
        • stage 환경 → stage DB
      • 유틸 개발 중이었던 Loki 서버와의 연결의 경우도, Loki 서버가 환경에 따라 달라지기에 Profile 설정 파일에 포함시켜야했다.
    • 생성할 환경마다 (필요하다면) Profile을 하나씩 생성한 후, 각 Profile 마다 하나의 yaml 파일을 가지게 된다.
      • application.yaml 에 사용할 Profiles 과 활성화 시킬 Profile을 명시해준다.
      • 그리고 각 Profile 마다 application-profile명.yaml 을 만들어서 datasource 등 각자 다르게 세팅하고 싶은 값들을 집어넣으면 된다.
  • spring.profiles.active
    • 현재 실행 중인 Profile 을 Bean 클래스 내 멤버 변수에 주입하고 싶다면:
@Value("${spring.profiles.active}")
private String profilesActive;
  • @Profile 어노테이션
    • 소스 코드 내부 Profile 에 따른 분기 처리를 원할 때 사용하거나, Config 설정을 할 때 사용 된다.
      • POJO 클래스에 Profile 하위에 직접적인 스프링 빈 관리:
        • @Profile(”test”)
          • test Profile에만 해당 스프링 빈 등록
        • @Profile(”!test”)
          • test Profile에만 해당 스프링 빈을 등록하지 않음
        • @Profile({”test”, “dev”})
          • test 및 dev Profile에만 해당 스프링 빈을 등록
@Component
@Profile("!test")
public class LokiUtil {

}
  • 로컬에서 여러 다른 Profile로 실행하는 방법 (intellij)
    • 우측 상단 Run/Debug Configuration 선택 후, Configuration 추가
      • Add new Configuration ( Alt + Insert)
        • Gradle 선택
    • Run 아래 블록에 bootRun 뒤에 option을 아래처럼 붙이면 된다
      • bootRun --args='--spring.profiles.active=test’
      • 여기서 test는 다르게 실행할 Profile의 명칭
    • 이때 구분을 위해 config의 이름을 app이름[bootRun / test] 이런식으로 저장하면 좋다.
    • 주의할 점은 만약 실행할 Profile의 .yaml 파일에 디비 커넥션 등이 로컬이 아니었을 경우, 로컬 .yaml 파일을 참조해 임시로 같은 커넥션으로 바꿔줘야한다.
      • 디비 커넥션이 존재하고 로컬이 아닐 경우 오류 발생 가능성이 있음.
  • 참조:

#3. 오늘의 회고

  • 스프링 부트에서 Profile 을 활용하므로써, 여러 환경에서 같은 애플리케이션을 쉽게 구성하고 관리할 수 있게 된다.
    • 즉, 각 환경에 따라 다른 세팅 값으로 애플리케이션이 구동되는 걸 원할 때, 환경에 따라 불필요한 코드 변경이 생기지 않아도 된다.
    • 또한 Profile과 yaml 파일 적용에 대한 처리는 소스코드에서 이뤄지므로, 배포 과정을 간소화할 수 있다.
    • → Profile 덕분에 어플리케이션의 유연성과 확장성이 크게 향상된다.
  • Profile에 대한 부분은 개발에 있어서 설정에 가깝다고 느껴질 수도 있다. 비즈니스 로직을 구현하는 작업이 아닌 환경에 따른 세팅을 하는 것이기 때문이다. 그러나 이러한 작업 없이는 불필요한 로직 코드를 훨씬 많이 구현해야 됐을 수도 있기에, Profile을 사용하는 것은 스프링 부트 개발에서 필수적인 부분이라고 느껴진다.
728x90
반응형