Spring

[Spring] Spring Boot + Oracle Cloud 연동하여 배포하기 [3] - 버킷 생성

PlatinumeOlive 2024. 4. 4. 17:12

이전 포스팅에서까지, 오라클 클라우드 인스턴스를 할당받고, DB까지 연결 해보았습니다.

 

[Spring] Spring Boot + Oracle Cloud 연동하여 배포하기 [2] - DB 연동

이전 포스팅에서는 오라클 클라우드 인스턴스를 할당 받고, SSH를 통해 서버에 접속까지 완료하였습니다. [Spring] Spring Boot + Oracle Cloud 연동하여 배포하기 [1] - 인스턴스 할당받기 서론 이번 포스

100cblog.tistory.com

 

이 글은 제가 작은 프로젝트를 진행하며 공부하며 정리한 글이기때문에, 코드의 질도 낮고 부정확한 부분이 많을거라고 생각합니다. 감안하고 봐주시면 감사하겠습니다. (특히 저는 제대로된 배포는 안해봤습니다)

 

시작하기에 앞서, 뭔가 잘 안되거나 아마존 버킷으로 그냥 진행하고 싶다.. 하시는 분들은 제가 예전에 작성한 글이 있는데 참고해서 진행하면 될거같네요

- https://velog.io/@dh1010a/Spring-Spring-Boot-AWS-S3%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%97%85%EB%A1%9C%EB%93%9C-%EA%B5%AC%ED%98%84

 

[Spring] Spring Boot + AWS S3를 이용한 이미지 업로드 구현

오늘은 프로젝트를 진행하며 이미지를 저장하고 업로드 하기 위해 AWS S3 버킷과 스프링 프로젝트를 연동하여 사용하는 방법을 정리해보겠습니다.AWS S3란 Simple Storage Service의 약자로, 주로 파일

velog.io

 

이번 포스팅에서는 버킷을 생성하고, 연결에 필요한 간단한 설정까지 해보겠습니다.

Object Storage?

오브젝트 스토리지란 오라클 클라우드에서 제공하는, AWS S3와 대응되는 서비스 입니다. 데이터를 객체 형식으로 저장하고 관리하며, 데이터 백업, 파일공유,  로그나 센서 데이터 같은 비정형 데이터를 저장하는데 사용할 수 있습니다.

 

기존에 스프링 부트와 S3를 사용해보셨던 분들이라면, S3Config라는 파일과 그 안에 있는 AmazonS3Client 객체를 본 경험이 있으실겁니다. 오라클에서도 이와 비슷한 client 객체를 제공하는데, 그게 바로 ObjectStorage입니다.

 

Oci Java Sdk를 통해 사용할 수 있으나, 기존에 사용해보셨던 AmazonS3Client와는 다르게 사용하기 어려웠습니다... 개발에 입문한 뒤로 영어로 가득한 공식 문서를 이렇게 눈아프게 봐본적이 없었습니다

 

많이 불친절하다고 느꼈지만, 공식 깃허브 Issue등과 docs를 참고하여 우여곡절 성공하긴 하였습니다 ㅎㅎ. 이제 본격적으로 버킷 연결을 시작해보겠습니다.

저는 Gradle 스프링 부트 3.2.3 버전을 사용중이며, JDK 17 자바를 사용하고 있습니다.

 

버킷 생성

먼저, OCI 콘솔에 접속하여 메뉴 -> 스토리지 -> 오브젝트 스토리지 및 아카이브 스토리지 -> 버킷으로 이동합니다.

 

다음, 이전에 DB와 인스턴스를 만들었던 구획을 설정한 후 버킷 생성 버튼을 클릭합니다. (같은 구획에 설정해야 관리가 편합니다)

 

생성할 버킷의 정보를 입력합니다.

  • 버킷 이름 : 자유롭게 원하는 이름 작성
  • 기본 스토리지 계층
    • 표준 : 표준 Object Storage로 빠르게 자주 사용할 데이터를 저장하고 싶을때 사용합니다
    • 아카이브 : 가끔씩만 사용하지만, 장기간 보관해야할 데이터가 있을 때 사용합니다. 표준과 비교해서 좀 더 저렴하지만 데이터 CRUD시에 로딩시간이 조금 더 걸린다는 단점이 있습니다.
  • 암호화 : 오라클 관리 키를 사용하여 암호화. 향후 API키를 통해 버킷에 접속할 수 있습니다.

이외 설정은 건드리지 않고 버킷을 생성합니다.

 

