클라우드 배움일지— 구글 클라우드

배우는 자(Learner Of Life)
11 min readFeb 13, 2025

--

인터넷에 떠도는 구름(Cloud)

인터넷 상공을 떠도는 구름을 상상해보자(1).

구름은 비를 만들어내어 대지를 습하게 만드는데 도움을 주고, 대지에서 증발한 수분이 구름으로 들어와 다시 땅으로 떨어질 수 있게한다. 이는 지구의 생태계를 유지하는데 있어 필수적이다. 이처럼 가상의 세계에서도 생태계를 유지할 수 있게 해주는 클라우드(Cloud)가 존재한다.

클라우드는 AI시대로 접어들면서 인터넷 세계에서 절대 없어서는 안되는 존재처럼 떠올랐다. 인터넷 상에서 가상으로 떠도는 서버들로써 데이터를 저장하고, 어플리케이션을 실행하며, 다양한 서비스를 제공하는 주체다. 쉽게 말해서 인터넷에서 가상으로 떠도는 컴퓨터라고 할 수 있다. 하늘에 떠있는 구름처럼 독립적이면서도 그 자체로 무언가를 가지고 있으며 특정 기능을 수행한다고 생각할 수 있다.

현재 시중에서 가장 널리쓰이는 클라우드 제품은 3가지로 좁혀진다. AWS, Azure, 그리고 Google Cloud Platform(GCP)다. 이 중 나는 GCP에 대해 알아보려한다. 이 글에서는 GCP에 무료로 가입하는법, GCP내 비용을 줄이는 법, 리소스를 정리하는 방법 및 리소스 권한 설정 방법 등에 대해 소개해보려한다.

구글 클라우드(Google Cloud) 소개

클라우드가 필요한 경우는 어떤 경우일까? 데이터가 라이브로 스트리밍 될 때, 그 데이터를 실시간으로 저장하고 처리할 주체가 필요할 수 있다. 특정 솔루션을 어느 지역에 어떻게 적용할지에 대한 규정을 정하고, 그것을 실제로 적용해줄 주체가 필요할 수 있다. 또한 많은 수의 사람들이 동시에 특정 서비스를 활용하려고할 때 트래픽이나 처리효율을 최적화할 수 있는 주체가 필요할 수 있다. 바로 이러한 역할을 할 수 있는 주체가 될 수 있기에 클라우드 기술이 각광받는 것이다.

장점

구글 클라우드는 아래와 같은 장점을 가지고 있다. 결론적으로 리소스를 효율적으로 활용하는 것을 가능하게 해준다고 볼 수 있다.

  • 비용절약: 하드웨어를 구매하여 직접 별도의 서버를 구성할 필요가 없고, 데이터를 다른 곳에 주기적으로 이전시킬 필요를 줄여준다.
  • 유연성: 요구에 따라 유연하게 스케일링이 가능하며 실제 사용하는 리소스에 대해서만 비용을 지불한다.
  • 신속성: 리소스의 제공이 매우 빠르다.
  • 보안성: API의 보안을 유지하면서 관리가 가능하다.
  • 다기능성: 인프라 뿐만아니라, 데이터 분석 및 머신러닝 서비스등도 제공한다.

구글 클라우드 비용 최적화하기

구글 클라우드에서는 유저가 실행하는 인스턴스의 사용시간에 대해서만 비용을 청구한다. 따라서 중단된 인스턴스에 대해서는 비용을 지불하지 않는다. 그러나 중단된 인스턴스가 디스크 용량이나 특정 IP등 리소스를 사용한다면 비용이 청구될 수 있다. 따라서 구글 클라우드에서 비용을 절감할 수 있는 몇가지 방안을 소개한다.

