Gradle로 프로젝트 구성하기

Gradle로 프로젝트 구성하기 (How to use Gradle to configure your project)

Flink 프로젝트를 구성하려면 빌드 도구가 필요할 것입니다. 이 가이드는 개발 과정의 작업을 자동화하는 데 사용할 수 있는 오픈소스 범용 빌드 도구인 Gradle로 Flink 프로젝트를 구성하는 방법을 보여줍니다. 프로젝트 가져오기, 빌드, 의존성 추가, 패키징 방법을 단계별로 설명합니다.

출처: 문서

본문

요구사항 (Requirements)

  • Gradle 7.x
  • Java 8 (deprecated) 또는 Java 11

프로젝트를 IDE로 가져오기

프로젝트 폴더와 파일을 만든 후에는 개발과 테스트를 위해 이 프로젝트를 IDE로 가져오는 것을 권장합니다.

IntelliJ IDEA는 Gradle 플러그인을 통해 Gradle 프로젝트를 지원합니다.

Eclipse는 Eclipse Buildship 플러그인을 통해 지원합니다(가져오기 마법사의 마지막 단계에서 Gradle 버전 >= 3.0을 지정해야 합니다. shadow 플러그인이 요구합니다). Gradle의 IDE 통합을 사용해 Gradle로 프로젝트 파일을 만들 수도 있습니다.

참고: Java의 기본 JVM 힙 크기는 Flink에는 너무 작을 수 있으므로 수동으로 늘려야 합니다. Eclipse에서는 Run Configurations -> Arguments를 선택하고 VM Arguments 상자에 -Xmx800m을 입력하세요. IntelliJ IDEA에서는 Help | Edit Custom VM Options 메뉴에서 JVM 옵션을 변경하는 것이 권장됩니다. 자세한 내용은 이 문서를 참고하세요.

IntelliJ 참고: IntelliJ IDEA 안에서 애플리케이션을 실행하려면 실행 구성에서 Include dependencies with "Provided" scope 상자를 체크해야 합니다. 이 옵션을 사용할 수 없다면(아마도 오래된 IntelliJ IDEA 버전 때문) 애플리케이션의 main() 메서드를 호출하는 테스트를 만드는 해결 방법이 있습니다.

프로젝트 빌드하기

프로젝트를 빌드/패키징하려면 프로젝트 디렉터리로 이동해 gradle clean shadowJar 명령을 실행하세요. 애플리케이션과 함께, 애플리케이션에 의존성으로 추가했을 수 있는 커넥터와 라이브러리가 포함된 JAR 파일을 찾을 수 있습니다: build/libs/<project-name>-<version>-all.jar.

참고: 애플리케이션의 메인 클래스/진입점으로 StreamingJob과 다른 클래스를 사용한다면 build.gradle 파일의 mainClassName 설정을 그에 맞게 변경할 것을 권장합니다. 그러면 Flink가 메인 클래스를 별도로 지정하지 않고도 JAR 파일에서 애플리케이션을 실행할 수 있습니다.

프로젝트에 의존성 추가하기

build.gradle 파일의 dependencies 블록에 의존성 구성을 지정하세요.

예를 들어 우리의 Gradle 빌드 스크립트나 quickstart 스크립트로 프로젝트를 만들었다면, Kafka 커넥터를 다음과 같이 의존성으로 추가할 수 있습니다.

build.gradle

...
dependencies {
    ...
    flinkShadowJar "org.apache.flink:flink-connector-kafka:${flinkVersion}"
    ...
}
...

중요: 이 모든 (핵심) 의존성은 scope을 provided로 설정해야 합니다. 이는 컴파일할 때는 필요하지만, 프로젝트의 결과 애플리케이션 JAR 파일에는 패키징되면 안 된다는 뜻입니다. provided로 설정하지 않으면, 최상의 경우에도 결과 JAR이 모든 Flink 핵심 의존성을 포함하므로 지나치게 커집니다. 최악의 경우 애플리케이션 JAR에 추가된 Flink 핵심 의존성이 여러분 자신의 의존성 버전과 충돌할 수 있습니다(보통 inverted classloading으로 방지됩니다).

의존성을 애플리케이션 JAR에 올바르게 패키징하려면 이러한 애플리케이션 의존성을 compile scope으로 설정해야 합니다.

애플리케이션 패키징하기

사용 사례에 따라 Flink 환경에 배포하기 전에 Flink 애플리케이션을 다양한 방식으로 패키징해야 할 수 있습니다.

Flink 작업용 JAR을 만들고 Flink 의존성만 사용하며 서드파티 의존성이 없다면(예: JSON 포맷과 함께 filesystem 커넥터 사용) uber/fat JAR을 만들거나 의존성을 shade할 필요가 없습니다.

gradle clean installDist 명령을 사용할 수 있습니다. Gradle Wrapper를 사용한다면 ./gradlew clean installDist가 됩니다.

Flink 작업용 JAR을 만들고 Flink 배포에 내장되지 않은 외부 의존성을 사용한다면, 배포의 classpath에 추가하거나 uber/fat 애플리케이션 JAR에 shade할 수 있습니다.

gradle clean installShadowDist 명령을 사용할 수 있으며, /build/install/yourProject/lib에 단일 fat JAR을 생성합니다. Gradle Wrapper를 사용한다면 ./gradlew clean installShadowDist가 됩니다.

생성된 uber/fat JAR을 사용해 로컬 또는 원격 클러스터에 다음과 같이 제출할 수 있습니다.

bin/flink run -c org.example.MyJob myFatJar.jar

Flink 작업을 배포하는 방법에 대해 더 자세히 알아보려면 배포 가이드를 확인하세요.

더 알아보기 (Learn more)