본문으로 건너뛰기

· 약 2분
jay.prog

Cloud Composer

  • 파이프라인을 작성하여 예약 및 모니터링 할 수 있는 통합 워크플로 관리 서비스
  • Apache Airflow based
  • 구글 쿠버네티스 엔진 : 배포환경
  • Cloud SQL : 메타데이터 저장
  • App Engine : Airflow web server hosting
  • Stackdriver : 로그 관리
  • Pyhton을 기반으로 DAG와 Task에 대한 코드를 작성 가능
  • 분산 환경 및 웹 UI 기반의 강력한 모니터링 기능을 제공

Apache Airflow

  • Airbnb에서 개발된 워크플로 통합 도구
  • Python을 기본으로 태스크에 대한 코드를 작성할 수 있음
  • 웹 UI 기반의 강력한 모니터링 룰

Cloud Composer 주요 개념

  • 워크 플로우는 Directed Acyclic Graph (DAG)로 표현 됨
DAG
my_dag = DAG(
'may_dag',
description='My First DAG',
start_date=datetime(2022,8, 30),
schedule_interval='1 0 * * 2',
catchup=False
)
  • Operator : DAG 안에 정의되는 작업 함수, 이를 이용하여 Task를 작성
Bash Operator
task_echo_hello_world = BashOperator(
task_id='echo_hello_world',
bash_command='echo "Hello World (shell)"',
dag=my_dag
)
Python Operator
def print_hello_world():
print("Hello World!!! (python)")

task_print_hello_world = PythonOperator(
task_id='print_hello_world',
python_callable=print_hello_world,
dag=my_dag
)

데이터 저장

  • Cloud Composer 생성 시, GCS 내에 버킷을 만들고 클라우드 스토리지 FUSE를 사용하여 에어플로 인스턴스와 GCS 버킷을 서로 매핑
폴더GCS 경로매핑된 디렉터리용량 제한
DAGgs://bucket-name/dags/home/airflow/gcs/dags기본적으로 100GB용량 제공
Pluginsgs://bucket-name/plugins/home/airflow/gcs/plugins기본적으로 100GB용량 제공
Datags://bucket-name/data/home/airflow/gcs/data용량 제한 없음
Logsgs://bucket-name/logs/home/airflow/gcs/logs용량 제한 없음

· 약 1분
jay.prog

Source Repository

  • GCP에서 지원하는 비공개 Git Repository
  • Cloud Build와 연동하여 CI/CD 환경도 구축 가능
  • Github, Bitbucket Repository를 Cloud Source Repositories에 연결 할 수 있음 (자동으로 동기화 됨)
  • 자동 로깅 기능
    • Stackdriver Logging 로그를 보내 데이터 액세스 추적 및 문제 해결을 도움
  • IDE 지원
    • InteliJ
    • Visaul Studio
    • Android Studio

· 약 2분
jay.prog

Cloud SQL

GCP 에서 유지 및 관리를 해주는 완전 관리형 데이터베이스 서비스

  • MySQL

    • 지원되지 않는 기능
      • 사용자 정의 함수
      • InnoDB memcached 플러그인
      • Federated Engine
      • SUPER 권한
    • 지원되지 않는 명령문
      • LOAD DATA INFILE
      • SELECT .. INTO OUTFILE
      • INSTALL PLUGIN ...
      • UNINSTALL PLUGIN ...
      • CREATE FUNCTION ... SONAME ...
      • CREATE TABLE ... SELECT
      • CREATE TEMPORARY TABLE
      • 트랜재션 및 비트랜잭션 테이블을 모두 업데이트하는 트랜잭션이나 명령문
    • 지원되지 않는 함수
      • LOAD_FILE()
    • 지원되지 않는 클라이언트 프로그램
      • mysqlimport
      • mysqldump with--tab option
      • Only InnoDB support
  • PostgreSQL

    • 아직 사용할 수 없는 기능 --> 확인 필요

      • 특정 시점 복구 (PITR)
      • CSV 형식으로 가져오기 및 내보내기
    • 지원되지 않는 기능

      • SUPERUER 권한이 필요한 기능 (except, CREATE EXTENSION)
      • 커스텀 백그라운드 작업자

· 약 2분
jay.prog

