본문 바로가기

컴퓨터/클라우드

[GCP Associate Cloud Engineer] Google Cloud storage

Cloud Storage

개발자와 IT 조직에 내구성이 뛰어나고 높은 가용성을 가진 객체 스토리지를 제공하는 서비스

 

객체 스토리지란?

객체 스토리지는 데이터를 객체로 관리하는 데이터 저장 아키텍처이다. 이는 파일 및 폴더 계층 구조나 디스크의 블록 스토리지와는 다른 것으로 데이터의 이진 형태와 메타데이터, 그리고 고유한 식별자를 포함하는 패키지 형태로 저장된다. 여기서 고유 식별자는 URL 형태로 제공되어 웹 기술과 잘 호환된다

 

객체 저장소

위의 이미지를 통해 볼 수 있다시피 객체단위로 데이터를 관리하여 ~/2030/10/ 과 같은 파일 이름 및 경로가 key로 사용되고 파일 내용이 value로 사용된다.

 

Cloud Storage고객이 원하는 만큼의 데이터를 저장하고 필요할 때마다 이를 검색할 수 있게 한다. 이는 구글에 의해서 완전히 관리되는 확장 가능한 서비스로, 웹사이트 콘텐츠 제공, 데이터 보관 및 재해 복구, 대용량 데이터 객체의 다운로드 제공 등 다양한 용도로 사용된다.

 

Cloud Storage는 BLOB(Binary Large Object) 저장, 동영상, 사진과 같은 온라인 콘텐츠 저장, 백업 및 아카이브 데이터 보관 등을 한다.

 

버킷

Cloud Storage 파일은 버킷으로 구성되며, 버킷은 고유한 이름과 지리적 위치를 지정해야 한다.

지연 시간을 최소화하기 위해 사용자 위치에 가까운 지역을 선택하는 것이 이상적인데, 예를 들어, 유럽 사용자 대부분을 대상으로 하면 유럽 내 Google Cloud 리전이나 EU 멀티 리전을 선택하는 것이 좋다.

 

불변성

객체는 변경되지 않으며, 변경 시 새 버전이 생성된다.

버전 관리를 활성화하면 이전 변경 이력을 기록하고, 특정 객체를 이전 상태로 복원하거나 특정 버전을 삭제할 수 있다.

버전 관리를 사용하지 않으면 기본적으로 새 버전이 이전 버전을 덮어쓴다.

 

보안 및 접근 제어

많은 경우 개인 식별 정보는 데이터 객체에 포함될 수 있으므로 저장된 데이터에 대한 액세스를 제어하는 ​​것은 보안과 개인 정보 보호를 유지하는 데 필수적이다.

접근을 제어하려면 IAM 역할 및 ACL을 사용해 할 수 있는데, IAM 역할은 프로젝트 버킷 객체로 상속되며, 일반적으로 IAM만으로 충분하다.

하지만 더 세밀한 제어가 필요하면 ACL을 생성할 수 있다.

 

ACL구성 요소

범위: 특정 사용자나 사용자 그룹 등 접근 가능한 주체

권한: 읽기, 쓰기와 같은 실행 가능한 동작

 

라이프사이클

대량의 객체 데이터를 저장하고 검색하는 것은 많은 비용이 들기 때문에 데이터 관리 비용을 줄이기 위해 객체 수명 주기를 설정할 수 있다.

Cloud storage Class

1. Standard Storage

자주 액세스되는 데이터에 최적화된 스토리지 클래스로, 짧은 기간 동안 저장되는 데이터에도 적합하다.

 

2. Nearline Storage

한 달에 한 번 이하로 데이터를 읽거나 수정하는 경우에 적합한 것으로 데이터 백업, 장기 멀티미디어 콘텐츠 저장, 데이터 아카이빙 등에 주로 사용된다.

 

3. Coldline Storage

저비용으로 데이터 저장이 가능한 스토리지로, 거의 사용되지 않는 데이터를 저장하는 데 적합하다.

 

4. Archive Storage

가장 저렴한 스토리지 클래스로, 연간 한 번 이하로 액세스하는 데이터에 이상적이며, 데이터 아카이빙, 온라인 백업, 재해 복구용으로 사용한다.

