[java] Java Apache CXF와 Azure 통합

Azure는 Microsoft의 클라우드 컴퓨팅 플랫폼으로, 다양한 기능을 제공하여 개발자들이 웹 애플리케이션, 데이터베이스, 스토리지 등을 구축하고 운영할 수 있도록 도와줍니다. 이러한 기능을 활용하기 위해서는 효율적인 통합이 필요한데, Java 프로그래밍 언어를 사용하여 Apache CXF와 Azure를 함께 사용하는 방법에 대해서 알아보겠습니다.

Apache CXF란?

Apache CXF는 Java 기반의 오픈 소스 웹 서비스 프레임워크로, 다양한 웹 서비스 표준을 지원하고 간편한 개발 경험을 제공합니다. CXF를 사용하면 SOAP 및 RESTful 웹 서비스를 구축하고 클라이언트와 서버 간의 통신을 쉽게 처리할 수 있습니다.

Azure와의 통합 방법

Azure와 Apache CXF를 통합하는 방법은 다양한 접근 방식이 있을 수 있으며, 필요에 따라 선택할 수 있습니다. 여기에서는 Azure의 내부 스토리지를 사용하여 파일 업로드와 다운로드를 처리하는 예제를 제공하겠습니다.

먼저, Maven 프로젝트를 생성하고 다음 종속성을 추가합니다:

<dependencies>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-core</artifactId>
        <version>3.3.7</version>
    </dependency>
    
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-storage-blob</artifactId>
        <version>12.8.1</version>
    </dependency>
</dependencies>

이제 파일 업로드와 다운로드를 처리할 CXF 서비스를 구현해보겠습니다. 먼저, 파일 업로드를 처리하기 위한 메서드를 작성합니다:

import com.azure.storage.blob.BlobContainerClient;
import com.azure.storage.blob.BlobServiceClientBuilder;
import org.apache.cxf.jaxrs.ext.multipart.Multipart;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import java.io.InputStream;

@Path("/file")
public class FileService {

    private final BlobContainerClient containerClient;

    public FileService() {
        String connectionString = "YOUR_AZURE_CONNECTION_STRING";
        containerClient = new BlobServiceClientBuilder()
                .connectionString(connectionString)
                .buildClient()
                .getBlobContainerClient("files");
    }

    @POST
    @Path("/upload")
    public Response uploadFile(@Multipart("file") InputStream fileStream) {
        containerClient.getBlobClient("uploaded-file").upload(fileStream);
        return Response.ok("File uploaded successfully.").build();
    }
}

위의 코드에서 YOUR_AZURE_CONNECTION_STRING 부분에는 Azure의 연결 문자열을 넣어야 합니다. 이 연결 문자열은 Azure 포털에서 확인할 수 있습니다.

다음으로, 파일 다운로드를 처리하는 메서드를 작성합니다:

import com.azure.storage.blob.BlobClient;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import java.io.ByteArrayOutputStream;

@Path("/file")
public class FileService {

    // 이전 코드 생략

    @GET
    @Path("/download")
    @Produces("application/octet-stream")
    public Response downloadFile() {
        BlobClient blobClient = containerClient.getBlobClient("uploaded-file");
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        blobClient.download(outputStream);
        byte[] fileBytes = outputStream.toByteArray();
        return Response.ok(fileBytes, "application/octet-stream")
                .header("Content-Disposition", "attachment; filename=\"uploaded-file\"")
                .build();
    }
}

위의 코드는 uploaded-file이라는 이름으로 저장된 Blob 파일을 다운로드하는 메서드입니다.

Azure와 Apache CXF의 통합 방법에는 다양한 접근 방식과 사용할 수 있는 기능이 많이 있습니다. 이 글에서는 파일 업로드와 다운로드를 예로 들었지만, Azure의 다른 기능을 활용할 수도 있습니다. 참고 자료와 Azure의 공식 문서를 참고하여 필요한 기능을 추가적으로 개발하시기 바랍니다.

참고 자료