Cloud Load Balancing (CLB)

  • 인스턴스 또는 기기 기반의 솔루션이 아님
    • 물리적 인프라에 큰 리소스 사용하지 않음
    • 인스턴스 기반 부하 분산 특유의 HA 확장 관리 문제가 발생하지 않음
  • 모든 트래픽 (HTTP(s), TCP, UDP)에 적용 가능
  • pre-warm up 과정이 필요 없음
  • 자동 확장 기능 -> 가까운 지역을 우선적으로 라우팅

Global vs Regional

  • Global CLB
    • One anycast IP
    • IPv6 Support
    • HTTP(s) Load Balancing (LB)
    • SSL Proxy
    • TCP Proxy
  • Regional CLB
    • Only IPv4 Support
    • Internal TCP/UDP LB
    • Network TCP/UDP LB

External vs Internal

  • External LB
    • VPC 가 아닌 다른 네트워크를 통해서 트래픽이 발생하는 경우
    • HTTP(s) LB
    • Network TCP/UDP LB
    • SSL Proxy
    • TCP Proxy
  • Internal LB
    • VPC 네트워크 내에서만 트래픽 발생의 경우
    • Internal TCP/UDP LB

Google CLB 종류

  • HTTP(s) LB
  • SSL Proxy LB
  • TCP Proxy LB
  • Network Traffic LB
  • Internal TCP/UDP LB

Auto Scailing

  • 리소스 사용량에 따라서 VM이 자동으로 증가하고 감소하는 기능
  • Instance Group을 통해서 설정 가능
  • Instance Template을 통해서 Managed Instance Group을 만들면 동종의 Instance 들이 만들어 지기 때문에 애플리케이션에서 트래픽 증가와 감소를 원활하게 처리 가능
  • 측정 항목
    • CPU 사용률
    • LB 사용량
    • Stackdriver Monitoring
    • Custom Index

· 약 1분
jay.prog

Google Cloud Storage (GCS)

  • GCP의 대표적인 객체 Repository -> AWS S3

Glossary

  • 프로젝트
  • 버킷
  • Repository 등급
  • 객체
  • 지리적 중복
  • 객체 불변성

Repository 등급

  • Multi-Regional Storage : 높은 가용성, 지리적 중복 제공
  • Regional Storage
  • Nearline Storage
  • Coldline Storage : 낮은 가용성

gsutil

  • CLI 환경에서 GCS에 접근 할 수 있는 명령어
  • 기능
    • 버킷 생성 및 삭제
    • 객체 업로드, 다운로드, 삭제
    • 버킷 및 객체 나열
    • 객체 이동, 복사 및 이름 바꾸기
    • 객체 및 버킷의 ACL 수정
  • gs://bucket name/object name

· 약 1분
jay.prog

구현해야 할 사항들

  • 로그인 시 보안
  • 회원가입 시 이메일 혹은 전화번호 인증
  • 비밀번호 찾기
  • 비밀번호 변경
  • 회원정보 변경

· 약 2분
jay.prog

CommonOAuth2Provider

  • 구글, 깃허브, 페이스북, 옥타 등... 의 설정값 제공
CommonOAuth2Provider
public enum CommonOAuth2Provider {
GOOGLE {
@Override
public Builder getBuilder(String registrationId) {
/* ... */
builder.clientName("Google");
return builder;
}
}
}
  • 이외의 다른 소셜 로그인 (네이버, 카카오 등...) 을 추가할 경우, 직접 추가 해 주어야 함

OAuth2 with Google

  • Google 에서 발급된 인증 정보를 통해 로그인 기능 및 소셜 서비스 기능 사용 가능
    • clientId
    • clientSecret

GCP Oauth2 생성 절차

  1. GCP 프로젝트 생성
  2. API 및 서비스 -> 사용자 인증 정보 생성 -> OAuth 클라이언트 ID 생성
  3. 애플리케이션 유형을 웹 애플리케이션으로 설정
  4. 승인된 Redirection URL 설정
    • 서비스에서 파라미터로 인증 정보를 주었을 때 인증이 성공하면 구글에서 리다이렉트 할 URL
    • spring boot 2 security 에서는 기본적으로 {doamin}/login/oauth2/code/{social service code}로 리다이렉트 URL 지원됨
    • 사용자가 별도의 Controller를 생성 할 필요가 없음 (Spring Security 에서 구현 해 놓은 사항)
  5. 생성된 클라이언트 정보에서 Client ID, Client Secret을 받아 application-oauth.properties 파일에 기입
    • spring.security.oauth2.client.registration.google.client-id=client-id
    • TODO 174 page

