-
Google Cloud 데이터 저장Cloud 2025. 5. 29. 09:30728x90SMALL
애플리케이션을 만들면서 데이터를 저장/관리하려면 GCP의 여러 데이터 저장소 서비스를 사용할 수 있습니다. 초보자에게 비교적 사용이 쉬운 Cloud Storage(파일 객체 저장)와 Cloud Firestore(NoSQL 문서형 DB)를 예로 들어 설명합니다 (필요에 따라 Cloud SQL같은 관계형 DB도 이용 가능하지만, 별도 설정이 필요하고 무료 혜택이 없어 여기서는 언급만 합니다).
Cloud Storage: 파일 객체 저장소
필요한 서비스: Cloud Storage.
개념: 앞서 웹호스팅에서도 등장한 Cloud Storage는 객체 스토리지로, 애플리케이션에서 사용하는 각종 파일(이미지, 동영상, 문서 등)을 저장하기 적합합니다. **버킷(bucket)**이라는 이름 공간에 파일을 객체 형태로 보관하며, 각 객체는 고유 키(경로)로 관리됩니다. Cloud Storage는 AWS S3와 유사한 역할을 하며, 대용량 파일도 저장할 수 있고 내구성과 가용성이 매우 높습니다. 예를 들어 사용자가 업로드한 이미지를 저장하거나 백업 파일을 보관하는 용도로 Cloud Storage를 활용할 수 있습니다.Python과의 연동: Python에서는 google-cloud-storage 라이브러리를 이용해 버킷을 만들고 파일을 업로드/다운로드할 수 있습니다. 사용 전 Cloud Storage API를 활성화하고 인증을 설정해야 합니다. 코드 사용 예시는 다음과 같습니다:
pythonCopyEditfrom google.cloud import storage # Storage 클라이언트 생성 (기본 인증 정보 사용) client = storage.Client(project="my-project-id") # 버킷 객체 참조 (없으면 예외 발생, 먼저 콘솔이나 코드로 생성해야 함) bucket = client.bucket("my-bucket") # 버킷에 새 객체(blob) 업로드 blob = bucket.blob("uploads/photo1.png") blob.upload_from_filename("local/path/to/photo1.png") print("사진 파일을 Cloud Storage에 업로드했습니다.")위 코드는 지정한 버킷에 로컬 파일을 업로드하는 예시입니다. 구글 공식 문서의 코드 샘플에서도 storage.Client()를 생성하고, bucket.blob()으로 객체를 지정한 뒤 upload_from_filename()으로 파일을 저장하는 패턴을 따릅니다cloud.google.comcloud.google.com.
이렇게 저장된 객체는 GCP 콘솔의 Cloud Storage 섹션에서 확인할 수 있고, 권한이 공개로 되어 있다면 URL로 직접 접근도 가능합니다. 일반적으로 애플리케이션에서는 Cloud Storage를 백엔드 저장소로 사용하고, 파일을 읽거나 쓸 때 API를 통해 접근합니다.실제 예시: 예를 들어 사용자가 업로드한 프로필 이미지를 저장한다고 가정해보겠습니다. Python 웹 서버(Flask 등)에서 사용자가 이미지를 업로드하면, 위 코드처럼 blob.upload_from_filename()이나 blob.upload_from_file(fileobj) 등을 통해 Cloud Storage에 저장합니다. 저장 후 반환받은 공개 URL 또는 생성한 Signed URL을 사용자에게 제공하여 이미지를 보여줄 수 있습니다. Cloud Storage는 지역(Region)을 선택해 버킷을 만들 수 있고, 해당 지역 내에서 높은 성능을 보여줍니다.
주의사항: Cloud Storage에서 데이터 일관성은 최종 일관성을 가지므로, 매우 빈번한 쓰기/읽기 패턴이 있는 실시간 애플리케이션보다는 파일 저장, 백업 등에 적합합니다. 용량에 따라 과금되지만 앞서 언급했듯 월 5GB까지는 무료이고, 네트워크 아웃바운드 1GB 정도도 무료 제공됩니다cloud.google.com. 업로드/다운로드 요청 수에 대한 요금도 있지만 소규모 사용은 무리 없이 무료 범위 내입니다. 그래도 큰 파일 업로드 시 시간이 걸릴 수 있고, 네트워크 트래픽 비용이 들 수 있으니 대량 전송이 예상되면 요금표를 확인해야 합니다. 또한 Cloud Storage에 중요한 데이터를 보관한다면 **버전 관리(버전닝)**나 수명 주기 규칙을 설정해 두는 것이 안전합니다.
Cloud Firestore: NoSQL 문서형 데이터베이스
필요한 서비스: Cloud Firestore (Firestore in Native Mode).
개념: Firestore는 **문서(document)**와 **컬렉션(collection)**이라는 개념을 사용하는 NoSQL 문서형 데이터베이스입니다. JSON과 유사한 구조의 데이터를 계층적으로 저장할 수 있으며, 모바일/웹 앱 개발에 널리 쓰이는 Firebase의 데이터베이스 서비스를 GCP와 통합한 것이라 볼 수 있습니다. 스키마가 고정되지 않은 반구조화 데이터 저장에 유용하고, 실시간 동기화나 오프라인 지원 등의 기능도 Firebase SDK에서는 제공합니다. 여기서는 서버 사이드에서 Firestore를 사용하는 방법에 초점을 맞춥니다 (Native 모드 Firestore).Python과의 연동: Firestore용 Python 클라이언트 라이브러리 (google-cloud-firestore)를 사용하면, 데이터 추가/조회/삭제를 손쉽게 구현할 수 있습니다. Firestore를 사용하려면 우선 GCP 프로젝트에서 Firestore 데이터베이스를 생성해야 합니다. **Firestore 모드(네이티브 또는 Datastore 모드)**를 선택하고, 지역을 설정한 뒤 사용하면 됩니다. Python 코드 예시는 다음과 같습니다:
pythonCopyEditfrom google.cloud import firestore db = firestore.Client(project="my-project-id") # Firestore 클라이언트 생성 doc_ref = db.collection("users").document("alice") # "users" 컬렉션의 "alice" 문서 참조 doc_ref.set({ "first": "Alice", "last": "Kim", "born": 1990 }) print("Firestore에 데이터가 저장되었습니다.")위 코드는 "users"라는 컬렉션 아래 "alice"라는 문서에 데이터를 저장하는 예시입니다. set() 메소드는 문서에 데이터를 쓰는데, 해당 문서가 없다면 새로 만들고, 있으면 덮어씁니다cloud.google.com. 이 예시에서 Firestore 클라이언트를 초기화할 때 project를 지정해 특정 프로젝트의 DB에 연결하고 있습니다cloud.google.com. Firestore 클라이언트를 사용하려면 사전에 애플리케이션 기본 인증을 설정하거나 서비스 계정 키를 설정해야 합니다cloud.google.com.
실제 예시: 사용자의 회원 정보를 Firestore에 저장하고 불러오는 상황을 생각해봅시다. 회원 가입 시 위 코드처럼 doc_ref.set({"first": ..., "last": ..., ...})로 문서를 생성하고, 로그인 시에는 doc_ref.get()으로 문서를 읽어 사용할 수 있습니다. Firestore는 문서 단위로 강한 일관성을 제공하며, 복합 인덱스를 활용한 강력한 쿼리 기능도 있습니다. 예를 들어 users 컬렉션에서 born 필드가 1990보다 큰 문서만 조회하는 쿼리도 인덱스가 있다면 가능합니다. 단, 두 개 이상의 불필요한 범위 조건을 하는 등 몇 가지 제한이 있으므로 데이터 모델링 시 참고해야 합니다.
주의사항: Firestore는 무료 등급으로 일일 일정량의 읽기/쓰기/삭제 및 저장 용량 1GB까지 제공되므로 작은 앱 시작에는 비용 부담이 없습니다cloud.google.com. 그러나 문서당 1회 쓰기/읽기/삭제가 각각 오퍼레이션으로 과금되며, 만약 대량의 작은 작업이 누적되면 무료 한도를 넘을 수 있습니다. 따라서 컬렉션을 설계할 때 너무 채팅 메시지처럼 빈번한 쓰기가 필요한 경우 Firestore가 적합한지 고려해야 합니다. 또한 Firestore는 기본적으로 실시간 리스너 등을 지원하지만, Python 서버 사이드 SDK에서는 이러한 실시간 기능보다 요청시 가져오는 방식을 주로 사용합니다. 마지막으로 보안 규칙: Firebase 콘솔에서 Firestore의 보안 규칙을 설정하지 않으면 기본적으로 인증되지 않은 접근을 차단하지만, 서버에서는 애플리케이션 서비스 계정으로 접근하므로 별도의 인증 토큰 대신 IAM 권한으로 제어합니다. Firestore 사용 시 **데이터베이스 위치(리전)**를 애플리케이션 서버에 가깝게 선택하여 지연 시간을 줄이는 것도 팁입니다.
(참고: 관계형 데이터가 필요하다면 Cloud SQL (예: MySQL, PostgreSQL)이나 Cloud Spanner 등을 고려할 수 있지만, 이러한 서비스는 세팅이 복잡하고 별도 비용이 발생합니다. 초보 단계에서는 서버 내장 SQLite 또는 Firestore로 충분한 경우가 많습니다.)
728x90'Cloud' 카테고리의 다른 글
Google Vertex AI Agent Builder (0) 2025.05.30 Google Cloud 서버 구축 (Compute Engine, Cloud Run 등) (0) 2025.05.29 Google Cloud 머신러닝 (Vertex AI 기반 모델 학습/배포) (0) 2025.05.29 구글 Cloud를 이용한 웹사이트 호스팅 (0) 2025.05.29 GCP 시작을 위한 기본 설정 (0) 2025.05.29