빌드(Build)란 소스 코드 파일(main.java)을 실행 가능한 소프트웨어 산출물(main.jar)로 변환하는 과정입니다. 이 과정에서는 소스 코드 파일을 컴파일하고, 링크를 거쳐 실행 파일이나 라이브러리 파일 등을 생성합니다. 즉, 빌드는 소스 코드 파일을 실행 가능한 형태로 변환하는 과정으로, 컴파일 이후 링크 과정을 포함합니다.
프로젝트를 진행하다 보면 소스파일이 여러 개가 생성이 되고 A라는 소스파일에서 B라는 소스파일에 존재하는 함수(메서드)를 호출하는 경우가 있습니다.
이때 A와 B 소스파일 각각을 컴파일만 하면 A가 B에 존재하는 함수를 찾질 못하기 때문에 호출할 수가 없습니다.
따라서 A와 B를 연결해주는 작업이 필요한데 이 작업을 링크라고 합니다.
여러 개로 분리된 소스파일들을 컴파일한 결과물들에서 최종 실행가능한 파일을 만들기 위해 필요한 부분을 찾아서 연결해 주는 작업입니다. 그리고 라이브러리도 연결해 줍니다.
링크는 정적링크(static link)와 동적링크(dynamic link)가 있는데
정적링크란 컴파일된 소스파일을 연결해서 실행가능한 파일을 만드는 것이고, 동적링크란 프로그램 실행 도중 프로그램 외부에 존재하는 코드를 찾아서 연결하는 작업을 말합니다.
자바의 경우, JVM이 프로그램 실행 도중 필요한 클래스를 찾아서 클래스패스에 로드해 주는데 이는 동적링크의 예입니다.
자바에서는 링커가 있지 않고 클래스로더가 이 기능을 수행한다.
컴파일(Compile)은 소스 코드를 바이너리 코드로 변환하는 과정입니다. 이 과정에서는 프로그래밍 언어로 작성된 소스 코드를 컴퓨터가 이해할 수 있는 기계어로 번역합니다. 즉, 컴파일은 소스 코드를 실행 가능한 바이너리 코드로 변환하는 과정입니다.
빌드와 컴파일은 비슷한 기능을 수행하지만 다른 의미를 갖고 있습니다. 빌드는 소스 코드 파일을 실행 가능한 소프트웨어 산출물로 변환하는 과정으로, 컴파일 이후 링크 과정을 포함합니다. 반면, 컴파일은 소스 코드를 바이너리 코드로 변환하는 과정입니다.
따라서, 빌드는 컴파일 이후에 발생하는 과정으로, 컴파일 과정과 함께 빌드 과정을 수행하게 됩니다.
요약 - 컴파일은 그저 java파일을 class파일로 변환해 주는 과정을 의미하고 빌드는 컴파일과 링크를 모두 포함하여 패키징 하는 과정을 의미한다고 보면 된다. 링크는 실행할 때 필요한 모든 것을 모아서 연결해 주는 것이라 생각하면 쉽다.
JDK에서 소스코드를 실행하는 것이나 빌드된 파일(. jar 등)을 실행하는 것이나 결국 JRE(java runtime environment) 안에서 실행되는 것이다.
예를 들어, 자바 언어로 작성된 코드를 빌드하고 실행해 보면 다음과 같습니다.
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
위 코드를 빌드하고 실행하는 과정은 다음과 같습니다.
아래는 자바로 작성된 코드를 빌드하고 실행하는 과정을 명령어로 수행하는 예시입니다.
#### 소스 코드 컴파일
$ javac Hello.java
#### 패키징
$ jar cvfe Hello.jar Hello Hello.class
#### 실행
$ java -jar Hello.jar
Hello, World!
컴파일과 빌드는 보통 개발 프로세스에서 자주 사용되는 단계입니다. 이러한 단계를 거치지 않고 소스 코드를 직접 실행하는 경우에는 컴파일러나 빌드 툴 등을 사용하지 않기 때문에 컴파일과 빌드의 차이점을 명확히 이해하는 것이 중요합니다.
일반적으로 빌드 툴이 제공해 주는 기능으로는 다음과 같은 기능들이 있다.
전처리(preprocessing), 컴파일(Compile), 패키징(packaging), 테스팅(testing), 배포(distribution)
빌드 툴로는 Ant, Maven, Gradle 등이 있다.


Java와 유사한 문법 구조를 가진 Groovy기반의 스크립트 언어를 사용하며 다양한 소프트웨어를 빌드(Build)할 수 있는 유연한 빌드 자동화 도구이다.

유연성
성능

설정 주입 방식


프로젝트에서 사용하는 라이브러리나 패키지를 관리한다.
dependencies {
// JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// SECURITY
implementation 'org.springframework.boot:spring-boot-starter-security'
// WEB
implementation 'org.springframework.boot:spring-boot-starter-web'
// LOMBOK
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
// MySQL
runtimeOnly 'com.mysql:mysql-connector-j'
// Validation
implementation 'org.springframework.boot:spring-boot-starter-validation'
// JWT
compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'
// DEV_TOOL
developmentOnly 'org.springframework.boot:spring-boot-devtools'
// TEST
testRuntimeOnly 'com.h2database:h2'
testCompileOnly 'org.projectlombok:lombok'
testCompileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.security:spring-security-test'
}
의존성 설정
라이브러리를 추가하는 시점을 설정할 수 있다.
Implementation
compileOnly
runtimeOnly
testImplementation
repositories {
mavenCentral()
}
MavenCentral Repository
Maven Repository: Search/Browse/Explore
<출처 : 명품 Java Programming 책 내의 그림>
JAR(JAVA Archive) 파일은 Java 프로그램이나 라이브러리, 리소스 등을 포함하는 압축 파일 형식입니다.
JAR 파일은 일반적으로 자바 애플리케이션을 패키징하고 배포하는 데 사용됩니다.
JAR 파일은 ZIP 형식으로 압축되며, 확장자는 ".jar"로 끝납니다. JAR 파일은 여러 개의 파일과 디렉토리로 구성될 수 있으며, 다음과 같은 주요 구성 요소를 포함할 수 있습니다:
JAR 파일은 자바 개발 환경에서 많이 사용되며, 프로그램의 배포와 관리를 용이하게 합니다. JAR 파일은 실행 가능한 형식으로 사용될 수도 있고, 다른 프로젝트에서 라이브러리로 사용될 수도 있습니다. JAR 파일은 자바의 "java" 명령어를 사용하여 실행할 수 있으며, 필요한 클래스와 리소스에 쉽게 액세스할 수 있습니다.
war 확장자 파일은 servlet/jsp 컨테이너에 배치할 수 있는 웹 어플리케이션 압축 파일 포맷
Jar 포맷과 달리 Web-Inf 및 Meta-Inf 디렉토리로 사전 정의 된 구조를 사용
War파일을 실행하려면 Tomcat, Weblogic, Websphere 등의 웹 서버 (WEB)또는 웹 컨테이너 (WAS)가 필요
WAR 파일도 Java의 JAR 옵션 (java -jar)을 이용해 생성하는 Jar 파일의 일종으로 웹어플리케이션 전체를 패키징하기 위한 Jar파일
출처: https://statuscode.tistory.com/4 [Status Code:티스토리]
출처: https://freezboi.tistory.com/39 [코딩 공작소:티스토리]