[이렇게 사용하세요!] 네이버 클라우드 플랫폼 유저 API 활용 방법 — 2편
* 본 기술 포스팅은 네이버클라우드 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]
1편과 사용 방법이 동일하여 생성/삭제 샘플을 준비하였습니다. [샘플]
두 번째는 Object Storage입니다.
Object Storage의 유저 API의 경우 아래와 같은 기능들이 존재합니다.
만약 기존 연동 방식과 달라 어려움이 있으시다면, Object Storage SDK를 활용해 보세요. [사용가이드]
사용 가이드에 SDK를 이용한 샘플도 있습니다.
샘플을 참고하여, 생성, 업로드, 다운로드, 삭제를 JAVA 코드로 구현해 보았습니다. [샘플]
Object Storage의 경우 리전 별로 endpoint가 다른데, 이를 참고하여 만든 샘플입니다.
세 번째는 Archive Storage입니다.
Archive Storage는 상대적으로 사용 빈도가 낮지만 장기간 보유가 필요한 데이터를 합리적인 가격에 저장하기에 적합한 서비스입니다.
* 참고: Archive Storage는 한국 리전에서만 지원 됩니다.
Archive Storage 또한 Object Storage 마찬가지로 SDK가 존재합니다. [바로가기]
SDK 사용 전 API 이용 정보를 먼저 확인해야 합니다.
API 이용 정보는 Archive Storage 상품 Console 상단 “API 이용 정보 확인” 버튼을 눌러 확인하실 수 있습니다.
팝업을 통해 Domain ID와 Project ID를 확인할 수 있습니다.
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 활용 방법은 온라인 무료교육 영상으로도 살펴보실 수 있습니다.
네이버 클라우드 플랫폼은 앞으로도 사용자 여러분이 다양한 방법으로 클라우드 서비스를 활용하실 수 있도록 노력하겠습니다.
* 본 포스팅과 관련된 궁금증은 댓글로 남겨주시면 답변드리겠습니다.