· 약 6분
jay.prog

What is Compute Engine

  • AWS의 EC2에 해당하는 서비스
  • 네트워크에 연결된 가상 서버를 제공, 부하 분산 클라우드 컴퓨팅으로 확장 가능

VM Instance

  • 각각의 Instance는 GCP 프로젝트에 속하며, 하나의 프로젝트에는 여러개의 인스턴스를 가질 수 있음
  • 프로젝트를 삭제하면 속한 인스턴스도 함께 삭제 됨
  • 프로젝트에는 최대 5개의 VPC 네트워크를 가질 수 있음
  • Compute Engine은 하나의 VPC 네트워크에 속하게 됨
  • 컨터이너를 사용하여 만들 수 있는 옵션 지원, 도커 이미지로 시작 가능
  • Google Cloud Platform, gcloud CLI, REST API, Mobile application 등을 이용하여 관리 가능

Machine 유형

  • Predefined
  • Custom

Live Migration

  • 소프트웨어 또는 하드웨어 업데이트와 같은 호스트 시스템 이벤트가 발생 하더라도 인스턴스를 종료 및 재부팅 할 필요 없이 계속 실행
  • 하드웨어 고장 등으로 Live Migration이 불가능한 경우, VM이 다운 되고 hostError가 로깅 됨

Preemptive VM Instances

  • GCP 내에서 아무도 사용하고 있지 않은 리소스를 사용 -> 일반 인스턴스 보다 훨씬 저렴한 가격으로 실행 가능
  • Compute Engine은 24 시간 동안 실행한 후 종료
  • Live Migration을 지원하지 못 할 수도 있음
  • Google Compute Engine SLA 에서 제외 됨

Instance Template

  • 동일한 구성의 인스턴스를 여러개 만들기 위한 목적

Instance Group

Managed Instance Group

  • 별 다른 설정 없이 오토 스케일링 지원
  • 자동 복구 정책 설정 가능
  • 로드 밸런서를 붙여서 그룹의 모든 인스턴스에 트래픽 분산 가능
  • 카나리아 업데이트, 롤링 업데이트 등의 유연한 롤아웃 시나리오 지원
  • 배포속도, 범위, 서비스 중단 수준 제어 가능
  • 영역(Zone) 관리형 인스턴스 그룹 : 단일 영역에 인스턴스 배포
  • 리전(Region) 관리형 인스턴스 그룹 : 동인 리전 내 여러 영역에 배포
  • 애플리케이션의 부하를 여러 영역에 분산 시켜 보다 높은 가용성을 제공 (자연재해 문제 회피 방안)
  • 기본적으로 디폴트 네트워크에 배치가 되며, 리전 범위의 IP 주소가 할당 됨 -> 더 작은 IP 범위를 사용하려면, 커스텀 모드 VPC 네트워크와 서브넷을 만든 다음 인스턴스 템플릿에 지정하여 그룹의 IP 범위를 제한 해야 함
  • 컨테이너를 이용하여 애플리케이션의 배포를 간소화 할 수 있음
  • 속도보다 비용이 중요한 작업의 경우 -> 인스턴스 그룹에서 선점형 VM 인스턴스를 사용하여 작업 부하 비용 절감 가능

Unmanaged Instance Group

  • 임의로 다른 구성을 가진 인스턴스를 추가하거나 제거 가능
  • 오토 스케일링, 자동 복구, 롤링 업데이트 지원, 인스턴스 템플릿 사용은 제공하지 않음
  • 가송성이 높고 확장 가능한 작업 부하를 배포하는 데에는 적합하지 않음

Global reousces (전역 리소스)

  • 동일 프로젝트 내의 모든 영역에 있는 모든 리소스가 접근 가능
  • Resources
    • Address
    • Images
    • Snapshots (Disk Snapshots)
    • Instance templates
    • VPC network
    • Firewalls
    • Routes
    • Global operations

Region resources (지역 리소스)

  • 동일한 지역 내의 모든 리소스가 액세스 가능
  • Resources
    • Address
    • Subnets
    • Regional managed instance group
    • Regional persistent disks
    • Regional operations

