빌드(Build), 배포(Deploy), 컴파일(Compile) 서로 뭣이 다른디?

wooje·2023년 9월 3일
1

평소에 노션에 필기한 내용들은 #TodayILearned 해시태그를 붙여 여기 벨로그에 공유하려고 합니다...! 구글이라는 우주에 우주쓰레기마냥 흩어져 있는 개념들을 처리하는 용도로 쓰세요 ゝ。∂)

  • 중요하다고 느낀 부분은 ⭐별⭐, 📌핀📌 이모티콘, 밑줄로 표시했고
  • 혼동될 만한 개념이나 용어들은 vs. 표시,
  • 명령어나 폴더/파일명은 하이라이트로 표시했으니

참고해 주세요!
또 노트정리 포스팅은 우주쓰레기가 다 정리되는 그 날까지 꾸준히 업로드할 예정이니 많은 관심 부탁드려용


  • ⭐ 개발자가 수정한 코드가 테스트를 거쳐 서버에 반영을 하는 것을 배포라고 하며, 배포하기 위한 과정을 빌드라고 한다.

  • 자바 파일을 빌드 한다는 것은 소스코드를 컴파일하여 .class로 변환하고, resource를 .class에서 참조할 수 있는 적절한 위치로 옮기고 META-INF와 MANIFEST.MF 들을 하나로 압축하는 과정을 의미한다. 컴파일은 빌드의 부분집합인 셈이다. 또한, 빌드 과정을 도와주는 도구를 Build Tool이라고 한다. 즉, 컴파일 된 코드를 실제 실행할 수 있는 상태로 만드는 일을 Build라고 한다.

  • 빌드를 하고 생성된 jar 또는 war 파일을 WAS에 올리는 것이 배포다. 다른 말로, git에 올려두고 테스트 코드를 작성하고 수행 및 검증하기까지 과정이라고 할 수 있다.

    • WAS란? Web Application Server의 약자로, 웹 서버 상에서 프로그램을 돌려주는 녀석 정도라고 알고 넘어가자 (따로 다룰 예정이다)
  • 빌드 툴이 제공하는 기능으로는 전처리, 컴파일, 패키징, 테스팅, 배포가 있다.

  • ⭐ 컴파일은 소스코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업을 말한다.

💡 두 줄 요약

Build = Complie + 그 외 작업
Run = Build + 실행 = (Complie + 그외작업) + 실행

빌드 자동화 도구


  • 빌드 자동화 도구에는 대표적으로 Maven, Gradle, Yarn, Npm 등이 있다.
  • 프로젝트에 필요한 의존성들의 관리와 패키징 작업을 대신 해주기 때문에, 개발자는 개발에만 집중할 수 있다.
  • Gradle
    - 그루비(Groovy) 기반의 빌드 자동화 도구
    - 자바 진영에서 Maven과 더불어 가장 많이 쓰는 빌드 툴이다.
    - XML 기반의 Maven보다 동적인 빌드를 유연하게 표현 가능하며 가독성과 성능이 좋다.

basic 타입으로 프로젝트 생성 시 구조

.
├── build.gradle
├── .gradle
├── gradle
│     └── wrapper
│           ├── gradle-wrapper.jar
│           └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
  • .gradle 디렉토리
    • 작업(task: gradle에서 프로젝트의 작업 단위로, gradle에서 제공하는 task가 있고, build.gradle에서 사용자가 직접 만들 수도 있다) 파일이 생성된다.
      • gradle이 제공하는 task는 gradle tasks 명령어를 통해 확인 가능(build.gradle이 있는 디렉토리에서 실행해야 함)
  • gradle 디렉토리
    • 'gradle-wrapper' 관련 디렉토리
    • 'gradle-wrapper'에 대한 설명은 아래에 따로 정리
  • gradlew, gradlew.bat
    • gradle-wrapper 실행명령
    • 각각 리눅스(맥) 환경과, 윈도우의 실행명령이다.
  • ⭐ build.gradle
    • 프로젝트에 필요한 의존성과 빌드 처리 내용을 작성하는 파일
  • settings.gradle
    - 프로젝트에 대한 설정정보를 작성하는 파일

⭐ java-application 타입으로 생성 시 프로젝트 구조

  • Gradle 프로젝트 환경 + 자바 어플리케이션 환경이 구성되며, mainClass는 App.java로 설정된다.
.
├── .gradle
├── gradle
│     └── wrapper
│           ├── gradle-wrapper.jar
│           └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── app
      ├── build.gradle
      └── src
           ├── main
           │	 └── resources
           │     └── java
           │           └── App.java
           └── test
                 └── resources
                 └── java
                       └── AppTest.java

java-application에서 컴파일 및 실행

  • gradle tasks
  • gradle build : 프로젝트를 빌드
    • build.gradle에 apply plugin: 'java'가 추가된 경우 .jar파일로 패키징까지 된다. (build 명령어로 패키징도 할 수 있음)
    • 컴파일된 파일들은 app > build 폴더 안에 생성 되며, .jar파일은 build > libs에 패키징된다.
      • JAR(Java Archive)는 여러 개의 자바 클래스 파일과 클래스들이 이용하는 관련 리소스 등 메타데이터(데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터)를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다.
      • WAR(Web Archive)는 웹 어플리케이션을 지원하기 위한 압축 방식이다. 웹 어플리케이션을 지원하기 위해서 war 압축 방식은 jsp, servlet, gif, html, jar 등을 압축하고 지원한다.
      • EAR(Enterprise Archive)는 하나의 웹 어플리케이션 단위를 넘어 실제 서버에서 배포하기 위한 단위다. 이를 위해서 jar와 war를 묶어서 각각의 기능을 지원한다.
      • 사용하는 이유는 파일을 압축하여 용량을 가볍게 하고 그렇게 관리가 편해지기 때문이다.
  • gradle run : 프로젝트 실행
    • 컴파일 후 메인 클래스를 실행한다.
    • 스트링부트(기존 Spring + 톰캣서버 등등 추가)의 경우 gradle bootRun을 통해 구동할 수 있다.
  • gradle jar : 프로젝트 패키징
    • 프로그램을 .jar로 패키징한다.
    • build > libs에 생성 된다.
  • gradle clean : 프로젝트 클린, build 폴더를 제거하여, 빌드 이전 상태로 되돌린다.


Epilogue

질문과 피드백은 언제나 환영입니다. 부족하거나 틀린 부분은 편하게 말씀해주시면 감사하겠습니다!

profile
마법학교 수석이 되고 싶은 평범한 대학생입니다 🪄

0개의 댓글