GCP는 미리 정의된 정량의 RAM과 CPU를 활용하는 가상 머신(2)을 제공한다. 아래는 대표적인 4가지 구글 클라우드의 기본 가상 머신들이다.

  • General-purpose: 말그대로 범용적인 목적의 머신이며, 여러 형태의 작업에 대해 가장 가성비가 뛰어난 머신이라 할 수 있다.
  • Memory-optimized: 메모리가 많이 필요한 작업에 적합하며, 다른 머신들보다 코어당 메모리를 더 많이 제공한다.
  • Compute-optimized: 코어당 가장 높은 성능을 제공하며, 연산이 많이 필요한 작업에 적합하다.
  • Shared-core: 물리적인 코어를 여러 명이 같은 시간에 공유하는 형태이며, 작은 규모의 어플리케이션을 실행하는데 적합하다.

일반적으로 가상 머신 및 클라우드 SQL 인스턴스를 더 많이 이용할수록 장기적으로 할인되는 폭이 커진다(최대 30%). 이는 구글에서 자동으로 적용해주는 사항이다.

또한 특정한 CPU 및 RAM리소스를 일정량 이상 지속적으로(1년에서 3년 정도) 사용할 경우 57% 정도의 할인을 받을 수 있다.

원하는 정도의 리소스를 사용할 때 얼마의 비용이 나올지를 측정할 수 있는 Price Calculator을 참조하면 좋다. 이는 예산관련 경고인 budget alerts를 생성하여 예측하지 못한 비용이 발생하는 것을 막을 수 있게 해준다.

우선 구글 클라우드는 입문자들을 위해 300달러 정도의 크레딧이 포함된 3개월 무료 체험판을 제공한다. 이 글에서는 이 체험판을 활용해 구글 클라우드를 활용해 볼 것이다.

Preemtible 가상 머신

만약 조금 다른 설정으로 클라우드를 구성하고 싶다면 커스텀하게 머신을 구성할 수도 있다. Preemptible 가상 머신을 활용해 80% 이상의 비용을 줄일 수 있다. Preemptible의 의미는 “선점가능한"이라는 뜻인데, 누군가 특정 목적으로 리소스를 선점하여 활용할 수 있다는 의미다. 특정한 에러나 버그나 나도 실행에 크게 문제가 없는 Fault-tolerant 및 non-critical한 어플리케이션에 적합하다. 이러한 가상 머신에서는 Shut-down 스크립트를 활용해 현재 진행 중인 작업의 상태를 저장할 수 있고, 나중에 불러와 다시 이어서 하는 것이 가능하다.

단, 구글은 인스턴스를 언제든지 중단 가능하며, 30초의 경고 이후 24시간이 지나면 인스턴스가 완전히 중단된다. 따라서 가상 머신의 중단을 막기 위해서 구글은 여러개의 작은 인스턴스를 사용하고 피크 타임이 아닌 시간에 작업을 진행하는 것을 권장한다.

Startup 및 Shutdown 스크립트

Start-up 및 Shut-down 스크립트는 가상 머신의 시작과 종료시에 어떠한 행위를 할지를 제어할 수 있게 해준다. 예를 들어 특정 소프트웨어를 설치하거나, 특정 데이터를 다운로드하거나, 로그를 백업시키는 작업을 정의할 수 있다. 이러한 스크립트는 2가지 방법으로 정의할 수 있다. 주로 여러 인스턴스를 생성하고 스크립트를 관리하기에 용이한 2번 방법이 자주 쓰이는 편이다.

  1. 구글 콘솔에서 인스턴스 생성시 코드를 붙여넣을 수 있는 필드에 작성
  2. 메타 데이터 서버 URL을 활용하여 구글 클라우드 저장소에 저장된 스크립트를 인스턴스가 참조하도록 구성

구글 클라우드에서 리소스 관리하기

구글 클라우드는 결국, 사용하는 리소스 대비 비용을 지불하는 것이기에 리소스의 활용과 관리가 가장 관건이 될 수 밖에 없다. 그렇다면 어떻게 리소스를 구글 클라우드 상에서 다룰 수 있을까?

