들어가며
개발이 끝난 코드를 서버에 올리거나 배포하려면 빌드 과정이 필요합니다.
"빌드한다"는 말이 정확히 무엇을 의미하는지, Java에서는 어떻게 이루어지는지 정리해보겠습니다.
빌드(Build)란?
빌드는 개발자가 작성한 소스 코드를 실행할 수 있는 형태로 변환하는 과정입니다.
단순히 컴파일만 하는 것이 아니라, 실행에 필요한 모든 준비를 포함합니다.
[빌드 과정]
소스 코드 (.java)
↓ 컴파일
바이트코드 (.class)
↓ 의존성 라이브러리 포함
↓ 리소스 파일 포함 (application.yml 등)
↓ 테스트 실행
실행 가능한 파일 (.jar / .war)
↓
서버에서 실행
빌드가 하는 일
빌드는 단순히 컴파일 이상의 작업을 수행합니다.
1. 컴파일 - .java → .class (바이트코드 변환)
2. 의존성 관리 - pom.xml(Maven) 또는 build.gradle(Gradle)에 정의된 라이브러리 포함
3. 테스트 실행 - 빌드 전 테스트 코드 자동 실행
4. 리소스 포함 - application.yml, 정적 파일 등 포함
5. 패키징 - 모든 것을 하나의 .jar 또는 .war 파일로 압축
JAR(Java Archive)란?
JAR 파일은 Java 프로그램 실행에 필요한 모든 파일을 하나로 묶은 압축 파일입니다..class 파일, 라이브러리, 설정 파일, 리소스 등이 모두 포함됩니다.
[JAR 파일 내부 구조]
my-app.jar
├── BOOT-INF/
│ ├── classes/ ← 컴파일된 .class 파일
│ │ └── com/example/
│ │ ├── MemberController.class
│ │ └── MemberService.class
│ └── lib/ ← 의존성 라이브러리 (Spring, JPA 등)
│ ├── spring-boot-3.0.jar
│ └── ...
├── META-INF/
│ └── MANIFEST.MF ← 실행 시작점(main 클래스) 정보
└── resources/
└── application.yml ← 설정 파일
Spring Boot에서의 빌드
Spring Boot는 Executable JAR(실행 가능한 JAR) 를 만들 수 있습니다.
JVM만 설치되어 있으면 별도의 WAS(Tomcat 등) 없이 바로 실행됩니다.
Maven으로 빌드
# 빌드 명령어
mvn clean package
# 결과물
target/my-app-1.0.jar
Gradle로 빌드
# 빌드 명령어
./gradlew clean build
# 결과물
build/libs/my-app-1.0.jar
JAR 파일 실행
# 빌드된 JAR 파일 실행
java -jar my-app-1.0.jar
# 포트나 프로파일 지정
java -jar my-app-1.0.jar --server.port=8081
java -jar my-app-1.0.jar --spring.profiles.active=prod
빌드 도구 - Maven vs Gradle
Java 프로젝트에서 빌드를 자동화하는 도구입니다.
| 항목 | Maven | Gradle |
|---|---|---|
| 설정 파일 | pom.xml (XML) |
build.gradle (Groovy/Kotlin) |
| 빌드 명령어 | mvn clean package |
./gradlew clean build |
| 빌드 속도 | 상대적으로 느림 | 빠름 (증분 빌드 지원) |
| 설정 방식 | XML로 장황함 | 간결하고 유연함 |
| 현재 트렌드 | 레거시 프로젝트 | Spring Boot 신규 프로젝트 권장 |
Maven 의존성 설정 (pom.xml)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.0.0</version>
</dependency>
Gradle 의존성 설정 (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:3.0.0'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.mysql:mysql-connector-j'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
빌드 과정 상세 - clean build
./gradlew clean build
clean → 이전 빌드 결과물 삭제 (build/ 폴더 제거)
build → 아래 단계 순서대로 실행
1. compileJava - .java → .class 컴파일
2. processResources - 리소스 파일 복사
3. test - 테스트 코드 실행
4. jar - .class + 리소스 → .jar 패키징
5. bootJar - 의존성 포함한 실행 가능 JAR 생성
JAR vs WAR
| 항목 | JAR | WAR |
|---|---|---|
| 전체 이름 | Java Archive | Web Application Archive |
| 실행 방법 | java -jar 직접 실행 |
Tomcat 등 WAS에 배포 |
| 내장 서버 | 포함 (Spring Boot) | 포함 안 함 |
| 사용 예시 | Spring Boot 단독 실행 | 레거시 서버 환경 배포 |
| 현재 트렌드 | 권장 (MSA, 클라우드 환경) | 레거시 |
Spring Boot는 내장 Tomcat이 포함된 JAR 방식을 기본으로 권장합니다.
AWS 배포와의 연관
Creator-Flex 프로젝트에서 AWS EC2에 배포할 때도 이 빌드 과정을 거칩니다.
[로컬 개발 → AWS 배포 흐름]
1. 로컬에서 개발
↓
2. ./gradlew clean build
↓
3. .jar 파일 생성
↓
4. EC2 서버에 .jar 파일 업로드 (SCP, GitHub Actions 등)
↓
5. EC2에서 java -jar my-app.jar 실행
↓
6. 서비스 운영
정리
- 빌드는 개발자가 작성한 소스 코드를 실행할 수 있는 형태로 변환하는 과정이다.
- 컴파일, 의존성 포함, 테스트 실행, 리소스 포함, 패키징 등 실행에 필요한 모든 준비를 포함한다.
- JAR 파일은 실행에 필요한 모든 파일을 하나로 묶은 압축 파일로,
java -jar명령어로 바로 실행할 수 있다. - Spring Boot는 내장 Tomcat이 포함된 실행 가능한 JAR를 생성해 별도의 WAS 없이 실행할 수 있다.
- Maven(
mvn clean package)과 Gradle(./gradlew clean build)이 대표적인 빌드 도구이며, Spring Boot 신규 프로젝트에는 Gradle을 권장한다.