, 데이터 액세스와 작업에는 더 높은 비용이 발생하기 때문에 최소 365일 이상의 기간 동안 데이터를 저장해야 할 때 필요하다.

 

Auto-class

 

Auto-class는 객체의 액세스 패턴을 기반으로 적절한 스토리지 클래스로 데이터를 자동 전환하는 기능이다.

이 기능을 통해 사용되지 않는 데이터는 더 저렴한 스토리지 클래스로 이동하고, 자주 액세스되는 데이터는 Standard Storage로 이동하여 이후 액세스를 최적화 하여 비용 절감이 자동화된다.

 

스토리지 클래스는 다음과 같은 공통적인 특징을 가진다.

무제한 스토리지: 최소 객체 크기 제한이 없다.

전 세계적 접근성: 다양한 지역에서 데이터에 액세스 가능하다.

낮은 대기 시간 및 높은 내구성: 데이터 처리 속도가 빠르고, 데이터 손실 위험이 낮다.

통일된 경험: 보안 도구와 API 사용에 있어 일관성을 제공한다.

지리적 중복성: 멀티 리전 또는 듀얼 리전에 데이터를 저장하면 물리적 서버가 지리적으로 분산된 데이터 센터에 배치되어 자연재해나 심각한 사건으로부터 보호받는다.

 

보안

서버 측 암호화: 데이터를 디스크에 쓰기 전에 자동으로 암호화한다.

전송 중 암호화: 고객 장치와 Google 간 데이터는 HTTPS/TLS를 통해 암호화된다.

 

데이터 전송 방법

 - 온라인 전송

Cloud SDKCloud Storage 명령어 사용.

 

 - 대량 데이터 업로드

Storage Transfer Service: 다른 클라우드 공급자, 다른 클라우드 스토리지 리전, 또는 HTTPS 엔드포인트에서 데이터를 대량으로 전송

Transfer Appliance: Google Cloud에서 임대 가능한 고용량 스토리지 서버로, 네트워크에 연결해 데이터를 로드한 뒤 업로드 시설로 배송하여 Cloud Storage에 데이터를 업로드한다. 단일 appliance에서 최대 1페타바이트 데이터를 전송 가능하다.

Cloud SQL

Google Cloud에서 제공하는완전 관리형 관계형 데이터베이스 서비스이다. MySQL, PostgreSQL, SQL Server를 지원하며, 데이터베이스 운영과 관리의 복잡성을 줄여 애플리케이션 개발에 집중할 수 있게 한다.

 

완전 관리형 서비스

패치 및 업데이트, 백업 관리, 복제 구성과 같은 반복적이고 시간 소모적인 작업을 Google이 처리한다.

Cloud SQL은 소프트웨어 설치나 유지 관리가 필요 없다.

 

성능 및 확장성

최대 128개의 프로세서 코어, 864GBRAM, 64TB의 스토리지로 확장 가능하다.

 

자동 복제 지원

Cloud SQL의 주요 인스턴스에서 복제하거나, 외부 주요 인스턴스, 외부 MySQL 인스턴스에서 복제를 구성할 수 있다.

 

백업 및 복구

관리형 백업을 통해 데이터를 안전하게 저장하며, 복구가 필요할 경우 쉽게 접근할 수 있다.

인스턴스 비용에는 7개의 백업이 포함되어 있다.

 

보안

Google 내부 네트워크에서 데이터가 암호화되며, 데이터베이스 테이블, 임시 파일, 백업에 저장될 때도 암호화된다.

네트워크 방화벽을 통해 각 데이터베이스 인스턴스에 대한 네트워크 액세스를 제어한다.

 

Cloud SQLGoogle Cloud의 다른 서비스 및 외부 애플리케이션과 쉽게 통합된다.

 

App Engine

Connector/J(Java), MySQLdb(Python)와 같은 표준 드라이버를 사용해 통합 가능하다.

 

Compute Engine

Cloud SQL 인스턴스에 액세스하도록 인가할 수 있으며, 가상 머신과 동일한 영역Cloud SQL 인스턴스를 구성할 수 있다.

 

외부 애플리케이션 지원

SQL Workbench, Toad와 같은 도구 및 표준 MySQL 드라이버를 사용하는 기타 외부 애플리케이션도 지원한다.