구글 클라우드상에서 리소스는 이렇게 구성되어 있다(2).

위 그림에서 표현된 것처럼, 구글 클라우드는 크게 4가지의 리소스로 분류될 수 있다. 이들은 모두 Resource Manager를 통해 관리될 수 있다.

  • 조직의 리소스: 리소스 위계에서 가장 상위에 위치해 있다. 회사와 같은 특정 조직 전체의 리소스를 말한다.
  • 프로젝트 리소스: 프로젝트별 리소스를 말한다. 예를 들어, 프로덕션 리소스와 개발 리소스에 대한 프로젝트를 분리하여 리소스를 관리할 수 있다. 리소스를 생성하기 위해 반드시 필요한 부분이다.
  • 폴더 리소스: 폴더 별로 할당된 리소스를 말하며, 프로젝트를 서로 구분할 수 있는 또하나의 단계를 제공한다. 예를 들어, 회사 각 부서에 폴더를 생성하여 각 폴더에 해당하는 리소스를 관리할 수 있다.
  • 리소스: 가상 머신, 데이터베이스 인스턴스, 로드 발란서 등등 실제 활용 가능한 인스턴스 단위의 리소스를 말한다.

최대 설정 리소스를 초과해 사용하여, 청구서에서 예상치 못한 비용이 나오는 것을 막아주는 Quota가 존재한다. 이 Quota를 증가시키려면 Support 티켓을 생성하면된다. GCP내 리소스는 일반적인 파일 시스템처럼 부모/자녀 관계를 갖는다. 즉, 위계에 따라 권한(Permission)이 부모로부터 상속될 수 있다. 예를 들어 조직 단위에서 권한을 얻었다면, 해당 조직내 속하는 모든 프로젝트 및 폴더에도 권한을 가지게 된다. 구글 클라우드는 부모의 정책이 자녀의 정책을 항상 오버라이드(Override)할 수 있다는 특징을 가지고 있다.

이러한 위계형 구조는 특정 조직으로 하여금 공통으로 사용하는 리소스에 대해 접근권한이나 설정을 관리하기 용이하도록 해준다. 조직내 모든 리소스에 접근할 수 있는 전역 관리자 권한을 생성할 수도 있다. 이는 가장 높은 권한이기에 구글의 권고 사항에 유의해서 사용할 필요가 있다.

라벨(Label)

키-값 쌍으로 이루어진 것으로써, GCP내에서 리소스를 정리할 때 활용할 수 있다. 리소스에 라벨을 부착하면(예를 들어 가상 머신에 부착할 수 있다) 라벨에 따라서 리소스 필터링이 가능하다. 라벨에 따라 비용을 정산할 때에도 유용하다. 라벨이 주로 활용되는 경우는 아래 4가지가 있다.

  • 환경: production, test, 등등
  • 리더: 팀 혹은 프로덕트 리더
  • 컴포넌트: 백엔드, 프론트, 등등
  • 리소스 상태: 활성, 비활성, 등등

라벨과 네트워크 태그를 혼동할 수 있는데, 아래와 같은 차이점이 있다.

  • 라벨: 그 어떤 형태의 GCP 리소스에 지정될 수 있고, 오직 조직의 리소스를 정리하는 역할만 할 수 있다.
  • 네트워크 태그: VPC 리소스에 대해서만 적용되며, 리소스가 활용되는 방식에 영향을 줄 수 있다(예: Firewall 규정을 적용한 후에 활용하는 경우 등)

클라우드 IAM(Cloud IAM)

AWS에도 IAM(Identity & Access Management)기능이 있듯이, GCP에도 그런 기능이 있다고 볼 수 있다. 이름처럼 누가 어떤 리소스에 접근할 수 있는지를 설정할 수 있게 해준다. 리소스는 가상 머신이 될 수도 있고, 데이터베이스 인스턴스, 유저, 등등이 될 수 있다.

