회사 프로젝트에 GCP Storage와 연동하는 파일 관련 기능을 맡았다.
aws S3로는 구현해본적이 있지만 GCP로는 처음해봐서 우여곡절이 조금 있었지만 진행 순서는 이랬다.
클라우드 팀이 따로 있어서 JIRA로 요청하면 셋팅해주지만 요청하기 전에 꼭 공부를 해야한다. (그냥 버킷만들어주세요! url로 접근하게 해주세요!! 이러면 안됨)
1. dev, prod 버킷 생성 (공개엑세스 아님)
2. 서비스계정(SA) 생성 및 권한 , key 파일 생성
3. 이미지용 dev, prod 버킷 생성 (공개엑세스)
4. 자바 로직 구현
이번 글에는 1번부터 3번까지의 기록이다.
dev, prod 버킷 생성
이 부분은 다른 블로그에도 설명이 잘 되어있어서 크게 어렵지 않았다.

이렇게 dev용과 prod용을 생성해주었다.
중요한건 공개엑세스가 아니므로 url로 아무나 접근할 수 없고 권한이 있는 사람만 파일에 접근할 수 있다.
서비스계정(SA) 생성 및 권한 , key 파일 생성
다른 블로그에선 GCP 권한이 모두 있는건지 다들 서비스 계정을 만들고 권한 추가와 key파일을 받았지만 그런 권한이 내게 없었기에 직접 서비스 계정 생성 등을 할 수 없었다.
살펴보니 클라우드팀에서 프로젝트를 생성할 때 SA는 만들어 둔거 같아서
- Cloud Storage - Storage Object Admin
그 서비스계정에 위 권한과 key파일을 요청해서 받았다.
이 부분에서 서비스 계정과 스프링부트의 관계에 대해 학습이 필요했는데 스프링 부트와 GCS를 연동할 때 무언가 보안 장치(key)가 필요하고 그 보안장치의 권한도 제각각 설정하려면 서비스 계정을 여러개 두어서 권한 정도를 설정할 수있는듯 했다.
이미지용 dev, prod 버킷 생성
실제로는 이미지용 dev와 prod 버킷을 요청하기전에 파일 업로드, 다운로드, 이미지 업로드 로직을 끝냈다.
하지만 이미지 업로드를 할때 return받은 mediaLink로 접속을 하려하면
Anonymous caller does not have storage.objects.get access to the Google Cloud Storage object. Permission 'storage.objects.get' denied on resource (or it may not exist).
이런 오류가 나왔다.
파일을 다운로드할때는 프론트에서 blob을 가공해서 처리할 수 있지만 게시글 사이사이에 사진을 추가할때, 이미지 태그에 url을 넣고 DB에 저장하고자 했기 때문에(base64 등을 이용하기도 하지만 성능이 별로라고함) 깃허브나 notion처럼 url로 이미지를 접근할 수 있도록 해야했다.
Cloud CDN

공개엑세스가 아닐때 url로 이미지를 접근하는 방법을 챗gpt에게도 물어보고 GCP 공식 문서를 찾아보았는데 Cloud CDN 얘기가 계속 나와서 알아보았다. CDN을 쓰면 storage의 파일을 캐싱해서 내려받는 속도도 빨라지고 원본서버에 직접 접근하지 않으므로 보안적인 측면에도 좋다고했다. 근데 공개엑세스가 아니여도 CDN을 통하면 url로 파일에 접근할 수 있나? 이건 정확하지 않은 듯했다. 그래서 클라우드팀에 물어봤다.
나 : 퍼블릭으로 이미지에 접근해야하는데 GCS에서 cdn 통해서 url로 이미지를 보려면 GCS가 공개엑세스여야하나요?
클라우드팀 : 네 CDN 붙이려면 LB자체가 Global 이어야하고 Public Access가 가능해야합니다. image만 전용으로 올릴 GCS를 따로 구축해서 그것들만 외부통신하게끔 하는게 좋을 것 같습니다.
그렇다고 한다. 그래서 이미지용 버킷을 공개엑세스로 요청했다.
여기까지 파일용 버킷 2개(dev, prod), 이미지용 공개엑세스 버킷 2개(dev, prod) 서버 구성이 마쳤다.
- 이미지용 파일 서버 구성도

- 일반 파일 서버 구성도

'DevOps' 카테고리의 다른 글
| [GCP] 스프링부트 + GCP Storage 연동하기 - 2 (1) | 2024.01.23 |
|---|---|
| AWS Free tier 스펙으로 바꿨는데도 계속 과금된다면? =>"다음달까지 기다려보자" (0) | 2023.02.01 |
| [az-900] Azure Fundamentals 불합격 할뻔한 후기(examtopics만 공부하면 안되는 이유), 덤프 추천, 시험보기전준비사항 (0) | 2022.02.20 |
| [Exam AZ-900] 할인적용 중 오류가 발생할 때 해결법 (0) | 2022.02.07 |
| [MSsql] Azure SQL db timezone 시간이 UTC로 나올때 해결 (0) | 2021.12.09 |