Zone resources (영역 리소스)

  • 영역에서 호스팅 되는 리소스, 영역별 리소스는 해당 영역에서 고유하며 동일한 영역의 다른 리소스에서만 사용 가능
  • Resources
    • Instance
    • Persistent disks
    • Machine types
    • Zonal managed instance group
    • Per-zone operations

선점형 인스턴스 종료 스크립트 실행 과정

  1. 스크립트 파일을 인스턴스로 복사
  2. 스크립트 파일에 관한을 설정하여 실행 가능하게 만듦
  3. 인스턴스가 종료되면 스크립트 파일을 실행

· 약 9분
jay.prog

VPC

  • GCP 리소스를 위한 관리형 네트워킹 기능 제공
    • 네트워크
    • 인터페이스 및 IP 주소
    • VPC 공유 및 피어링
    • 하이브리드 클라우드
    • 부하분산

VPC 네트워크

  • 연결된 라우터와 방화벽 규칙을 포함한 전역 리소스
  • 서브넷은 지역(Zone) 리소스, CIDR을 이용하여 IP 주소범위를 정의
  • 방화벽을 통한 트래픽 제어 가능
  • Google API 서비스를 내부 IP 주소로 접근 가능
  • IAM 을 통한 관리
  • 공유 VPC
  • VPC 네트워크 피어링 (다른 프로젝트, 다른 조직의 VPC 네트워크 연결 가능)
  • Cloud VPN/Cloud interconnect 를 통한 하이브리드 클라우드 환경 지원
  • IPv4 유니캐스트 트래픽만 지원
  • 프로젝트는 predefied default 네트워크로 시작하며, 커스텀을 통한 네트워크 선택 가능

Network and Subnet

  • Region 객체 이므로, 선택한 Region에 따라 사용가능한 서브넷이 결정됨
  • 생성 모드
    • 자동 모드 : Zone 마다 서브넷이 하나씩 자동 생성
    • 커스텀 모드 : 개발자가 직접 서브넷, IP 범위 설정
  • 서브넷 기본 IP 주소 범위 최대 5개 까지 정의 가능 -> 현재 기준 확인 필요
  • 기본 IP 주소 범위
    • RFC 1918 CIDR
    • VM 내부 IP 주소
    • VM 별칭 IP 주소
    • 내부 부하 분산기능의 IP 주소에 사용
  • 보조 IP 주소 범위
    • RFC 1918 CIDR에 근거하여 최대 5개까지 정의 가능
    • 별칭 IP 주소에만 사용됨

예약된 IP

  • Network : 10.1.2.0/24
에약된 주소예시
네트워크10.1.2.0
기본 GW10.1.2.1
끝에서 두번째10.1.2.254
브로드캐스트10.1.2.255

자동 모드 IP 범위 -> 현재 버전 검증 필요

  • 생성 시점에 Zone당 하나의 Subnet으로 구축 됨
  • 새 지역에서 자동으로 새 서브넷을 받음
ZoneCIDRDefault GW
asia-east110.140.0.0/2010.140.0.1
asia-east210.170.0.0/2010.170.0.1
asia-northeast110.146.0.0/2010.146.0.1
asia-south110.160.0.0/2010.160.0.1
asia-southeast110.148.0.0/2010.148.0.1

Firewall

  • VPC Network Level에서 정의됨, 규칙 자체는 네트워크 간에 공유 될 수 없음
  • IPv4 트래픽만 지원, CIDR 표기법 사용
  • Allow or Deny
  • Ingress or Egress 트래픽 모두에 적용되도록 정의
  • 구성 요소
    • 우선순위 : 0 ~ 65535, Integer (default : 1000, 낮을 수록 우선순위가 높음)
    • Traffic Direction : Egress / Ingress
    • Action : Allow / Deny
    • Enable / Disable
    • target : 네트워크의 모든 인스턴스, 대상 태그별 인스턴스, 대상 서비스 계정별 인스턴스
    • source : ingress 에만 적용 (default : 0.0.0.0/0)
    • destination : egress 에만 적용 (default : 0.0.0.0/0)
    • protocol : 특정 프로토콜 / 포트 (e.g. tcp, udp, icmp, tcp:3000 ...)
  • 방화벽 규칙 e.g.
우선순위방향작업적용대상소스대상프로토콜/포트
1000ingressallowenabled트래픽을 수신하는 인스턴스0.0.0.0/0N/Atcp:80
1000egressallowenabled트래픽을 송신하는 인스턴스N/A0.0.0.0/0icmp

