모바일 앱의 Build Config — 정의, 설정 및 작동 원리

저자: IT Sectr 게시일: 2026-06-01 읽는 시간: 9 분

Build Config에는 빌드 유형, 컴파일 플래그, 서명 키, SDK 버전 등 다양한 환경에 맞게 애플리케이션이 어떻게 빌드되는지를 결정하는 빌드 매개변수가 포함됩니다. Android Developers Guide (2026)에 따르면, Gradle 빌드 시스템은 유연한 구성을 위해 Product Flavors와 Build Types를 지원합니다. Build Config는 수동 코드 변경 없이 debug와 release 간 전환을 자동화합니다.

주요 내용

  • Build Config는 어떻게, 어떤 플래그로, 어떤 플랫폼을 위해 애플리케이션이 빌드되는지를 정의하는 빌드 매개변수 시스템입니다.
  • Android의 Gradle은 독립적인 구성으로 Build Types(debug, release)와 Product Flavors(데모, 전체 버전)를 지원합니다.
  • Xcode는 컴파일 플래그와 서명을 구성하기 위해 Build Configurations(Debug, Release)와 Build Settings를 사용합니다.
  • BuildConfig.java는 현재 빌드 구성의 값이 포함된 필드를 가진 Android에서 생성된 클래스입니다.
  • 자동화된 Build Config는 CI/CD 파이프라인(GitLab CI, GitHub Actions)과 통합되어 다양한 플레이버를 빌드합니다.

모바일 개발에서 Build Config란

Build Config는 모바일 애플리케이션의 컴파일, 빌드 및 패키징 프로세스를 정의하는 설정 모음입니다. 빌드 구성에는 대상 플랫폼 선택, 최소 SDK 버전, 최적화 플래그, 서명 키 및 환경 변수가 포함됩니다.

현대 모바일 프로젝트에는 단일 빌드 구성이 거의 없습니다. 일반적으로 여러 구성이 있습니다: debug(디버깅이 있는 개발용), release(최적화가 있는 프로덕션용), staging(실제 데이터로 테스트용) 및 다양한 플레이버(데모, 전체, 엔터프라이즈 버전).

Gradle Build Tool Survey(2025)에 따르면, 평균 Android 프로젝트는 3.2개의 다른 빌드 구성을 사용하고, iOS 프로젝트는 2.8개를 사용합니다. 각 구성은 자체 컴파일 플래그, 서명 인증서 및 서버 URL을 가질 수 있습니다.

Build Config의 주요 작업은 이러한 구성 간 전환을 자동화하는 것입니다. 개발자는 서버 URL이나 디버그 플래그를 수동으로 변경하는 대신 IDE에서 원하는 Build Variant를 선택하면 빌드 시스템이 해당 매개변수를 자동으로 적용합니다.

Build Config의 적절한 설정은 애플리케이션 보안에 중요한 영향을 미칩니다: debug 빌드에는 상세 로그, DB 인스펙터 및 디버깅 엔드포인트가 포함되며, 이는 release 바이너리에서 물리적으로 제외되어야 합니다. Gradle은 Build Types를 통해 이를 해결합니다: debug는 debuggable true 플래그를, release는 ProGuard와 함께 minifyEnabled true를 가질 수 있습니다. iOS는 Swift Active Compilation Conditions를 통해 동일한 작업을 수행하며, #if DEBUG 내부의 코드는 release 구성에서 컴파일되지 않습니다.

Android의 Build Config: Gradle과 BuildConfig

Android는 두 가지 주요 개념과 함께 Gradle 빌드 시스템을 사용합니다: Build Types와 Product Flavors. 이들의 조합이 Build Variants를 형성하며, 각 변형은 자체 완전한 빌드 구성을 가집니다.

Build Types: Debug와 Release

Build Type은 애플리케이션이 어떻게 빌드되는지를 정의하는 구성입니다. 기본적으로 Gradle은 두 가지 유형을 생성합니다: debug(디버깅 포함, 난독화 없음)와 release(ProGuard/R8 포함, 게시용 서명됨). 개발자는 자신의 유형(staging, benchmark, qa)을 추가할 수 있습니다.

kotlin
// build.gradle.kts
android {
    buildTypes {
        debug {
            isDebuggable = true
            buildConfigField("String", "API_URL", "\"http://dev.api.com\"")
        }
        release {
            isMinifyEnabled = true
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
            buildConfigField("String", "API_URL", "\"https://prod.api.com\"")
        }
    }
}

Product Flavors: 애플리케이션 버전

Product Flavors를 사용하면 단일 코드베이스에서 동일한 애플리케이션의 다른 버전을 만들 수 있습니다. 예: 광고가 있는 무료 버전, 광고가 없는 유료 버전, 추가 기능이 있는 엔터프라이즈 버전. 각 플레이버는 자체 applicationId, 리소스 및 SDK 종속성을 가질 수 있습니다.