여기서 주의할 것은 권한이 특정 유저에게 직접적으로 지정되지는 않는다는 것이다. 그대신, 역할(role)에 기반해 지정할 수 있다. 즉, 해당 role을 가진 member들에 지정되는 방식이다. 정책(policy)는 특정 역할(role)에 지정된 하나 혹은 둘 이상의 member 묶음(bundle)에 지정될 수 있다.

GCP 상의 클라우드 IAM 화면(2)

GCP 프로젝트에서 ID는 구글 계정이라고 볼 수 있다. 구글 계정은 일반적으로 GCP 밖에서 생성(Gmail, Naver메일 등)되어 이메일 계정으로 규정된다. ID는 아래와 같은 여러 타입이 있다.

  • 구글 계정: 특정 사람의 역할을 나타낼 수 있다. 예를 들어 엔지니어, 관리자 등등이 있을 수 있다.
  • 서비스 계정: 인간이 아닌 유저를 식별할 수 있다. 어플리케이션, 서비스, 가상 머신 등등이 될 수 있다. 주로 account key라는 것에 의해 인증 프로세스가 정의될 수 있고, 이는 구글 혹은 유저에 의해 관리될 수 있다(단, 오직 유저가 생성한 서비스 계정에 한해서).
  • 구글 그룹: 여러 구글 및 서비스 계정의 묶음을 말한다.
  • G Suite Domain: 조직을 구분하기 위한 식별자로 볼 수 있다. 조직이 이미 Active Directory를 가지고 있다면, Cloud Identity를 통해 클라우드 IAM과 동기화될 수 있다.
  • allAuthenticatedUsers: GCP에 인증된 그 어떤 유저를 말한다.
  • allUsers: 인증 여부에 상관없이 개별적인 유저들을 말한다.

서비스 계정 권고 사항

구글에 따르면 서비스 계정 설정시 아래 사항에 주의할 필요가 있다.

  • 기본 서비스 계정을 사용하지 않는다
  • 최소 권한에 대한 원칙(Principle of Least Privilege)을 적용한다. 예를 들어, 서비스 계정으로 활성화 할 수 있는 사람이 누구인지 정의하거나, 계정이 필요로하는 최소 권한 만을 제공하거나, 각 서비스를 이용할 계정에 대한 필요 권한만을 갖는 서비스 계정을 만들 수 있다.

역할(Roles)

역할은 권한의 모음이라고 볼 수 있다. 이는 3가지 형태의 역할로 분류된다.

  • Primitive: 전체 프로젝트에 대해 적용되는 권한이다. Viewer, Editor, Owner 등 3가지로 분류된다.
  • Predefined: 특정 서비스에 대해 접근할 수 있는 권한을 제공한다. 예를 들어, storage.admin 은 저장소에 대한 관리자 권한을 갖는다는 의미다.
  • Custom: 스스로의 Role을 생성하고 필요한 특정 권한과 결합할 수 있다.

역할을 지정할 때, 최소 권한의 원칙을 따른다. 일반적으로 Primitive 역할보다 미리 정의된 Predefined 역할을 선호한다.

참조:

(1) https://pixabay.com/photos/mountain-cloud-sky-nature-summit-7097104/

(2) https://cloud.google.com/compute/docs/machine-resource

--

--

배우는 자(Learner Of Life)
배우는 자(Learner Of Life)

Written by 배우는 자(Learner Of Life)

배움은 죽을 때까지 끝이 없다. 어쩌면 그게 우리가 살아있다는 증거일지도 모른다. 배움을 멈추는 순간, 혹은 배움의 기회가 더 이상 존재하지 않는 순간, 우리의 삶은 어쩌면 거기서 끝나는 것은 아닐까? 나는 배운다 그러므로 나는 존재한다. 배울 수 있음에, 그래서 살아 있음에 감사한다.

No responses yet