Routing

  • 자동생성 경로 : 네트워크 생성 / 서브넷 추가 / 서브넷 보조 IP 수정의 경우, 시스템에서 자동으로 생성되는 경로
  • 커스텀 경로 : 사용자가 직접 또는 Cloud Route를 사용하여 만들고 유지 및 관리하는 경로
  • 유형
    • 시스템 생성
      • 기본 경로
      • 서브넷 경로
    • 커스텀 생성
      • 정적 경로
      • 동적 경로

Routing - 기본 경로

  • VPC 네트워크 생성의 경우, GCP 시스템에서 자동으로 기본 경로를 만들어 줌
  • VPC 네트워크에서 나가는 경로
  • 기본 운선순위 : 1000

Routing - 서브넷 경로

  • VPC 네트워크 서브넷으로 가는 경로
  • 각 서브넷은 대상 위치가 서븐넷 내의 IP를 하나 이상 가지게 됨
  • 서브넷의 보조 IP 범위가 있는 경우, GCP는 각 보조 범위에 대해 해당하는 위치를 사용하여 서브넷 경로를 만듦

Routing - 커스텀 정적 경로

  • 이름
  • 네트워크
  • 대상 범위
  • 우선 순의
  • 다음 홉
  • 태그

Routing - 커스텀 동적 경로

  • 대상 위치는 항상 VPC 네트워크 외부의 IP 범위를 나타내며, 다음 홉은 항상 BGP 피어 주소

Forwarding Rule

  • 부하 분산 / 프로토콜 전달 기능 지원
  • 대상
    • 로드 밸런싱 풀
    • 대상 인스턴스
  • 프로젝트 별, 최대 50개 까지 생성 가능
  • 기본 TCP
  • 포트 범위의 사용은 TCP, UDP, SCTP 프로토콜 에서만 지정할 수 있음

IP 주소

  • 고정 외부 IP 주소
    • 외부 IP 주소를 이용할 경우, 발신자가 동일한 VPC 네트워크에 있더라도, 추가 청구 요금이 발생 가능
    • 고정 외부 IP 주소 : 전역 부하 분산시에는 고정 외부 IP 주소만 사용 가능
    • 임시 외부 IP 주소
  • 임시 외부 IP 주소
    • 리소스의 수명 동안만 지속이 되는 IP
    • 외부 IP 관련하여 별 다른 설정을 하지 않을 경우, 자동으로 임시 외부 IP 주소로 설정 됨
  • 내부 IP 주소
    • 고정 내부 IP 주소
    • 임시 내부 IP 주소 : 리소스가 중지되었다가 재시작될 경우 새로운 임시 IP 주소로 바뀜

별칭 (alias) IP 범위

  • e.g. my-team : 192.168.0.2 ~ 192.168.0.254
  • 하나의 VM 에서 여러 서비스를 실행하고 있어서 각 서비스에 서로 다른 IP 주소를 할당 하고자 할 경우 유용
  • Google Kubernetes Engine Pods 에서도 동작 함

다중 네트워크 인터페이스

  • 여러 네트워크 인터페이스를 통해 네트워크 VM이 다른 VPC 네트워크 간 또는 인터넷 간 트래픽을 보호하는 게이트웨이 역할

공유 VPC

  • 여러 프로젝트의 리소스를 공통 VPC에 연결 가능
  • 네트워크의 내부 IP를 사용하여 서로 안전하고 효율적으로 통신 가능
  • Host Project
    • Host Project의 VPC Network를 공유 VPC Network 라고 하며, 외의 다른 프로젝트들을 Service Project 라고 함
  • 중앙 집중식으로 관리 할 때 유용

VPC 네트워크 피어링

  • 모든 통신이 private RFC 1918 IP 주소를 사용하여 이루어 짐 (외부 IP 주소를 이용하지 않고도 서로 통신 가능)
  • 저 지연
  • 서비스 공개 위험성 저하
  • 네트워크 추가 비용 절약

Cloud VPN

가상의 사설 네트워크를 통해 물리적 온프레미스 네트워크 또는 다른 벤더의 클라우드 서비스와 연결 가능

  • IPSec 이용 (Tunneling)
  • Onpremise <-> VPC Network

Cloud Interconnect (Interconnect)

  • 고속의 물리적 연결
  • Private Network <-> Google Network
  • Private Network <-> ISP <-> Google Network