Google Cloud Platform으로 이미지 공개 URL 생성하기! - with Python

IRISH·2022년 8월 5일
1

Python

목록 보기
3/3
post-thumbnail

✅ 개요

가끔가다 앱이나, 웹으로 개발하다가 이미지를 클라이언트에 보여줘야 때가 있다. 당연히 DB에 이 이미지에 대한 정보를 넣어줘야 한다. 하지만, 이미지 자체를 DB에 넣어줄 수는 없는 법!!! 이미지를 클라우드 등과 같은 곳에 업로드를 하여서 URL을 얻어와야 한다.

오늘은, 파이썬을 활용해 이미지를 Google Cloud Platform(이하 GCP)을 통해 이미지를 업로드하는 방식을 포스팅 해보도록 하겠다.

⚙️ GCP 사전 설계

  • 당연히 GCP 가입을 먼저 해야 한다.
  • 그 후, 버킷을 생성해야 한다.
  • 버킷을 쉽게 표현하면 다음과 같다. 우리가 Local에서 이미지를 저장할 때 대부분 폴더로 구분하여 저장할 것이다. 이와 같이 GCP로 이미지를 업로드할 때 중구난방으로 하는 것이 아니라, 로컬의 폴더처럼 특정 위치에 업로드를 해야 나중에 보기 편할 것이다. 이 역할을 수행하는 것이 버킷이다.

버킷을 생성하는 것에 대한 참고 URL은 다음과 같다.

📁 Python으로 GCP에 이미지 업로드

  • GCP 사전 설계가 끝났다면, 이제 Python으로 GCP에 이미지 업로드하는 방식을 알려주겠다.

🔧 google.cloud.storage install하기

  • 만약, VS Code나 Pycharm과 같은 곳에 google.cloud.storage 라이브러리가 설치가 안되어 있다면 terminal 창에 "pip install google.cloud.storage"를 타이핑한 후 enter를 쳐서 설치하도록 한다.

👀 환경 변수 setting

  • 여러분들이 생각하는 그런 환경 변수 setting이 아니니 안심해도 된다.
  • 그냥 GCP에서 Json 파일을 다운 받으면 된다. 방법은 아래와 같다. 아래 블로그에서 Json 파일 다운 외에 여러가지 설명이 있는데, 그냥 Json 파일 관련한 부분만 보면 된다.

    https://no-ah0410.tistory.com/103

  • Json 파일을 다운 받았으면, py 파일과 동일한 경로에 두거나, 본인이 Json 파일을 두고 싶은 경로에 두면 된다. 경로에 대한 예시는 아래와 같다.

    폴더명
    ㄴ 파이썬-파일명.py
    ㄴ 다운로드-받은-json-파일명.json

이제 다음은 코드 부분이다.

### 환경 변수 설정

import os

# 사전에 json 파일을 다운로드 받을것!

# 역슬래쉬를 슬래쉬로 다 변경할 것
KEY_PATH = "[json 파일 절대 경로]"

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]= KEY_PATH
  • "역슬래쉬를 슬래쉬로 다 변경할 것"이라는 말에 대한 설명은 다음과 같다. 보통 경로를 ctrl c, ctrl v를 통해 복붙을 할 것이다. 이때 경로 사이사이가 (역슬래쉬)로 연결되어 있을텐데, 이 상태에서 컴파일을 실행하면 에러가 뜨게 된다. 이를 방지하고자 \를 /(슬래쉬)로 모두 변경할 것을 권장한다.

🚗 인증 확인

### 인증 확인
from google.cloud import storage

storage_client = storage.Client()
buckets = list(storage_client.list_buckets())

print(buckets) # 결과 => [<Bucket: 버킷 이름>]
  • 해당 버킷이 실제 GCP에 존재하는 가를 확인하는 작업이라 보면 된다.
  • 만약, 실제 존재하는 버킷이라면 맨 밑의 라인과 같이 [<Bucket: 버킷 이름>] 가 print된다.

📷 GCP에 이미지 파일 올리기

참고 링크 : https://soundprovider.tistory.com/entry/GCP-Python%EC%97%90%EC%84%9C-GCP-Cloud-Storage-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

### GCP에 파일 올리기

# 관련 참고 링크 : https://soundprovider.tistory.com/entry/GCP-Python%EC%97%90%EC%84%9C-GCP-Cloud-Storage-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0

# 서비스 계정 생성한 bucket 이름 입력
bucket_name = '버킷이름'    
# GCP에 업로드할 파일 절대경로, 경로 사이 역슬래쉬는 슬래쉬로 변환할 것
source_file_name = '이미지 절대경로'  
# 업로드할 파일을 GCP에 저장할 때의 이름. 새로운 이미지를 넣을 때마다 바꾸어줘야 함
destination_blob_name = 'GCP에 이미지 저장 시 저장 이름'

# 이미지 업로드하기
storage_client = storage.Client()
bucket = storage_client.bucket(bucket_name)
blob = bucket.blob(destination_blob_name)

blob.upload_from_filename(source_file_name)

print("done!") # 삽입 완료 시 출력 문구
  • 이미지는 아마 본인의 로컬 등에 위치하고 있을 것이다. source_file_name에 이미지의 상대 경로 말고, 반드시 절대 경로로 넣어주자.
  • destination_blob_name은 아무렇게 지정해도 상관은 없다. 하지만, 규칙성 있게 지정하는 것을 권장한다.

🎈 업로드 확인

  • 이제 GCP에 버킷을 가면 업로드한 이미지가 있는 것을 확인할 수 있다. 여기서 알 수 있는 것이 있다. 만약 본인의 버킷 이름이 "참새"(실제로는 영어겠지만)라고 가정해보자. 그렇다고 한다면 이에 대한 공개 URL은 다음과 같다.

    https://storage.googleapis.com/참새

  • 만약 이 버킷에 본인이 이미지의 destination_blob_name을 "image01"로 지정했다면, 이 사진에 대한 공개 URL은 아래와 같다.

    https://storage.googleapis.com/참새/image01

  • 이 URL은 chrome이든 뭐든 들어가서 쳐보고 들어가면 이미지가 잘 뜨는 것을 확인할 수 있다.

🏝️ 마무리

  • 앱 개발을 하다가 이미지를 사용자에게 보여줘야 하는 경우가 발생하여서, 어떻게 하면 이미지에 대한 공개 URL을 생성할 수 있을까 생각하게 되었다. 구글링을 통해 그 해법을 알게 되었고, destination_blob_name을 규칙성 있게 정함으로써, DB에 규칙성 있게 공개 URL을 보내기까지 했다.
  • 다른 분들이, 나와 비슷한 상황에 놓이게 될 경우 이 포스팅을 통해 문제를 해결하시기 바란다.

💥 Irish 깃허브

-> Irish Github

profile
#Software Engineer #IRISH

0개의 댓글