[이렇게 사용하세요!] 네이버 클라우드 플랫폼 유저 API 활용 방법 — 2편

NAVER Cloud
NAVER Cloud
Published in
9 min readJun 3, 2021

* 본 기술 포스팅은 네이버클라우드 Cloud Development 정금영 님의 작성 글입니다.

얼마 전 올려드린 네이버 클라우드 플랫폼 ‘유저 API 이용하기 — 1편’.

유익하게 보셨나요?

오늘은 ‘유저 API 이용하기 — 2편’으로 찾아왔습니다.

1편에서는 VPC 생성부터 VPC Server 생성까지의 과정을 보여드렸다면, 오늘은 Storage 유저 API 사용 방법을 공유드리려고 합니다.

네이버 클라우드 플랫폼에서 유저 API로 제공하는 Storage API는 Object Storage, Archive Storage 그리고 VPC 용 NAS입니다.

Storage API는 이럴 때 이용할 수 있습니다.

  • 대용량의 데이터 저장소로 활용하고 싶을 때
  • 중요한 데이터를 백업하거나 장기 보관하고 싶을 때

지금부터 Storage 유저 API를 하나씩 설명드리겠습니다.

우선 첫 번째는 NAS입니다.

시작에 앞서, 아래 설명은 VPC 환경을 기준으로 하는 점을 안내드립니다.

NAS 유저 API는 VPC 환경에서 이용 가능하며, Classic 접속 환경에서의 NAS는 유저 API를 제공하지 않습니다.

NAS는 VPC 용 Linux Server와 Windows Server 모두를 Mount 할 수 있습니다.

NAS 유저 API의 경우 1편에서 소개 드린 Compute & Network 유저 API와 인증 및 사용 방식이 동일합니다. [Guide Link]

[NAS에서 제공되는 유저 API]

1편과 사용 방법이 동일하여 생성/삭제 샘플을 준비하였습니다. [샘플]

두 번째는 Object Storage입니다.

Object Storage의 유저 API의 경우 아래와 같은 기능들이 존재합니다.

[Guide Link]

만약 기존 연동 방식과 달라 어려움이 있으시다면, Object Storage SDK를 활용해 보세요. [사용가이드]

[사용 가이드 내 SDK 관련 메뉴]

사용 가이드에 SDK를 이용한 샘플도 있습니다.

샘플을 참고하여, 생성, 업로드, 다운로드, 삭제를 JAVA 코드로 구현해 보았습니다. [샘플]

Object Storage의 경우 리전 별로 endpoint가 다른데, 이를 참고하여 만든 샘플입니다.

세 번째는 Archive Storage입니다.

Archive Storage는 상대적으로 사용 빈도가 낮지만 장기간 보유가 필요한 데이터를 합리적인 가격에 저장하기에 적합한 서비스입니다.

* 참고: Archive Storage는 한국 리전에서만 지원 됩니다.

Archive Storage 또한 Object Storage 마찬가지로 SDK가 존재합니다. ​[바로가기]

[사용 가이드 내 SDK 관련 메뉴]

SDK 사용 전 API 이용 정보를 먼저 확인해야 합니다.

API 이용 정보는 Archive Storage 상품 Console 상단 “API 이용 정보 확인” 버튼을 눌러 확인하실 수 있습니다.

[Archive Storage Console 화면]

팝업을 통해 Domain ID와 Project ID를 확인할 수 있습니다.

[API 이용 정보 확인 팝업]

SDK와 API 이용 정보를 이용해서, 생성, 삭제, 업로드, 다운로드를 구현한 샘플을 공유드립니다. [샘플]

샘플 코드를 만들며 작업하는 경우, 파일 업로드나 폴더 삭제 시 중간 경로가 빠지는 경우가 있는데요, 해당 경로도 포함하여 처리할 수 있도록 로직도 추가해 보았습니다. 또한 폴더를 생성하지 않아도 하위 경로에 파일을 올릴 수 있습니다. 혹시 중간 Path 상 생성일자가 보이지 않아 염려하시는 분들을 위해 중간 Path를 생성하는 로직도 샘플에 포함하였습니다.

중간 Path를 생성하는 로직

public String createDirectory(CreateDirectoryParamDto paramDto) {
final OSClient.OSClientV3 client = createClient();
final ObjectStorageContainerService containerService = client.objectStorage().containers(); final String[] directoryPathList = paramDto.getDirectoryPath().split("/"); String path = "";
for (String directoryName : directoryPathList) {
path += directoryName + "/";
containerService.createPath(paramDto.getContainerName(), path);
}
return path;
}

Container 삭제 시 비어있지 않은 경우 유저 API로는 삭제가 불가능합니다.

Container 내 Object들을 삭제하는 샘플을 준비해보았습니다.

하위 Object를 삭제하는 로직

public void deleteObject(DeleteObjectParamDto paramDto) {
final OSClient.OSClientV3 client = createClient();
final ObjectStorageObjectService objectService = client.objectStorage().objects(); final List<SwiftObject> objectList = getAllObjectList(paramDto); final List<String> deleteFailList = new ArrayList<>();
for (SwiftObject object : objectList) {
final ActionResponse response = objectService.delete(paramDto.getContainerName(), object.getName());
// 204 - 삭제됨
if (!response.isSuccess()) {
deleteFailList.add(object.getName());
}
}
if (CollectionUtils.isNotEmpty(deleteFailList)) {
throw new RuntimeException("일부 데이터 삭제에 실패 했습니다.");
}
}
private List<SwiftObject> getAllObjectList(DeleteObjectParamDto paramDto) {
final OSClient.OSClientV3 client = createClient();
final ObjectStorageObjectService objectService = client.objectStorage().objects(); final List<? extends SwiftObject> objects = objectService.list(paramDto.getContainerName()); return objects.stream().filter(t -> t.getName().startsWith(paramDto.getObjectPath())).collect(Collectors.toCollection(ArrayList::new));
}

샘플 코드를 작성하고 테스트하는 과정에서 알게 된 유익한 정보도 공유드립니다.

1. 동일 Path에 Object 업로드 시 덮어쓰기가 됩니다.

2. 컨테이너 생성 실패 시에는 Response Code 202로 반환됩니다.

본 가이드를 통해 더 많은 고객분들이 네이버 클라우드 플랫폼 API를 서비스에서 활용할 수 있었으면 좋겠습니다.

네이버 클라우드 플랫폼 API 활용 방법은 온라인 무료교육 영상으로도 살펴보실 수 있습니다.

네이버 클라우드 플랫폼은 앞으로도 사용자 여러분이 다양한 방법으로 클라우드 서비스를 활용하실 수 있도록 노력하겠습니다.

* 본 포스팅과 관련된 궁금증은 댓글로 남겨주시면 답변드리겠습니다.

누구나 쉽게 시작하는 클라우드 — ncloud.com

--

--

NAVER Cloud
NAVER Cloud

We provide cloud-based information technology services for industry leaders from startups to enterprises.