ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 멀티모듈 시행착오
    카테고리 없음 2025. 7. 31. 21:44

     

    Spring Boot의 프로필(Profile) 기능

    특정 프로필이 활성화되었을 때만 해당 설정을 적용

     

       1. Spring Profile 이란?

           * 애플리케이션을 실행하는 환경(예: 로컬 개발, 개발 서버, 운영 서버)마다 다른 설정을 적용해야 할 때가 많습니다.

           * 예를 들어,

               * 로컬 환경(`local`): 내 컴퓨터의 데이터베이스에 접속하고, 서버 포트는 8080을 사용.

               * 개발 환경(`dev`): 팀이 공유하는 개발용 데이터베이스에 접속하고, 포트는 8090을 사용.

               * 운영 환경(`prod`): 실제 서비스용 데이터베이스에 접속하고, 로그 레벨을 더 높게 설정.

           * 이렇게 환경별로 설정 파일을 분리하여 관리할 수 있게 해주는 기능이 바로 Spring Profile입니다.

     

       2. `application.yml`에서의 프로필 설정

           * 과거에는 application-local.yml, application-prod.yml 처럼 여러 파일을 만들어서 관리했습니다.

           * Spring Boot 2.4 버전부터는 --- 구분자를 사용하여 하나의 application.yml 파일 안에 여러 프로필 설정을 함께 넣을 수 있게 되었습니다.

           * 이때 어떤 설정 블록이 어떤 프로필에 해당하는지를 지정하는 것이 바로 spring.config.activate.on-profile 입니다.

     

     

     

     

    스프링 어플리케이션 실행 시 해당 프로필이 적용되지 않는 문제

    인텔리제이 유료버전은 상단에 실행설정에 Edit Configuration 눌러서 Active profiles에 입력해주면 되는데

    나는 커뮤니티 버전이라서

    똑같이 컨피그에 들어간 후

    Modify options - Add VM options - '

    -Dspring.profiles.active=local

    '

    입력해서 local 프로필을 활성화했음.

     

     

     왜 멀티모듈에서 이런 문제가 발생할까?

    Spring Boot는 애플리케이션이 실행될 때, 실행되는 모듈(executable module)의 `classpath`에서 application.yml 또는  application.properties 파일을 찾습니다.

     

    멀티모듈 프로젝트에서는 보통 다음과 같은 구조로 나뉩니다.

       * `api` 또는 `app` 모듈: 실제 @SpringBootApplication 어노테이션과 main 메소드가 있어서 실행을 담당하는 모듈.

       * `core` 또는 `domain` 모듈: 공통 로직, 엔티티, 비즈니스 규칙 등이 담긴 라이브러리 성격의 모듈. api 모듈이 이 모듈을 의존성으로 포함합니다.

     

    문제의 핵심은, 사용자가 `application.yml` 파일을 `core` 같은 라이브러리 모듈에 두었을 때 발생합니다.

    api 모듈을 실행하면, Spring Boot는 api 모듈의 src/main/resources 폴더만 직접적으로 탐색합니다. core 모듈의 resourcescore.jar 파일 안에 패키징되어 포함되기 때문에, Spring Boot가 시작 시점에 기본적으로 읽는 설정 파일 위치로 간주하지 않습니다.

     

     

Designed by Tistory.