본문 바로가기

Cloud

[GCP] Cloud Storage 세팅 및 Springboot 프로젝트 연동

들어가며

진행하고 있는 프로젝트에서 이미지를 업로드하고 수정할 일이 있어 GCP Cloud Storage를 사용해 구현해보려 한다. VM instance와 Cloud SQL을 사용하고 있어서 이미지 저장도 Cloud Sorage를 활용해보기로 결정했다. GCP 콘솔에서 Cloud Storage 생성 및 관련 설정을 해주고 Springboot 프로젝트에서 어떻게 연동하는지 정리해보자. 

 

1) GCP Cloud Storage 버킷 생성 및 연결 설정하기

가장 먼저 GCP 콘솔에 접속해 Cloud Storage를 사용하려는 프로젝트로 들어가준다. 화면 왼쪽 위 로고 옆 부분에 표시되어 있는 게 해당 프로젝트이다. 잘 들어왔으면 좌측 메뉴를 열어 Cloud Storage를 클릭하고 '버킷'탭에 들어가 '만들기'를 눌러 버킷을 생성해보자!

 

 

 

버킷 이름은 전역적으로 고유한 이름으로 지어주고, 데이터 저장 위치는 단일 리전 내에서 사용할 수 있는 Region, VM instance와 동일한 리전인 us-west1을 선택해줬다.
그리고 백업용 버킷이 아니라 이미지 업로드, 조회하는 데 사용할 버킷이기 때문에 스토리지 클래스는 기본 클래스의 Standard로 설정해줬다. 
객체 액세스 제어 방식의 경우, 외부에서 접근할 수 있도록 공개 액세스 방지 설정을 해지해주고 균일한 액세스 제어를 선택해준다.
객체 데이터 보호 옵션은 따로 추가해주지 않고 만들기 버튼을 눌러 버킷을 생성해준다!
버킷 생성하면서 옵션을 고르는 것에 따라 오른쪽에 가격 책정이 바로 뜨니까 상황에 맞춰 확인하면서 고르면 좋을 것 같다.

 

 

버킷 생성을 완료하면 아래와 같이 버킷 세부정보 화면이 나타나는데, 공개 액세스 부분을 보면 공개 아님이라고 표시되어 있다. 이는 현재 해당 버킷이 공개 상태가 아니라 외부에서 url을 통해 접근할 수 없는 상태임을 의미한다.

클라이언트 측에서 이미지 url을 가지고 화면에 띄울 수 있도록 오른쪽 이미지와 같이 퍼블릭 액세스를 허용해주자. 모든 사용자에 대해 스토리지 객체 사용자 역할을 부여해줬다.

설정을 마치면 버킷 세부 정보에서 공개 액세스 부분에 인터넷에 공개라고 표시되는 것을 확인할 수 있다. 이제 테스트 이미지를 버킷에 업로드하고 이미지 url로 접속하면 방금 업로드한 이미지가 뜨면 성공이다! 이제 해당 버킷에 공개 액세스가 허용된 상태이다.

 

 

다음으로, Springboot 프로젝트(외부)에서 키를 통해 해당 버킷에 접근해 이미지를 업로드 및 조회할 수 있도록 설정해보자!

좌측 메뉴탭에서 'IAM 및 관리자'의 서비스 계정 탭을 클릭해주자. 서비스 계정 탭에 이미 기본으로 생성되어 있는 "Compute Engine default service account'가 있지만, storage 접근용 서비스 계정을 만들어 줄 것이다.

 

 

서비스 계정 세부정보 부분에서 이름을 지정해주고, 알아보기 쉽게 설명도 작성해준다. 해당 서비스 계정에 어떤 액세스 권한을 부여해줄 것인지 선택하는 2번 항목에서 Cloud Storage 역할을 선택해주면 다양한 권한을 고를 수 있다. 마우스 오버 시 각 역할에 대한 권한 설명이 잘되어 있으니 각자 상황에 맞는 역할을 부여해주면 될 것 같다.

위와 같이 저장소 관리자, 저장소 개체 관리자, 스토리지 객체 사용자 권한을 부여해줬는데, 관리자 권한이 있으면 사용자 권한을 따로 안줘도 될 것 같지만 우선 추가해줬다.

 

이 프로젝트는 혼자 서버 파트를 맡게되어 다른 사용자에게 권한을 부여할 일이 없으므로 사용자에게 해당 서비스 계정에 대한 액세스 권한 부여 부분은 아무것도 추가해주지 않고 완료 버튼을 클릭해 서비스 계정을 생성한다.

 

서비스 계정이 생성된 후, 해당 계정 오른쪽 부분의 작업을 클릭해 키 관리를 눌러 새로운 키를 생성해주자.

키 추가 → 새 키 만들기를 클릭해 JSON 유형으로 새로운 키를 만들어준다. 키가 다운로드되고, 다시 서비스 계정 화면으로 돌아와 보면 해당 계정의 키 부분에 '키 없음'이 아닌 키 ID가 적혀있는 것을 확인할 수 있다.

 

다운로드 받은 키로 로컬에서 해당 서비스 계정에 접근해 Cloud Storage의 액세스 권한을 갖게 되는 것이니, 삭제하지 말고 잘 가지고 있다가 Springboot 프로젝트에서 설정해줄 때 사용하자!

 

 

 

2) Springboot에서 Cloud Storage에 접근할 수 있도록 연동하기

(1) build.gradle에 dependency 추가

가장 먼저 build.gradle에 gcp starter와 storage dependency를 추가해주자.

 

build.gradle

implementation group: 'org.springframework.cloud', name: 'spring-cloud-gcp-starter', version: '1.2.5.RELEASE'
implementation group: 'org.springframework.cloud', name: 'spring-cloud-gcp-storage', version: '1.2.5.RELEASE'

 

 

(2) application.yml 파일에 Cloud Storage Key 등록

application.yml

  spring:
    cloud:
      gcp:
        storage:
          credentials:
            location: classpath:[key json 파일명]
          project-id: [프로젝트 Id]
          bucket: [버킷명]

서비스 계정 생성 시 만든 json key 파일을 springboot 프로젝트의 resources 디렉토리 하위에 위치시켜 주고, application.yml 파일에 위와 같이 작성해주자. key json 파일명은 방금 resources 디렉토리에 넣어준 파일명을 복사해서 넣어주면 되고,  프로젝트 id는 key 파일을 열어보면 찾을 수 있다. 그리고 버킷명은 버킷 만들 때 지정해준 이름으로, GCP 콘솔에서 확인하면 된다. yml 파일은 항상 탭 간격 주의하자!

 

 

마무리

이렇게 설정해주면, GCP Cloud Storage를 활용해 이미지 업로드 구현이 가능하다. 오늘은 Springboot와 GCP Cloud Storage 연동까지 다뤄봤고, 다음 글에서 이미지 업로드 및 조회까지 간단하게 구현해볼 것이다.