[Spring] Maven profile 이용한 환경별 (local, dev, prod) 빌드 및 설정 분리

2025. 7. 23. 19:20·Back end/Spring Project
반응형

서비스를 운영하다 보면 로컬, 개발(dev), 운영(prod) 환경에 따라

서로 다른 설정 파일을 사용해야 할 때가 많습니다.

 

이럴 때 Maven의 profile 기능을 활용하면,

환경별로 유연하게 빌드 설정을 관리할 수 있습니다.

 

이 글에서는 Maven Profile을 활용해 환경별 설정을 관리하는 방법과 함께,
리소스 경로를 유동적으로 지정하고 환경에 맞는 설정 파일을 로드하는 방법까지 살펴보겠습니다.


💡 기본 구조

1️⃣ 설정 파일이 기본 리소스 디렉터리에 존재할 경우

- 파일명에 -dev, -prod 등의 프로파일명이 포함되어 있어야 자동 로드됩니다.

src/main/resources/
 ├─ application.properties
 ├─ globals-dev.properties   ✅
 └─ globals-prod.properties  ✅

2️⃣ 설정 파일이 별도 경로에 존재할 경우

- 경로는 달라도 파일명은 동일하게 유지할 수 있습니다.

📌 이 경우, 해당 디렉터리를 Maven classpath에 포함시켜야 합니다.

- pom.xml의 에 다음과 같이 리소스 경로를 추가합니다.

<build>
    <resources>
        <resource>
            <directory>${basedir}/src/main/resources</directory>
        </resource>
        <resource>
            <directory>${basedir}/profiles/${env}/resources</directory>
        </resource>
    </resources>
</build>

💡 Maven profile이란?

Maven의 는 환경에 따라 컴파일 옵션, 환경 변수, 속성 값 등을 다르게 지정할 수 있도록 도와주는 기능입니다.


🏠 로컬(local) 환경

로컬 개발자 환경에서는 별도 옵션 없이도 dev 프로파일이 활성화되도록
activeByDefault 를 true로 지정합니다.

📄 pom.xml 예시

<profiles>
    <!-- 개발환경 -->
    <profile>
        <id>dev</id>
        <properties>
            <env>dev</env>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
    <!-- 운영환경 -->
    <profile>
        <id>prod</id>
        <properties>
            <env>prod</env>
        </properties>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
    </profile>
</profiles>

📌 이렇게 설정하면 로컬에서 mvn clean install만 실행해도 자동으로 dev 환경이 적용됩니다.


⚙️ 빌드 및 실행 방법

✅ 로컬 개발 (기본값)

mvn clean package
  • 기본적으로 dev 프로파일이 활성화됩니다. (activeByDefault)

✅ 프로파일 명시 실행

mvn clean package -P prod
mvn clean package -P dev

이렇게 설정하면 Maven은 해당 profile을 활성화하고,
spring.profiles.active 값을 dev 또는 prod로 전달하게 됩니다.


🗂️ Spring Boot 설정 연동

application.properties 또는 application.yml에 다음과 같은 설정을 추가합니다.

spring.config.import=classpath:globals-${spring.profiles.active}.properties

📌 예를 들어

  • spring.profiles.active=dev이면 globals-dev.properties
  • spring.profiles.active=prod이면 globals-prod.properties

가 자동으로 로드됩니다.


🧪 현재 활성화된 profile 확인하는 방법

import org.springframework.core.env.Environment;

@Autowired
Environment env;

@PostConstruct
public void printActiveProfile() {
    System.out.println("✅ 활성화된 프로파일: " + Arrays.toString(env.getActiveProfiles()));
}

로컬에서 실행하면 콘솔에 다음처럼 출력됩니다.

✅ 활성화된 프로파일: [dev]

Maven profile 기능을 활용하면 코드 변경 없이
환경별 빌드 설정을 안전하게 분리할 수 있습니다.

 

특히 설정 파일의 경로를 유동적으로 관리하면,
하나의 프로젝트 구조 내에서도 환경마다 유연하게 설정을 유지할 수 있습니다.

 

🙌 🙌

반응형

'Back end > Spring Project' 카테고리의 다른 글

[Spring] JPA flush  (0) 2025.08.14
[Spring] JPA 기본 CRUD 동작 예제  (0) 2025.08.13
[Spring] BeanFactory와 ApplicationContext  (0) 2025.07.17
[Spring] AnnotationConfigApplicationContext로 알아보는 스프링 컨테이너 생성 과정  (0) 2025.07.15
[Spring Project] 겨울을 지나 봄으로: 스프링의 등장 배경과 개념  (0) 2025.05.12
'Back end/Spring Project' 카테고리의 다른 글
  • [Spring] JPA flush
  • [Spring] JPA 기본 CRUD 동작 예제
  • [Spring] BeanFactory와 ApplicationContext
  • [Spring] AnnotationConfigApplicationContext로 알아보는 스프링 컨테이너 생성 과정
Kim-SooHyeon
Kim-SooHyeon
개발일기 및 알고리즘, 블로그 운영에 대한 글을 포스팅합니다. :) 목표: 뿌리 깊은 개발자 되기
    반응형
  • Kim-SooHyeon
    soo_vely의 개발로그
    Kim-SooHyeon
  • 전체
    오늘
    어제
    • 분류 전체보기 (258)
      • 알고리즘 (108)
        • 자료구조 (3)
        • Java (104)
        • Python (1)
      • Back end (73)
        • Spring Project (28)
        • Java (23)
        • API (1)
        • Python (0)
        • Django (3)
        • Linux (1)
        • 서버 (2)
        • 에러로그 (11)
        • 부스트 코스 (1)
      • Front end (9)
        • HTML, CSS (4)
        • JavaScript (4)
        • JQuery (0)
      • 기타 프로그래밍 (4)
        • Android Studio (1)
        • Arduino (2)
        • Azure Fundamental(AZ-900) (1)
      • 개발도구 (24)
        • IntelliJ (2)
        • Git (12)
        • SVN (0)
        • Eclipse (2)
        • 기타 Tool (8)
      • Database (17)
        • Oracle (11)
        • MySQL (0)
        • H2 Database (3)
        • ORM & JPA (1)
      • 자격증 (10)
        • 컴활 1급 (7)
        • 컴활 2급 (2)
        • SQLD (1)
      • 기타 (13)
        • 블로그 운영 (6)
        • 문서 (1)
        • 기타 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    github
    springboot
    solved.ac
    Oracle
    알고리즘
    백준 자바
    문자열
    BOJ
    오라클
    Git
    java
    단계별풀기
    jpa
    백준알고리즘
    배열
    1차원 배열
    for문
    spring
    백준
    구현
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Kim-SooHyeon
[Spring] Maven profile 이용한 환경별 (local, dev, prod) 빌드 및 설정 분리
상단으로

티스토리툴바