프로필사진
DevOps 부트캠프 기록일지
DevOps_04_김재환
25_Study(빌드와 언어별 빌드 도구)
25_Study(빌드와 언어별 빌드 도구)

2023. 4. 21. 03:03부트캠프/DevOps (TIL)

빌드

빌드란 프로그램의 소스 코드를 독립적인 아티팩트(artifact)로 변환하는 과정입니다. 때로는 그 아티팩트 그 자체로도 실행이 가능하며, 대체로 런타임(소프트웨어 실행 환경)이 필요한 경우가 많습니다.

프레임워크

빌드 도구에 대해 이야기하기 이전에, 프레임워크라는 개념을 짚고 넘어갑시다. 오로지 빌드만을 위한 도구도 많지만, 대부분의 경우 어떤 언어나 프레임워크를 선택하느냐에 따라 빌드 도구가 정해지기 마련입니다. 사실상 "언어별"이라고 하기보다는 "프레임워크별"로 구분하는 것이 보다 편리한데, 이는 현대의 프레임워크는 대부분 빌드 도구를 지정하기 때문입니다.

프레임워크는 소프트웨어 개발을 쉽게 만들어주기 위해 필요한 도구, 규약의 집합체입니다. 프레임워크 없이 밑바닥부터 모든 코드를 작성하는 것도 가능하지만, 프레임워크를 통해 만들고자 하는 소프트웨어의 기본 골격이 제공되기 때문에, 현대의 소프트웨어 개발에서는 많은 부분을 프레임워크에 의존합니다. 목적에 따른 프레임워크의 종류로는 다음과 같은 것들이 있습니다.

백엔드 웹 애플리케이션 개발용 프레임워크

  • Spring (Java, Kotlin)
  • Django (Python)
  • Express (JavaScript)

프론트엔드 웹 애플리케이션 개발용 프레임워크

  • React 및 관련 라이브러리 (JavaScript)
  • Vue.js, Svelte (JavaScript)

모바일 및 데스크톱 애플리케이션 개발용 프레임워크

  • Flutter (Android, iOS 등)
  • .NET Framework (Windows)
  • Apple 운영체제 기본 Native 프레임워크 Cocoa (macOS), Cocoa Touch (iOS)
  • 안드로이드 기본 Native 프레임워크 (Android)

대표적인 빌드 도구

클라우드 환경에 기반한 웹 서비스를 위주로 빌드 도구들을 나열합니다.

JavaScript 기반의 React 생태계

React 프레임워크를 사용하는 경우 create-react-app 또는 next.js 와 같은 프레임워크를 사용합니다. 이 경우 대부분 다음과 같은 과정으로 프로덕션용 빌드 결과물(아티팩트)을 만들어낼 수 있습니다.

  1. node.js 개발 환경 준비
  2. 프로젝트 폴더로 이동
    • package.json 파일이 있는지 확인합니다
  3. 의존성 (dependency) 설치
    • npm install 명령 입력
  4. 빌드
    • npm run build 명령 입력
  5. 빌드 결과물 확인
    • build 폴더 확인
    • React는 프론트엔드 웹 애플리케이션이므로 결과물로는 HTML, CSS, JS 파일을 포함합니다.
    • 이후 이 파일들을 nginx 등에서 정적 호스팅할 수 있습니다.

의존성 설치 후 빌드하지 않고, 바로 애플리케이션을 실행하기 위해서는 npm run start 등의 명령어를 사용할 수 있습니다. 마찬가지로, 애플리케이션에 단위 테스트가 제공된다면, 애플리케이션의 테스트를 위해 npm run test 명령어를 사용합니다. 각 프로젝트에서 사용하는 package.json 파일이 어떻게 구성되어 있느냐에 따라 달라질 수 있습니다.

Java/Kotlin 기반의 Spring Boot 생태계 (Gradle)

Java/Kotlin 애플리케이션을 빌드하면 JVM(자바 런타임) 위에서 실행되는 war 파일이 아티팩트로 생성됩니다. 빌드 도구를 이용해 이를 실행할 수도 있습니다. Spring 및 Spring Boot 생태계에서는 대표적인 빌드 도구가 두 가지(maven, Gradle)가 있습니다. 그중에서 여기서는 Gradle 위주로 간략하게 흐름을 설명합니다.

  1. 자바 개발 환경(JDK, OpenJDK가 대표적) 준비
  2. gradle 설치
  3. 프로젝트 폴더로 이동
  4. 빌드
    • gradlew build 명령 입력

자바 애플리케이션은 실행을 위해서 빌드가 필수적입니다. 따라서, 빌드 후에 실행을 위해서 gradlew bootRun 명령을 통해 애플리케이션의 실행이 가능합니다. 그밖에 gradle tasks를 이용해 gradle에서 사용할 수 있는 다양한 태스크를 확인할 수 있습니다.

빌드가 필요 없는 경우

node.js 앱이나 Python과 같이 소스 코드 그대로 런타임을 실행할 수 있는 경우, 즉 다른 변환 작업이 필요 없는 경우에는 빌드 과정이 생략될 수 있습니다.