Google Cloud에서 Java용 IronPDF 실행하는 방법

This article was translated from English: Does it need improvement?
Translated
View the article in English

Google Cloud Functions에 IronPDF for Java를 배포하려면 IronPDF가 HTML을 PDF로 렌더링하기 위해 포함된 Chromium 바이너리에 의존하기 때문에 기본 구성과 다른 구성이 필요합니다. 이 가이드는 올바른 pom.xml 종속성부터 런타임 권한 및 리소스 설정에 이르기까지, Google Cloud Functions의 사용자 지정 Docker 컨테이너 내에서 IronPDF를 실행하는 데 필요한 모든 내용을 다룹니다.

중요한현재 IronPDF for Java에 대한 Google Cloud 지원은 실험적임 — 모든 구성은 모든 지역이나 런타임 버전에서 검증되지 않았습니다. 게시하기 전에 배포를 철저히 테스트하세요.

Google Cloud Functions와 Docker에 익숙하다면 이는 문제가 되지 않습니다. 구성 변경은 간단합니다: 기본 함수 이미지를 맞춤 Dockerfile로 교체하고, Linux 엔진 종속성을 추가하며, 리소스 제한을 조정하고 작업 디렉토리를 설정하세요. 각 단계에 대한 설명은 아래에 있습니다.

Quickstart: Google Cloud에 IronPDF for Java 배포

최소 실행 환경 구성에는 사용자 정의 Dockerfile(기본 Cloud Function 이미지에는 Chrome의 시스템 종속성이 포함되어 있지 않기 때문), ironpdf-engine-linux-x64pom.xml/tmp/을 가리키는 아티팩트, 그리고 /tmp/을 가리키는 작업 디렉터리가 필요합니다. 아래의 코드에서는 함수 진입점에서 엔진 작업 디렉토리를 설정하는 방법을 보여줍니다:

//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.설정s;
import java.nio.file.Paths;

// Point IronPDF at a writable directory in the Cloud Function runtime
설정s.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.설정s;
import java.nio.file.Paths;

// Point IronPDF at a writable directory in the Cloud Function runtime
설정s.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
JAVA

작업 디렉토리를 설정한 후, IronPDF는 Cloud Function의 일시적 파일 시스템 내에서 엔진 바이너리를 추출하고 실행할 수 있습니다. /tmp/ 디렉터리는 대부분의 Google Cloud Function 런타임에서 사용할 수 있는 유일한 쓰기 및 실행 가능한 경로입니다.

목차

기본 Cloud Function 이미지가 작동하지 않는 이유는?

기본 Google Cloud Function 런타임 이미지는 설계상 최소화되어 있습니다 — 일반 언어로 작성된 함수 코드를 실행하는 데 필요한 패키지만 포함합니다. IronPDF의 Chromium 기반 렌더링 엔진은 표준 이미지에 없는 리눅스 시스템 라이브러리(폰트, 그래픽 라이브러리, 샌드박스 도구)에 의존합니다.

Google은 Google Cloud Functions 시스템 패키지 참조에서 각 런타임에 사용 가능한 시스템 패키지 목록 전체를 게시합니다. Chromium의 종속성은 표준 2세대 런타임 중 어느 것도 포함되어 있지 않습니다. 기본 이미지에서 IronPDF 엔진을 로드하려고 하면 시작 시 네이티브 라이브러리 로드 실패가 발생합니다.

해결책은 철저하게 해당 패키지를 설치한 후 함수 바이너리를 추가하는 맞춤 Docker 이미지를 빌드하는 것입니다. 이 접근법은 Google Cloud Functions에 의해 완전히 지원되며, 네이티브 바이너리가 필요한 모든 함수에 대해 권장되는 전략과 동일합니다. IronPDF Linux 배포 가이드를 참조하여 포함할 패키지 전체 목록을 확인하세요.

참고해 주세요IronPDF가 구글 클라우드에서 Zip 배포를 지원하지 않습니다. IronPDF는 실행 시 네이티브 바이너리를 추출하고 실행해야 하며, 이는 Zip 배포 모델이 제공하지 않는 쓰기 가능한 파일 시스템 및 실행 권한이 필요합니다.

Google Cloud에 맞춤 Dockerfile을 빌드하는 방법은?

맞춤 Dockerfile은 런타임 환경에 대한 완벽한 제어를 제공합니다. 공식 Google Cloud Functions Java 기본 이미지에서 시작하여 Chromium이 필요한 시스템 라이브러리를 설치하세요.

아래의 Dockerfile은 권장 패턴을 보여줍니다. COPYCMD 항목을 귀하의 기능 프로젝트에 맞는 구체적인 내용으로 대체하십시오:

