2024년 3월 7일

코딩 - Cloud Ready : Spring Boot & Oracle Object Storage

◼︎ 환경

  • Model : MacBook Pro (14-inch, 2021)
  • CPU : Apple M1 Pro
  • MENORY : 16GB
  • DISK : 512 GB SSD
  • OS : macOS 13.2.4 (22F66)
  • TOOLS : Visual Studio Code, Java 11, Gradle, Docker
  • Version Control : GitHub
  • Programming Language : Java
  • Framework : Spring Boot 2.7.12, Spring Security 5.7.7
  • Cache : ehcahce 2.10.9.2, Guava 31.1-jre
  • DBMS : MySql 8.0.33
  • Cloud : OCI (free tier account)

OCI 오브젝트 스토이지 버킷 생성

OCI 오브젝트 스토리지 버킷 생성은 다음 절차로 진행한다. ( 계정은 free tier 을 이용하였다. )

※ 스토이지 버킷(Storage Bucket)는 대부분의 클라우드 기반 객체 스토리지 서비스에서 사용되는 컨테이너 개념으로 Amazon S3, Google Cloud Storage, Microsoft Azure Blob Storage, Oracle Cloud Object Storage 등에서 사용된다. 파일이나 데이터를 버킷에 저장하면 클라우드 제공 업체가 제공하는 다양한 기능(데이터의 보관, 버전 관리, 접근 제어, 보안, 데이터 복제)을 활용할 수 있다.
  1. OCI 콘솔 왼쪽 상단의 햄버거 아이콘을 클릭
  2. 스토이지 를 클릭합
  3. 오브젝트 스토리지 및 아카이브 스토리지 아래에 있는 "버킷"을 클릭
  4. 버킷 생성 버튼을 클릭. 팝업 창이 열리면 "생성"을 클릭(기본 구성 유지)





API 연계를 위한 개인키 구성 파일 생성

프로그램에서 OCI 오브젝트 스토리지와 연결하려면 개인 키와 구성 파일을 생성해야 한다. 생성은 아래 절차로 진행한다.
  1. OCI 콘솔에서 프로필 세부 정보 페이지로 이동 
  2. API 키 탭으로 이동
  3. API 키 추가 버튼을 클릭 



  1. 프라이빗 키 다운로드 버튼을 클릭 파일을 다운로드 
  2. 다운로드한 비밀키 파일을 스프링 부팅 애플리케이션 루트에 복사
  3. 추가 버튼을 를 클릭 API 키를 추가 
  4. 구성 파일 미리보기 복사 링크를 클릭하여 구성파일 내용을 복사
  5. 스프링 부팅 애플리케이션 프로젝트 루트 폴더에 파일 확장자 없이 "config"라는 이름의 파일을 만들고 복사한 콘텐츠를 추가.  config 파일에서 다운로드한 개인 키가 저장된 경로를 업데이트 (<path to your private keyfile>)




스프링 부트 의존성 추가 

스프링 부트 애플리케이션 프로젝트에 OCI Java SDK 사용을 위한 의존성을 build.gradle 파일에 추가한다. 추가되는 의존성은 아래와 같다.

  • implementation 'com.oracle.oci.sdk:oci-java-sdk:3.36.0'
  • implementation 'com.oracle.oci.sdk:oci-java-sdk-objectstorage:3.36.0'
  • implementation 'com.oracle.oci.sdk:oci-java-sdk-common-httpclient-jersey:3.36.0'


OCI 오브젝트 스토리지 클라이언트 클래스 구현

다음으로 앞서 생성한 OCI 오브젝트 스토리지 접속을 위한 클라이언트 클래스를 구현한다.


SDK 에서 제공하는 API 는 앞서 저장한 OCI config file 과 비밀키를 읽어드리기 위하여 파일위치를 지정하도록 되어 있다. 배포의 용의성을 위해서 프로젝트 리소스에서 읽어드릴 수 있도록 SDK 소스를 일부를 아래와 같이 수정하여 사용하였다. (src/main/resources/oci 경로에 config 와 privite_key.pem 파일 복사, config 파일 key_file 값을 oci/private_key.pem 수정 )
  1. ConfigFileAuthenticationDetailsProvider -> ClasspathConfigFileAuthenticationDetailsProvider.java
  2. SimplePrivateKeySupplier.java -> ClasspathPrivateKeySupplier.java


OCI 오브젝트 스토리지 테스트 클래스 구현

OCI 오브젝트 스토이지에 파일을 추가하려면 먼저 버킷이 필요하다. 생성된 버킷 목록을 조회하려면 compartmentId 와 namespaceName 값이 요구된다. 

⑴ namespaceName 값은 우측 상단 사용자 아이콘을 클릭하고, 테넌시 이름을 클릭 테넌시 상세 페이지로 이동한다. 테넌시 정보 구획에서 오브젝트 스토이지 네임스페이스 값이 namespaceName 이다.  




⑵ compartmentId 는 OCI 콘솔 > ID& 보안 > 구획 메뉴를 통하여 확인 할 수 있다. 목록에서 이름을 클릭, "구획정보"섹션에서 "OCID"를 값을 확인할 수 있는데 이 값이 해당 구획(compartment) 의 compartmentId 값이다.


OCI 오브젝트 스토이지에 파일을 추가하는 것은 PutObjectRequest 을 생성하여 쉽게 구현할 수 있다. 주의할 점은 object name 은 버킷 내에서 고유 해야 한다는 점이다. 



이제 OCI 오브젝트 스토이지에 존재하는 파일 목록을 조회하는 테스트 코드를 만들어 본다. 오브젝트 스토이지는 위에서 생성한 것을 사용하였다.


bucket name 과 namespace 정보는 OCI 콘솔 > 스토이지 > 오브젝트 스토리지 및 아카이브 스토리지 버킷 목록 화면에서 생성된 버킷 이름을 클릭 상세 화면에서 확인할 수 있다.




파일 목록을 조회하고 객체에 대한 사전 인증된 요청 URL 을 생성하는 테스트 코드를 만들어 본다.

생성된 URL 은 1시간 동안 인증이 유효하며 사전 인증 요청들은 OCI 콘솔 > 스토이지 > 오브젝트 스토리지 및 아카이브 스토리지 > 버킷 > 버킷 세부정보의 좌측 리소스 목록중 사전인증된요청 을 클릭하면 내역을 확인할 수 있다. 

 

참고자료


댓글 없음:

댓글 쓰기