API 키 생성

버킷 생성을 완료했으면, 접속하기 위한 인증키가 필요하겠죠? 그것이 위에 언급했던 API키 입니다.

 

콘솔 우측 상단에 프로필 클릭 -> 프로파일 -> 내 프로파일로 들어갑니다.

 

왼쪽 아래 리소스 -> API키 클릭 -> API 키 추가 클릭

 

인스턴스 생성 시 한번 봤던 창이 나옵니다. 직접 공개키를 넣을 수 있지만 역시 이번에도 오라클에서 제공해주는 API 키 쌍을 이용하겠습니다. 프라이빗 키를 다운받아, 원하는 경로에 집어 넣습니다. (저는 ~/.oci/) 파일에 넣었습니다.

 

추가 버튼을 누르면 위와 같은 구성파일 미리보기가 나옵니다. 

* 중요 : 이 미리보기는 생성 시 한번만 나옵니다. 꼭 복사해서 ~/.oci/config 파일에 붙여넣어야 합니다.

터미널을 이용해 ~/.oci 디렉토리로 이동한 후 vim config 명령어를 이용해 파일을 생성한 후 붙여넣기를 합니다. (그냥 인텔리제이나 vscode를 통해 config(확장자 없음) 파일을 생성해 붙여넣은 다음 직접 옮겨도 무방함)

     

    - 참고로 윈도우의 경우에는 C:\Users\{사용자명}\.oci 경로가 되겠죠?

 

config파일을 보면 맨 마지막 줄에 key_file=<path to your private keyfile> # TODO 문장이 있습니다. 이 부분을 아까 생성한 프라이빗 키가 위치한 주소를 넣으면 됩니다. 저는 .oci에 prviate_key라는 이름으로 넣었기 때문에, key_file=~/.oci/private_key.pem 으로 입력해주었습니다.

 

vim 편집기로 config 파일에 내용을 모두 넣었다면, esc를 누르고 :wq 입력하면 저장하고 종료됩니다. 참고로 오라클 API키는 3개까지 가능하다고 합니다.

 

이제, 오라클 클라우드에서 필요한 과정과 설정까지 모두 마쳤습니다. 스프링에서 연결해보도록 하겠습니다.

 

스프링 부트 - 버킷 연동

의존성 주입

어떤 의존성을 넣어야 하는지 몰라서 정말 많이 찾아다녔습니다. 아래 사이트에서 직접 검색하면서 받았고, 그렇기에 불필요한 의존성이 포함되어 있을 수 있습니다.

https://central.sonatype.com/search?q=oci-java-sdk-common

 

Maven Central: Search

Search and discover Java packages with our advanced search functionality.

central.sonatype.com

- build.gradle

implementation 'com.oracle.oci.sdk:oci-java-sdk:3.38.0'
implementation 'com.oracle.oci.sdk:oci-java-sdk-common:3.38.0'
implementation 'com.oracle.oci.sdk:oci-java-sdk-objectstorage:3.38.0'
implementation 'com.oracle.oci.sdk:oci-java-sdk-common-httpclient:3.38.0'
implementation 'com.oracle.oci.sdk:oci-java-sdk-common-httpclient-choices:3.38.0'
implementation ('com.oracle.oci.sdk:oci-java-sdk-common-httpclient-jersey3:3.37.0')

 

먼저 추가해주어야 할 의존성 입니다. 주로 oci에서 제공하는 oci-java-sdk에 관련된 라이브러리들을 주입받았습니다. 처음엔 httpClient 하나만 필요한줄 알았는데, jersey 라이브러리도 필수로 추가해주어야 했습니다.

 

다음 포스팅에서는, 실제 스프링 부트와 버킷을 연결해서 이미지를 업로드를 진행해보겠습니다.

 


참고

https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/javasdk.htm

 

SDK for Java

 

docs.oracle.com

https://central.sonatype.com/search?q=oci-java-sdk-common

 

Maven Central: Search

Search and discover Java packages with our advanced search functionality.

central.sonatype.com

https://riverblue.tistory.com/53

 

Spring OCI(oracle cloud infrastructure) Java SDK 활용 (1) Object Storage bucket 정보 가져오기

Storage AWS나 오라클 같은 클라우드 서비스에는 파일을 업로드 할 수 있는 Storage 서비스가 있다. 대표적으로 AWS의 S3가 있는데 확실히는 잘 모르지만, AWS에서는 이 S3를 활용할 수 있는 api를 제공하

riverblue.tistory.com