Cloud SQL은 관계형 데이터베이스 관리를 단순화하며, Google Cloud 서비스 및 외부 도구와의 호환성을 통해 개발자에게 유연성과 편리성을 제공한다.

 

MySQL로 데이터베이스 생성

 

데이터베이스를 생성한 뒤 gcloud를 통해서 아래와 같이 데이터베이스에 접속을 할 수 있다.

gcloud를 통해 데이터베이스에 접속

데이터 베이스에 접속을 하면 기존의 SQL구문을 동일하게 사용해 아래와 같이 데이터베이스에 자료를 추가하거나 해당 데이터베이스의 내용을 확인해볼 수 있다.

SQL명령어 사용해 데이터베이스 확인

 

 

Spanner

Google Cloud에서 제공하는 완전 관리형 관계형 데이터베이스 서비스이다. Spanner는 수평적으로 확장 가능하며, 강력한 일관성과 SQL 지원을 제공한다.

 

수평적 확장

Spanner는 필요에 따라 수평적으로 확장할 수 있어, 대규모 데이터베이스 운영에 적합하다.

 

강력한 일관성

전 세계적으로 데이터가 일관성을 유지하며, 분산 환경에서도 동일한 데이터를 읽고 쓸 수 있다.

 

SQL 지원

관계형 데이터베이스 관리 시스템을 위한 SQL 쿼리를 지원하며, 조인 및 보조 인덱스를 활용할 수 있다.

 

높은 처리량

초당 수만 번 이상의 읽기 및 쓰기 작업을 처리할 수 있는 높은 입출력 작업 성능을 제공한다.

 

내장된 고가용성

Google의 미션 크리티컬 애플리케이션과 서비스를 지원해온 기술로, 기본적으로 고가용성을 갖추고 있다. 특히 Spanner Google $800억 규모의 비즈니스를 지원하는 서비스로, 대규모 확장성과 성능이 필요한 현대 애플리케이션에 최적화된 데이터베이스 솔루션이다.

 

spanner 인스턴스 생성

그 후 데이터베이스 만들기를 통해서 Cloud SQL에서 만들었던 것과 동일한 데이터베이스를 생성할 수 있다.

이제 테이블 생성을 통해서 사용자가 필요한 데이터베이스 테이블을 작성하면 해당 스키마를 바탕으로 데이터베이스가 생성이 된다.

데이터베에스 테이블 생성

 

Firestore

Google Cloud에서 제공하는 유연하고 수평적으로 확장 가능한 NoSQL 클라우드 데이터베이스이다. 주로 모바일, , 서버 개발을 위해 설계되었다.

 

데이터 구조

Firestore를 사용하면 데이터는 문서 형태로 저장되며, 문서는 컬렉션으로 조직된다.

그리고 문서에는 복잡한 중첩 객체와 하위 컬렉션을 포함할 수 있다.

문서의 각 항목은 키-값 쌍으로 구성된다. 예를 들어, 사용자를 나타내는 문서는 firstnamelastname 키와 그에 해당하는 값을 포함할 수 있다.

 

NoSQL 쿼리

FirestoreNoSQL 쿼리는 특정 문서를 검색하거나, 쿼리 조건에 맞는 컬렉션 내 모든 문서를 검색할 수 있다.

여러 필터 조건을 연결하거나 필터링과 정렬을 결합하여 쿼리할 수 있다.

쿼리는 기본적으로 인덱싱되어 있으며, 성능은 전체 데이터셋 크기가 아닌 결과 집합 크기에 비례한다.

 

데이터 동기화 및 오프라인 지원

연결된 장치 간 데이터 동기화를 통해 데이터를 자동으로 업데이트한다.

단순한 단발성 데이터 검색도 효율적으로 수행할 수 있다.

Firestore는 앱이 적극적으로 사용하는 데이터를 캐싱하므로, 기기가 오프라인 상태에서도 데이터를 읽고 쓰고 쿼리할 수 있다.

만약 기기가 다시 온라인 상태가 되면 Firestore와의 데이터 동기화가 자동으로 이루어진다.

 

Google Cloud 인프라 활용

자동 멀티 리전 데이터 복제를 지원하여 데이터 내구성과 가용성을 높인다.

강력한 일관성과 원자적 배치 연산을 제공하며, 트랜잭션도 지원한다.

 

Firestore생성