kotlin
android {
    productFlavors {
        register("demo") {
            applicationId = "com.example.app.demo"
            versionNameSuffix = "-demo"
        }
        register("full") {
            applicationId = "com.example.app"
            versionNameSuffix = ""
        }
    }
}

BuildConfig 클래스: 코드에서 접근

각 Build Variant에 대해 Gradle은 구성 필드가 있는 BuildConfig 클래스를 생성합니다. 개발자는 buildConfigField를 통해 사용자 정의 필드를 추가하고, 표준 필드(DEBUG, APPLICATION_ID, BUILD_TYPE, VERSION_CODE, FLAVOR)는 자동으로 생성됩니다.

kotlin
// 코드에서 BuildConfig 사용
class NetworkModule {
    fun createApiClient(): ApiClient {
        return if (BuildConfig.DEBUG) {
            ApiClient(
                baseUrl = BuildConfig.API_URL,
                interceptor = HttpLoggingInterceptor()
            )
        } else {
            ApiClient(baseUrl = BuildConfig.API_URL)
        }
    }
}

BuildConfig를 사용하면 빌드 시간에 기능을 활성화 또는 비활성화할 수도 있습니다. 예를 들어, FEATURE_CHAT_ENABLED 필드를 추가하고 런타임 검사 및 코드의 조건 연산자 없이 애플리케이션의 전체 버전에서만 채팅을 활성화할 수 있습니다.

네트워크 요청 디버깅을 위해 DEBUG 필드가 있는 BuildConfig를 사용하면 debug 빌드에서만 OkHttp의 HttpLoggingInterceptor를 자동으로 연결할 수 있습니다. 이는 개발자가 실수로 릴리스 빌드 전에 로깅 제거를 잊어버린 경우에도 프로덕션에서 HTTP 요청이 기록되지 않음을 보장합니다.

iOS의 Build Config: Xcode와 Build Settings

iOS 생태계에서 Build Config는 Xcode Build Settings를 통해 관리됩니다 — 각 매개변수가 다른 구성(Debug, Release, Staging)에 대해 다른 값을 가질 수 있는 매개변수 테이블입니다.

Xcode Build Configurations

기본적으로 Xcode는 두 가지 구성을 생성합니다: Debug(개발용, 최적화 없음)와 Release(프로덕션용, -Os 최적화 포함). 개발자는 Project > Info > Configurations 메뉴를 통해 자신의 구성을 추가할 수 있습니다.

각 구성에 대해 Build Settings가 구성됩니다: 컴파일러 플래그(OTHER_SWIFT_FLAGS, GCC_PREPROCESSOR_DEFINITIONS), 코드 서명(CODE_SIGN_IDENTITY), 프로비저닝 프로필 및 entitlements. Xcode는 이러한 설정을 project.pbxproj 파일에 기록합니다.

xcconfig: 외부 구성 파일

Build Settings를 편리하게 관리하기 위해 iOS 개발자는 .xcconfig 파일을 사용합니다 — KEY = VALUE 형식의 매개변수가 있는 텍스트 파일입니다. 이는 Xcode용 .env와 유사합니다: 값이 프로젝트에 연결되고 project.pbxproj의 설정을 재정의합니다.

env
// Debug.xcconfig
BUNDLE_ID_SUFFIX = .debug
API_BASE_URL = http://localhost:8080
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG
CODE_SIGN_IDENTITY = Apple Development

// Release.xcconfig
BUNDLE_ID_SUFFIX =
API_BASE_URL = https://api.production.com
SWIFT_ACTIVE_COMPILATION_CONDITIONS =
CODE_SIGN_IDENTITY = Apple Distribution

Info.plist: 런타임 구성

Build Config 매개변수 중 일부는 Info.plist — iOS 애플리케이션 매니페스트 파일에 저장됩니다. Info.plist를 통해 URL 스키마, 권한(카메라, 마이크), 백그라운드 모드 및 타사 서비스 로그인 구성이 설정됩니다.

xcconfig의 값은 $(VARIABLE_NAME) 구문을 사용하여 Info.plist에 대입할 수 있습니다. 예를 들어, Info.plist의 $(API_BASE_URL)은 활성 빌드 구성에 따라 확장됩니다. 이는 모든 Apple 플랫폼에 대한 환경 매개변수 관리를 중앙화합니다.

CI/CD 파이프라인의 Build Config

현대 프로젝트에서 Build Config는 지속적 통합 시스템(GitLab CI, GitHub Actions, Bitrise, CircleCI)과 통합됩니다. 각 파이프라인은 CI/CD 시스템의 환경 변수를 통해 Build Config 매개변수를 재정의할 수 있습니다.

CI의 Gradle Build Config

Android의 경우 CI 파이프라인이 지정된 Build Variant로 Gradle을 실행합니다: ./gradlew assembleFullRelease. 서명 매개변수는 CI 변수(STORE_PASSWORD, KEY_ALIAS)를 통해 전달됩니다. Gradle은 런타임 환경에서 이를 읽고 build.gradle.kts에 대입합니다.