//:path=Dockerfile
# Use the official Google Cloud Functions Java 17 base image
FROM gcr.io/google-appengine/java17:latest

# Install Chrome system dependencies required by IronPDF's rendering engine
RUN apt-get update && apt-get install -y \
    libglib2.0-0 \
    libnss3 \
    libatk1.0-0 \
    libatk-bridge2.0-0 \
    libcups2 \
    libdrm2 \
    libxkbcommon0 \
    libxcomposite1 \
    libxdamage1 \
    libxfixes3 \
    libxrandr2 \
    libgbm1 \
    libasound2 \
    libpango-1.0-0 \
    libpangocairo-1.0-0 \
    --no-install-recommends \
    && rm -rf /var/lib/apt/lists/*

# Grant execute permissions on /tmp so the IronPDF engine can extract there
RUN chmod 777 /tmp/

# Copy the compiled JAR and set the entry point
COPY target/your-function.jar /app/function.jar
CMD ["java", "-jar", "/app/function.jar"]

chmod 777 /tmp/ 줄은 IronPDF가 초기화 과정에서 엔진 바이너리를 작성하고 실행해야 하기 때문에 필요합니다. 작업 디렉토리에 대한 실행 권한이 없으면 엔진이 시작하지 못할 것입니다.

Cloud Functions에 배포하기 전에 docker builddocker run을 사용하여 로컬에서 Docker 이미지를 테스트하십시오. 로컬 테스팅은 종속성 누락을 초기에 포착하고, 느린 클라우드 빌드 사이클을 피합니다.

Google Cloud 배포를 위한 pom.xml 구성 방법은?

표준 ironpdf Maven 아티팩트는 여러 플랫폼용 엔진 바이너리를 포함합니다. Google Cloud Functions (리눅스 x86-64에서 실행)는 플랫폼별 엔진 아티팩트를 추가하여 배포 이미지를 슬림하게 유지하고 필요한 바이너리가 항상 사용 가능하도록 해야 합니다:

//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>2024.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf-engine-linux-x64</artifactId>
        <version>2024.9.1</version>
    </dependency>
</dependencies>
//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf</artifactId>
        <version>2024.9.1</version>
    </dependency>

    <dependency>
        <groupId>com.ironsoftware</groupId>
        <artifactId>ironpdf-engine-linux-x64</artifactId>
        <version>2024.9.1</version>
    </dependency>
</dependencies>
XML

항상 최신 IronPDF for Java 릴리스로 버전 번호를 업데이트하세요. ironpdf-engine-linux-x64 아티팩트는 핵심 ironpdf 아티팩트의 버전과 정확히 일치해야 합니다.

중요한버전 번호를 동기화하세요. 핵심 아티팩트와 엔진 아티팩트 버전 간의 불일치는 런타임 시작 오류를 야기합니다.

Maven Shade Plugin을 추가하는 방법은?

Google Cloud Functions에 uber-JAR(fat JAR)로 배포할 때, maven-shade-plugin는 모든 전이적 종속성의 서비스 로더 파일이 올바르게 병합되도록 보장합니다. 그렇지 않으면 일부 gRPC 서비스 등록이 조용히 제거되어 엔진 초기화에 실패할 수 있습니다.

<build><plugins> 섹션에 다음 플러그인 구성을 추가하십시오:

//:path=pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>

            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
//:path=pom.xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.4</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>

            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
XML

ServicesResourceTransformer 부분이 핵심입니다. 이는 모든 종속성 JAR 파일의 META-INF/services/ 항목을 단일 병합 파일로 결합합니다. gRPC는 Java의 ServiceLoader 메커니즘을 사용하므로, 런타임 시 전송 방식 선택(HTTP/2 대 일반 텍스트)이 작동하려면 병합된 서비스 파일이 필요합니다.

선택적인 gRPC 종속성을 추가하는 방법은?

일부 배포 구성 — 특히 Google Cloud Functions 프레임워크의 특정 버전과 함께 음영 처리된 JAR을 사용할 때 — 명시적인 gRPC 전송 종속성이 필요합니다. 함수가 gRPC 전송이나 채널 오류로 시작하지 않으면 다음을 추가하세요:

//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>io.perfmark</groupId>
        <artifactId>perfmark-api</artifactId>
        <version>0.26.0</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-okhttp</artifactId>
        <version>1.50.2</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.50.2</version>
    </dependency>
</dependencies>
//:path=pom.xml
<dependencies>

    <dependency>
        <groupId>io.perfmark</groupId>
        <artifactId>perfmark-api</artifactId>
        <version>0.26.0</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-okhttp</artifactId>
        <version>1.50.2</version>
    </dependency>

    <dependency>
        <groupId>io.grpc</groupId>
        <artifactId>grpc-netty-shaded</artifactId>
        <version>1.50.2</version>
    </dependency>
</dependencies>
XML

대부분의 경우, grpc-netty-shaded을 포함하는 것으로 실제 배포에 충분합니다. grpc-okhttp 전송 방식은 이미지 크기를 최소화하는 것이 최우선 과제일 때 유용한 경량 대안입니다. 트레이싱 어노테이션 누락에 대한 클래스패스 경고가 발생하는 경우에만 perfmark-api을 추가하십시오.

참고해 주세요Check the gRPC release notes to confirm the latest compatible version for your IronPDF dependency set.

Google Cloud Functions의 리소스 제한 설정 방법은?

IronPDF는 첫 번째 호출 시 Cloud Function 컨테이너 내에서 Chromium 하위 프로세스를 시작합니다. Chromium의 시작과 초기 렌더링은 메모리 집약적이며, 엔진이 초기화될 때까지 기능이 살아있어야 합니다. Cloud Functions의 기본 리소스 제한은 안정적인 작동에 비해 너무 낮습니다.

함수를 배포할 때 Google Cloud Console 또는 gcloud CLI를 통해 다음 제한 사항을 구성하십시오:

IronPDF Java용 Google Cloud Function 리소스 설정 추천
설정 권장 값 이유
타임아웃 330초 콜드 시작 시 크로미엄 초기화는 60-90초가 걸릴 수 있습니다. 엔진이 준비되기 전에 기능이 타임아웃되지 않도록 하세요.
메모리 2,048 MB 이상 크로미엄은 복잡한 HTML 페이지를 렌더링하기 위해 상당한 RAM을 요구합니다. 메모리가 부족하면 프로세스가 렌더링 중간에 중지됩니다.
임시 저장소 1,024 MB 이상 엔진 바이너리와 임시 PDF 파일은 /tmp/에 작성됩니다. 저장 공간이 부족하면 추출실패나 쓰기 실패가 발생합니다.

이 값은 시작점입니다. 고성능 또는 복잡한 PDF 생성에는 더 높은 메모리 할당이 필요할 수 있습니다. Cloud Function 메모리 사용량 메트릭을 Google Cloud 콘솔에서 모니터링하고, 메모리 부족 오류가 발생하면 제한을 늘리세요.

경고타임아웃을 180초 이하로 줄이지 마세요. Cloud Functions에서 IronPDF의 냉각 시작 초기화는 일반 Java 기능보다 더 많은 시간이 일관되게 필요합니다.

작업 디렉토리 및 파일 권한을 구성하는 방법은?

IronPDF 엔진은 시작 시 바이너리를 작업 디렉터리에 추출합니다. Google Cloud Functions에서는 /tmp/ 경로만이 쓰기 및 실행이 가능합니다. any IronPDF API를 호출하기 전에 작업 디렉토리를 명시적으로 설정하고, 해당 경로에 필요한 권한이 Dockerfile에 부여되도록 하세요.

초기 설정 함수 진입점의 맨 위에 이 설정 호출을 추가하세요.

//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.설정s;
import java.nio.file.Paths;

public class PdfFunction {
    static {
        // Must be called before any IronPDF operation.
        // /tmp/ is the only writable and executable directory in Cloud Functions.
        설정s.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
//:path=/static-assets/pdf/content-code-examples/tutorials/google-cloud/configure-working-directory.java
import com.ironsoftware.ironpdf.설정s;
import java.nio.file.Paths;

public class PdfFunction {
    static {
        // Must be called before any IronPDF operation.
        // /tmp/ is the only writable and executable directory in Cloud Functions.
        설정s.setIronPdfEngineWorkingDirectory(Paths.get("/tmp/"));
    }
}
JAVA

그런 다음 Dockerfile에 해당 권한 명령을 추가하세요:

//:path=Dockerfile
# Ensure the IronPDF engine can extract and run binaries from /tmp/
RUN chmod 777 /tmp/

static {} 초기화 블록을 사용하면 함수 내의 어떤 클래스도 IronPDF 엔진을 로드하기 전에 작업 디렉터리가 구성되도록 보장합니다. 인스턴스 메서드나 요청 핸들러에서 이를 설정할 경우, 경로가 구성되기 전에 다른 스레드가 엔진을 초기화할 위험이 있습니다.

다음 단계는 무엇인가요?

이 가이드는 맞춤 Docker 컨테이너를 사용하여 Google Cloud Function 내에서 IronPDF for Java를 실행하기 위한 전체 구성을 다룹니다. 주요 사항은 다음과 같습니다: Chrome 시스템 종속성을 설치하는 사용자 정의 Dockerfile을 사용하고, ironpdf-engine-linux-x64 Maven 아티팩트를 포함하고, 작업 디렉터리를 /tmp/로 설정하며, 타임아웃을 최소 330초, 메모리를 최소 2,048MB로 설정하고, 서비스 로더 파일을 병합하기 위해 maven-shade-plugin를 추가하는 것입니다.

IronPDF for Java 문서를 방문하여 IronPDF for Java의 더 많은 기능을 탐색하거나 다음 가이드 중 하나를 시도하세요:

무료 체험 라이선스 받기 하여 Google Cloud 환경에서 IronPDF for Java를 테스트하세요. 생산 배포를 위해서는 라이선스 키가 필요합니다. 라이브로 나갈 준비가 되었을 때, 라이선스 구매하세요.

자주 묻는 질문

IronPDF for Java가 기본 Google Cloud Function 이미지에서 시작하지 않는 이유는 무엇입니까?

기본 Cloud Function 런타임 이미지는 Chromium이 필요로 하는 리눅스 시스템 라이브러리(libnss3, libatk1.0-0 및 관련 그래픽 패키지)를 포함하지 않습니다. IronPDF의 렌더링 엔진은 내부적으로 Chromium을 사용하므로 이들 종속성을 명시적으로 설치하는 사용자 지정 Dockerfile이 필요합니다.

왜 IronPDF가 Google Cloud에 대해 Zip 배포를 지원하지 않나요?

IronPDF는 런타임에 네이티브 Chromium 바이너리를 추출하고 실행해야 합니다. Zip 배포 모델은 쓰기 가능하고 실행 가능한 파일 시스템을 제공하지 않으므로 엔진이 바이너리를 추출하거나 실행할 수 없습니다. Docker 기반 배포가 필요합니다.

Google Cloud Functions에서 IronPDF에 대한 어떤 Maven 종속성이 필요한가요?

com.ironsoftware 그룹의 ironpdf-engine-linux-x64pom.xml에 추가하세요. 버전 번호는 ironpdf 핵심 아티팩트와 정확히 일치해야 합니다. 이 아티팩트는 IronPDF 렌더링에 사용되는 Linux x86-64 Chromium 바이너리를 번들로 제공합니다.

IronPDF for Java는 왜 maven-shade-plugin이 필요한가요?

uber-JAR로 패키징할 때, ServicesResourceTransformer를 사용한 maven-shade-plugin이 모든 종속성 JAR의 META-INF/services/ 파일을 병합합니다. 이를 사용하지 않으면 gRPC 서비스 등록이 조용히 누락되어 IronPDF 엔진 초기화에 실패할 수 있습니다.

IronPDF를 실행하는 Google Cloud Functions에 필요한 시간 초과 및 메모리 설정은 무엇인가요?

함수 시간 초과를 330초로 설정하고, 메모리를 최소 2048 MB로, 임시 저장소를 최소 1024 MB로 구성하세요. 차가운 시작에서의 Chromium 초기화는 60에서 90초가 걸릴 수 있으며, 엔진은 복잡한 HTML 페이지 렌더링을 위해 상당한 메모리가 필요합니다.

Google Cloud에서 Settings.setIronPdfEngineWorkingDirectory가 /tmp/를 가리켜야 하는 이유는 무엇입니까?

/tmp/ 디렉터리는 대부분의 Google Cloud Function 런타임에서 유일한 쓰기 가능하고 실행 가능한 경로입니다. IronPDF는 이 위치에 엔진 바이너리를 추출하고 임시 파일을 작성해야 합니다. 이 설정이 없으면 엔진은 적절한 추출 대상을 찾을 수 없어 시작에 실패합니다.

왜 Dockerfile에 RUN chmod 777 /tmp/가 필요합니까?

IronPDF의 엔진 바이너리는 /tmp/에서 작성되고 실행되어야 합니다. 일부 기본 이미지의 /tmp/의 기본 권한은 모든 사용자에 대한 실행 권한을 포함하지 않습니다. chmod 777 명령은 함수 런타임 사용자가 바이너리를 추출하고 시작할 수 있도록 보장합니다.

어떤 경우에 grpc-okhttp를 grpc-netty-shaded 대신 사용해야 하나요?

grpc-netty-shaded는 더 완전한 HTTP/2 구현을 제공하므로 프로덕션에 권장됩니다. grpc-okhttp는 Docker 이미지 크기를 최소화하는 것이 우선인 경우 유용한 경량 대안입니다. 두 전송 모두 Google Cloud Functions에서 IronPDF for Java와 함께 작동합니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

시작할 준비 되셨나요?
버전: 2026.5 just released
Still Scrolling Icon

아직도 스크롤하고 계신가요?

빠른 증거를 원하시나요?
샘플을 실행하세요 HTML이 PDF로 변환되는 것을 지켜보세요.