컬렉션은 아래와 같이 생성할 수 있는데 생성할 때 생성할 컬렉션의 ID를 먼저 정하고 해당 ID를 기준으로 생성할 필드와 그 필드에 들어갈 값을 지정할 수 있다.

컬렉션 생성

컬렉션을 생성하면 해다 컬렉션 내부에 문서를 추가할 수 있고 문서 내부에는 다시 컬렉션을 추가할 수 있는 계층적 구조로 구성되어 있다.

Firestore 계층 구조

 

Bigtable

Google Cloud에서 제공하는 NoSQL 빅데이터 데이터베이스 서비스로, Google의 검색, 분석, 지도, Gmail과 같은 핵심 서비스들을 지원하는 데이터베이스이다.

 

대규모 데이터 처리

대량의 데이터를 일관되게 낮은 지연 시간과 높은 처리량으로 처리할 수 있다.

운영 및 분석 애플리케이션에 적합하며, 사물인터넷(IoT), 사용자 분석, 금융 데이터 분석 등 다양한 분야에서 활용된다.

Bigtable은 대규모 데이터셋에서 수평적 확장이 가능하며, 지속적으로 높은 성능을 유지한다.

 

API를 통해 Bigtable에 데이터를 읽거나 쓸 수 있다.

Managed VMs, HBase REST Server, 또는 HBase 클라이언트를 사용하는 Java 서버를 통해 데이터를 처리 가능하다.

이는 애플리케이션, 대시보드, 데이터 서비스에 데이터를 제공하기 위해 사용된다.

 

그리고 Dataflow Streaming, Spark Streaming, Storm과 같은 스트리밍 프레임워크를 사용해 데이터를 스트리밍할 수 있다. 만약 스트리밍이 불가능한 경우, Hadoop MapReduce, Dataflow, Spark를 통해 배치 방식으로 데이터를 읽거나 쓸 수 있다.

결론

1. Cloud Storage

주요 용도: 10MB 이상의 불변 객체(BLOB) 저장.

특징: 객체당 최대 크기: 5TB

총 용량: 페타바이트 단위로 확장 가능

적합한 사례: 대규모 파일 저장, 백업 및 데이터 아카이빙

 

2. Cloud SQL

주요 용도: 온라인 트랜잭션 처리 시스템(OLTP)을 위한 SQL 지원

특징최대 용량은 64TB(머신 타입에 따라 다름), 수직적 확장에 적합

적합한 사례사용자 인증 정보 저장, 고객 주문 관리, 기존 웹 프레임워크와 애플리케이션 통합

 

3. Spanner

주요 용도: 수평적 확장이 필요한 대규모 SQL 데이터베이스

특징총 용량: 페타바이트 단위로 확장 가능, 글로벌 분산 데이터베이스로 높은 일관성과 가용성 제공

적합한 사례: 대규모 트랜잭션 데이터 처리, 수평 확장이 필요한 분산 시스템

 

4. Firestore

주요 용도: 대규모 확장성, 실시간 쿼리, 오프라인 지원

특징최대 용량: 테라바이트 단위

객체 크기: 엔터티당 최대 1MB

적합한 사례: 모바일 및 웹 애플리케이션에서 데이터 저장, 동기화, 쿼리

 

5. Bigtable

주요 용도: 대량의 구조화된 객체 저장

특징: 총 용량: 페타바이트 단위, SQL 쿼리와 다중 행 트랜잭션은 지원하지 않음

최대 크기: 셀당 10MB, 행당 100MB

적합한 사례: 분석 데이터: AdTech, 금융 데이터, IoT 데이터, 대량의 읽기 및 쓰기 작업

 

이미지

 

인스턴스를 새로 생성할 때 마다 OS설치와 같은 부분에서 많은 시간이 소요된다. 따라서 사용자 지정 이미지를 만들어 미리 설치된 소프트웨어로 인스턴스를 생성할 수 있게 한다. 이러한 방식을 사용하면 프로젝트 전체에서 공유가 가능한 장점이 있다. 

이미지 생성

 

이미지를 생성할 때 일반적으로 실행중인 인스턴스의 디스크는 사용할 수 없으므로 인스턴스를 중지한 다음에 이미지 생성을 해야한다. 

스냅샷은 영구 디스크의 복사본으로, 사용자 지정 이미지 생성에 활용된다.