kotlin
// build.gradle.kts — CI 변수에서 읽기
android {
    signingConfigs {
        register("release") {
            storeFile = file(System.getenv("KEYSTORE_PATH") ?: "debug.keystore")
            storePassword = System.getenv("STORE_PASSWORD") ?: ""
            keyAlias = System.getenv("KEY_ALIAS") ?: "key"
            keyPassword = System.getenv("KEY_PASSWORD") ?: ""
        }
    }
}

CI의 Xcode Build Config

iOS의 경우 CI는 구성 플래그와 함께 xcodebuild를 사용합니다: -configuration Release. 서명 인증서는 CI secrets를 통해, 프로필은 Apple Developer Portal API 또는 Fastlane match를 통해 제공됩니다.

Fastlane 도구는 Build Config 관리를 자동화합니다: xcconfig 생성, Info.plist 버전 업데이트, 빌드된 IPA 서명, App Store Connect에 업로드. Fastlane gym(빌드)과 match(서명)은 iOS CI 파이프라인의 표준입니다.

Bitrise Build Report(2025)에 따르면, CI에서 Build Config를 설정한 프로젝트는 수동 빌드 구성 시간을 73% 줄이고 서명 오류를 89% 줄입니다. 자동화된 Build Config는 프로덕션 준비 파이프라인의 필수 요소입니다.

또 다른 중요한 측면은 Build Config를 통한 버전 관리 매개변수화입니다. Gradle은 CI 변수에서 versionCode와 versionName을 읽고 build.gradle.kts에 동적으로 대입할 수 있어 개발자 간 버전 비동기화를 제거합니다. iOS에서는 agvtool(Apple Generic Versioning Tool)을 통해 유사한 작업이 해결되며, git 태그 또는 CI의 빌드 번호를 기반으로 빌드 번호를 증가시킬 수 있습니다.

자주 묻는 질문

Android에서 Build Type과 Product Flavor의 차이점은 무엇인가요?

Build Type(debug, release)은 애플리케이션이 어떻게 빌드되는지를 정의합니다(디버깅 유무, 최적화 유무). Product Flavor(데모, 전체)는 어떤 버전이 빌드되는지를 정의합니다(다른 applicationId, SDK, 리소스). 이들의 조합을 Build Variant라고 합니다.

Build Config에서 Android 코드로 값을 전달하려면 어떻게 하나요?

build.gradle.kts의 buildConfigField 메서드를 통해 전달합니다. 필드는 자동 생성된 BuildConfig 클래스에 추가되며 코드에서 BuildConfig.필드_이름으로 사용할 수 있습니다. 문자열의 경우 값을 이스케이프된 따옴표로 감싸야 합니다.

iOS에서 여러 환경(development, staging, production)을 구성하려면 어떻게 하나요?

.xcconfig 파일을 통해 구성합니다 — 환경당 하나씩입니다. Project > Info > Configurations에서 Debug/Staging/Release 구성을 추가하고, 각각 자체 xcconfig를 참조합니다. 값은 $(VAR_NAME) 구문을 사용하여 Info.plist에 대입됩니다.

코드의 플래그 대신 BuildConfig를 사용해야 하는 이유는 무엇인가요?

BuildConfig는 빌드 구성을 애플리케이션 로직에서 분리합니다. 코드의 플래그는 환경 전환 시 수동 변경 및 재컴파일이 필요합니다. BuildConfig는 IDE 또는 CI에서 Build Variant를 선택하면 모든 매개변수를 자동으로 전환합니다.

다른 플레이버가 다른 종속성을 가질 수 있나요?

네, Gradle은 특정 플레이버에 대한 종속성을 지정할 수 있습니다: demoImplementationfullImplementation. 데모 버전은 분석 라이브러리를 포함할 수 있지만 전체 버전은 포함하지 않을 수 있습니다. 이는 다른 플레이버의 APK 크기를 줄입니다.

요약

  • Build Config는 애플리케이션이 어떻게 컴파일되고 어떤 환경을 위한 것인지를 제어하는 빌드 매개변수 시스템입니다.
  • Android는 코드에서 매개변수에 접근하기 위해 Build Types, Product Flavors 및 생성된 BuildConfig 클래스와 함께 Gradle을 사용합니다.
  • iOS는 컴파일 플래그, 서명 및 서버 URL을 구성하기 위해 Xcode Build Settings 및 .xcconfig 파일을 사용합니다.
  • Build Variant는 Build Type과 Product Flavor의 조합으로, 자체 리소스를 가진 고유한 빌드 구성을 만듭니다.
  • CI/CD 통합을 통해 환경 변수를 통해 Build Config 매개변수를 전달할 수 있어 수동 설정이 필요 없습니다.
  • FastlaneGradle은 두 플랫폼 모두에 대해 서명, 버전 관리 및 게시를 자동화합니다.

턴키 방식의 모바일 애플리케이션을 개발해 드립니다

IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.

프로젝트 논의

더 읽어보기