최신 업데이트:2025-08-18 15:54:12
이 문서는 오브젝트 스토리지 서비스용 Java SDK v2의 시작 방법과 주요 기능 사용에 대한 자세한 가이드를 제공합니다.
시스템에 Java가 설치되어 있어야 합니다. Java 1.7 이상을 권장합니다. java -version 명령어로 Java 버전을 확인할 수 있습니다.
Java SDK Rest v2는 다음과 같은 다양한 샘플 프로그램을 제공합니다.
| 샘플 파일 | 설명 |
|---|---|
| DownloadSample | 기본 파일 다운로드 |
| SimpleMultipartUploadSample | 멀티파트 업로드 |
| ListObjectsSample | 오브젝트(객체) 목록 조회 |
| ObjectOperationsSample | 오브젝트 관리 |
| DeleteObjectsSample | 오브젝트 일괄 삭제 |
| BucketLifecycleSample | 버킷 라이프사이클 관리 |
| ConcurrentCopyPartSample | 멀티스레드 멀티파트 복사 |
| ConcurrentDownloadObjectSample | 멀티스레드 멀티파트 다운로드 |
| ConcurrentUploadPartSample | 멀티스레드 멀티파트 업로드 |
| CreateFolderSample | “폴더” 생성 |
| DeleteObjectsSample | 오브젝트 일괄 삭제 |
| ListBucketsSample | 버킷 목록 조회 |
| ListObjectsV2Sample | 오브젝트 목록 조회(v2) |
| ObjectMetaSample | 오브젝트 메타데이터 설정 |
| PostObjectSample | Form 업로드 |
| RestoreObjectSample | 오브젝트 복원(해제) |
작업을 수행하기 전에 Java SDK를 설치해야 합니다. SDK는 GitHub 에서 다운로드할 수 있습니다.
Maven 프로젝트에 의존성 추가
<dependency>
<groupId>com.chinanetcenter.wcs.sdk</groupId>
<artifactId>wcs-java-sdk-v2</artifactId>
<version>1.0.3</version>
</dependency>
IntelliJ IDEA에서 JAR 파일 import
wcs-java-sdk-rest-v2-1.0.0.jar 파일과 lib 디렉토리의 모든 JAR 파일을 프로젝트에 복사합니다.File -> Project Structure -> Modules -> Dependencies -> + -> JARs or directories로 이동합니다.WosClient는 버킷 및 오브젝트 관리를 위한 Java 클라이언트입니다. Java SDK를 사용하기 전에 WosConfiguration을 초기화하고 필요시 기본 설정을 조정해야 합니다.
// Access Key(ak), Secret Key(sk)는 콘솔의 유저 센터 > 내 정보 > AccessKey 관리에서 확인
// endpoint, regionName은 콘솔의 오브젝트 스토리지 > 버킷 개요에서 확인
String endPoint = "https://your-endpoint";
String regionName = "your regionName";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
WosConfiguration config = new WosConfiguration();
config.setSocketTimeout(30000);
config.setConnectionTimeout(10000);
config.setEndPoint(endPoint);
config.setRegionName(regionName);
// WosClient 인스턴스 생성
WosClient wosClient = new WosClient(ak, sk, config);
// wosClient 종료
wosClient.close();
// WosClient 인스턴스 생성
WosClient wosClient = new WosClient(ak, sk, config, regionName);
// wosClient 종료
wosClient.close();
참고: WosClient를 생성할 때 Endpoint 지정이 필수입니다. 프로젝트 내에서 하나 이상의 WosClient 인스턴스를 생성할 수 있습니다. WosClient는 스레드 세이프하며, 동시에 여러 요청을 처리할 수 있습니다.
WosConfiguration을 통해 WosClient를 설정할 수 있으며, 타임아웃/최대 연결 수 등 다양한 파라미터를 지원합니다. 주요 옵션은 다음과 같습니다.
| 설정 값 | 설명 | 메서드 |
|---|---|---|
| connectionTimeout | HTTP/HTTPS 연결 타임아웃 (ms). 기본값: 60000 | WosConfiguration.setConnectionTimeout |
| socketTimeout | 소켓 타임아웃 (ms). 기본값: 60000 | WosConfiguration.setSocketTimeout |
| idleConnectionTime | 유휴(Idle) 연결 자동 종료 시간 (ms). 기본값: 30000 | WosConfiguration.setIdleConnectionTime |
| maxIdleConnections | 커넥션 풀 내 최대 유휴 연결 수. 기본값: 1000 | WosConfiguration.setMaxIdleConnections |
| maxConnections | 동시 처리 가능한 최대 HTTP 요청 수. 기본값: 1000 | WosConfiguration.setMaxConnections |
| maxErrorRetry | 실패 시 재시도 횟수. 기본값: 3 | WosConfiguration.setMaxErrorRetry |
| endPoint | 오브젝트 스토리지 서비스 주소(프로토콜, 도메인, 포트). 예: “https://your-endpoint:443” | WosConfiguration.setEndPoint |
| readBufferSize | 소켓 스트림 읽기 버퍼(바이트). 기본값: -1(비활성화) | WosConfiguration.setReadBufferSize |
| writeBufferSize | 소켓 스트림 쓰기 버퍼(바이트). 기본값: -1(비활성화) | WosConfiguration.setWriteBufferSize |
| pathStyle | false: bucketName.endpoint 도메인 방식 / true: ‘endpoint/bucketName’ 형식 사용 |
WosConfiguration.setPathStyle |
Java SDK로 다음의 대표적인 작업을 지원합니다:
아래 코드는 오브젝트 업로드 방법을 보여줍니다.
wosClient.putObject("bucketname", "objectname", new ByteArrayInputStream("Hello WOS".getBytes()));
아래 코드는 오브젝트 내용을 다운로드하는 방법입니다.
WosObject wosObject = wosClient.getObject("bucketname", "objectname");
InputStream content = wosObject.getObjectContent();
if (content != null) {
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
while (true) {
String line = reader.readLine();
if (line == null)
break;
System.out.println("\n" + line);
}
reader.close();
}
참고:
wosObject.getObject로 오브젝트 내용 및 메타데이터가 포함된 WosObject 인스턴스를 얻을 수 있습니다.wosObject.getObjectContent로 InputStream을 얻어 읽을 수 있으며, 사용 완료 후 스트림을 닫아야 합니다.여러 오브젝트 업로드 후 버킷의 콘텐츠를 조회하려면 다음과 같이 할 수 있습니다.
ObjectListing objectListing = wosClient.listObjects("bucketname");
for (WosObject wosObject : objectListing.getObjects()) {
System.out.println(" - " + wosObject.getObjectKey() + " " + "(size = " + wosObject.getMetadata().getContentLength() + ")");
}
참고:
wosClient.listObjects는 ObjectListing 인스턴스를 반환합니다. 이를 통해 ObjectListing.getObjects로 오브젝트 목록에 접근할 수 있습니다.오브젝트를 삭제하려면 다음과 같이 호출합니다.
wosClient.deleteObject("bucketname", "objectname");
오브젝트에 접근하기 위한 서명된 URL을 생성하는 예시는 다음과 같습니다.
TemporarySignatureRequest req = new TemporarySignatureRequest(HttpMethodEnum.GET, 300);
req.setBucketName(bucketName);
req.setObjectKey(objectKey);
TemporarySignatureResponse res = wosClient.createTemporarySignature(req);
System.out.println("Getting object using temporary signature URL:");
System.out.println("\t" + res.getSignedUrl());
API 호출 후 예외가 발생하지 않으면 결과가 유효하며, 반환 객체는 기본 SDK 응답 클래스거나 그 하위 클래스입니다. 예외가 발생하면 SDK의 커스텀 예외 객체에서 오류 정보를 확인하세요.
아래 코드는 WOS Client의 일반적인 사용 예시입니다.
// 프로젝트 내에서 전역 WosClient 인스턴스를 하나만 유지할 수 있습니다.
// WosClient는 스레드 세이프하며 동시 사용을 지원합니다.
WosClient wosClient = null;
try {
String endPoint = "https://your-endpoint";
String regionName = "your regionName";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// config 생성
WosConfiguration config = new WosConfiguration();
config.setSocketTimeout(30000);
config.setConnectionTimeout(10000);
config.setEndPoint(endPoint);
config.setRegionName(regionName);
// WosClient 인스턴스 생성
wosClient = new WosClient(ak, sk, config);
// 예시: 파일 업로드 API 호출
HeaderResponse response = wosClient.putObject("bucketname", "objectname", new File("localfile")); // 'localfile'은 업로드할 파일의 경로로, 전체 파일명을 입력하세요.
System.out.println(response);
} catch (WosException e) {
System.out.println("HTTP Code: " + e.getResponseCode());
System.out.println("Error Code: " + e.getErrorCode());
System.out.println("Error Message: " + e.getErrorMessage());
System.out.println("Request ID: " + e.getErrorRequestId());
System.out.println("Host ID: " + e.getErrorHostId());
} finally {
// WosClient 인스턴스 종료. 전역 WosClient를 사용하는 경우, 매 API 호출 후 매번 종료할 필요는 없습니다.
// wosClient.close() 호출 후 인스턴스를 재사용하면 안 됩니다.
if (wosClient != null) {
try {
// wosClient.close();
} catch (IOException e) {
// 필요시 예외 처리
}
}
}