본문 바로가기
프로그래머로의 여정

소스 코드 빌드(Build)란

by nunaaa 2025. 10. 19.

빌드(Build)란 무엇인가요?

빌드소스 코드를 실행 가능한 소프트웨어로 변환하는 과정입니다. 개발자가 작성한 인간이 읽을 수 있는 코드를 컴퓨터가 이해하고 실행할 수 있는 형태로 바꾸는 작업입니다.


빌드의 간단한 비유

🧑‍🍳 **요리 비유**:
- **소스 코드** = 레시피와 재료
- **빌드 도구** = 주방과 조리 도구  
- **빌드 과정** = 요리 과정
- **실행 파일** = 완성된 음식

빌드 과정의 주요 단계

1. 컴파일(Compilation)

// 소스 코드 (Java/Kotlin)
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

컴파일

➡ **바이트 코드/기계어로 변환**
- Java → .class 파일 (바이트 코드)
- C++ → .exe 파일 (기계어)
- Kotlin → .class 파일

2. 리소스 처리

✅ **리소스 컴파일**:
- XML 레이아웃 → 바이너리 형식
- 이미지 파일 최적화
- 문자열 리소스 컴파일

3. 패키징(Packaging)

✅ **모든 파일을 하나로 묶기**:
- .class 파일들
- 리소스 파일들
- 라이브러리들
- 매니페스트 파일

4. 서명(Signing)

✅ **디지털 서명**:
- 개발자 인증서로 APK 서명
- 무단 변조 방지
- 스토어 배포를 위해 필수

Android에서의 빌드 과정 (Gradle 기준)

전체 빌드 흐름

graph LR
    A[소스코드] --> B[컴파일]
    B --> C[DEX 변환]
    C --> D[리소스 처리]
    D --> E[패키징]
    E --> F[서명]
    F --> G[APK 파일]

상세 단계 설명

1. 소스 코드 컴파일

// Kotlin/Java 소스 코드 → .class 파일
// R.java 파일 생성 (리소스 ID 매핑)

2. DEX 변환

✅ **Dalvik Executable 변환**:
- .class 파일들 → classes.dex 파일
- Android 런타임(Dalvik/ART)용으로 최적화

3. 리소스 컴파일

✅ **AAPT2 (Android Asset Packaging Tool)**:
- res/ 폴더의 XML, 이미지 등 처리
- resources.arsc 파일 생성

4. APK 패키징

✅ **모든 파일을 ZIP 형식으로 압축**:
- classes.dex
- resources.arsc
- AndroidManifest.xml
- res/ 리소스 파일들
- lib/ 네이티브 라이브러리

5. 서명 및 정렬

✅ **APK 서명**:
- debug/release 키스토어로 서명
- Zipalign: 메모리 정렬 최적화

Gradle의 역할

Gradle이 하는 일

// build.gradle 파일에서 설정
android {
    compileSdk 34

    defaultConfig {
        applicationId "com.example.myapp"
        minSdk 21
        targetSdk 34
    }

    buildTypes {
        release {
            minifyEnabled true  // 코드 난독화
            shrinkResources true // 사용하지 않는 리소스 제거
        }
    }
}

dependencies {
    implementation 'androidx.core:core-ktx:1.12.0'
    implementation 'androidx.appcompat:appcompat:1.6.1'
}

Gradle 빌드 명령어

# 주요 Gradle 명령어
./gradlew build          # 전체 빌드 (Debug + Release)
./gradlew assembleDebug  # Debug APK만 빌드
./gradlew assembleRelease # Release APK만 빌드
./gradlew clean          # 빌드 파일 정리
./gradlew installDebug   # 빌드 후 디바이스에 설치

다양한 빌드 도구들

Android 개발

- **Gradle** (현재 표준)
- **Bazel** (대규모 프로젝트, 빠른 빌드)
- **Buck** (Facebook에서 개발)

다른 플랫폼

- **Maven** (Java): XML 기반 빌드 도구
- **Ant** (Java): 초기 Java 빌드 도구
- **Make** (C/C++):傳統적인 빌드 도구
- **MSBuild** (.NET): Microsoft 빌드 시스템
- **Xcode Build System** (iOS/macOS)

빌드 유형 (Build Types)

Debug 빌드

✅ **특징**:
- 디버깅 정보 포함
- 최적화 없음
- 빠른 빌드 시간
- 개발용

Release 빌드

✅ **특징**:
- 코드 최적화
- 리소스 축소
- 난독화 적용
- 서명 필요
- 스토어 배포용

빌드 최적화 기술

코드 최적화

android {
    buildTypes {
        release {
            isMinifyEnabled = true    // 코드 난독화 및 최소화
            isShrinkResources = true  // 미사용 리소스 제거
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

빌드 캐시

✅ **증분 빌드**:
- 변경된 파일만 재빌드
- 빌드 시간 단축
- Gradle 빌드 캐시 활용

빌드의 중요성

왜 빌드가 필요한가?

🔧 **기술적 이유**:
- 인간이 작성한 코드를 기계어로 변환
- 다양한 리소스 통합
- 의존성 관리
- 플랫폼별 최적화

🚀 **운영적 이유**:
- 표준화된 배포 형식 생성
- 버전 관리
- 품질 보증 (테스트, 검증)

실제 빌드 과정 체험

Android Studio에서 빌드하기

1. **Build 메뉴 선택**
2. **Make Project (Ctrl+F9)**
3. **빌드 진행률 확인**
4. **APK 파일 생성 확인**

생성되는 파일들

app/build/outputs/apk/
├── debug/
│   └── app-debug.apk
└── release/
    └── app-release.apk

결론

빌드는 "코딩한 결과물을 실제로 실행할 수 있는 형태로 만드는 변환 과정"입니다. Gradle은 이 과정을 자동화하고 효율적으로 관리해주는 도구입니다.

개발자가 System.out.println("Hello")라고 코딩하면, 빌드 과정을 거쳐 스마트폰에서 실제로 "Hello"가 출력되는 앱이 만들어지는 거죠! 🎯

'프로그래머로의 여정' 카테고리의 다른 글

뷰(View) 시스템와 Jetpack Compose  (0) 2025.10.20
XML vs. JSON 비교  (1) 2025.10.19
Android 프레임워크 컴포즈(Compose)  (1) 2025.10.18
Kotlin Script 파일  (0) 2025.10.18
props in React  (0) 2025.09.05