본문 바로가기

개발/Others

[NCP] S3 SDK를 Naver 클라우드에서 사용해보자

네이버 클라우드에는 저장소로 Object Storage를 제공하고 있다.

쉽게 얘기하자면 AWS의 S3와 같은 기능을 한다고 보면 좋겠다.

 

현재 프로젝트는 클라우드 서비스를 AWS 환경에서만 제공하고 있었는데,

클라우드 서비스 보안인증제도(CSAP) 심사를 위해 네이버 클라우드(공공기관용)의 호환성을 가져갈 필요가 생겼다.

 

기존 Java, Spring 프로젝트에서는 AWS에서 제공하는 S3 SDK를 사용하여 파일 업로드를 구현하고 있었다.

// build.gradle
implementation 'software.amazon.awssdk:s3:2.17.239'

 

기존의 S3Client 생성 로직에서 분기처리를 해준다.

@Component
public class S3 {

    @Value(value = "${csp}")
    private String csp;
    
    @Value(value = "${access-key}")
    private String accessKey;

    @Value(value = "${secret-key}")
    private String secretKey;

    private static final String NCP_ENDPOINT = "https://kr.object.gov-ncloudstorage.com";
    private static final String NCP_REGION = "gov-standard";
    
    private S3Client s3Client() {
        if (csp.equals("aws")) {
            return S3Client.builder()
                    .region(Region.of(region))
                    .build();
        } else if (csp.equals("ncp")) { // 추가
            return S3Client.builder()
                    .region(Region.of(NCP_REGION))
                    .endpointOverride(URI.create(NCP_ENDPOINT))
                    .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretKey)))
                    .build();
        }
        throw new CustomException(ExceptionType.CSP_NOT_FOUND);
    }
}

위의 코드와 같이, 적절한 환경변수를 통한 필드 추가로,

S3 SDK를 네이버 클라우드 Object Storage에서 사용할 수 있다.

이제 기존의 S3 업로드 로직을 수정하지 않고도 Naver Cloud 환경에 업로드/다운로드가 가능해졌다.


다만 여기에서 차이가 있다면, 코드를 보면 알 수 있겠지만 AWS에서는 같은 VPC라면 IAM(자격 증명)을 통해 인스턴스에 S3에 업로드 할 수 있는 권한을 부여하여, access_key, secret_key 없이도 동작하는 반면,

네이버 클라우드는 IAM 기능이 지원되지 않기 때문에, 직접 키의 정보를 입력해주어야 한다는 점이다.

 

다음에는 Naver Cloud의 캐시서버인 CDN+ 의 캐시 삭제 동작에 대해 포스팅 하겠다.

'개발 > Others' 카테고리의 다른 글

[NCP] Naver Cloud의 CDN 기능을 사용해보자  (1) 2024.03.03
[보안] JWT란 무엇일까  (1) 2023.12.22
[ELK] 마치 SQL처럼 사용하자  (0) 2023.09.10
[ELK] 시작한 김에 ELK(2)  (0) 2023.09.02
[ELK] 시작한 김에 ELK(1)  (0) 2023.08.27