GCP Cloud Engineer - 70

2024-04-20

  • Cloud
  • GCP

마이크로서비스 아키텍처

  • 마이크로서비스 vs. 모놀리식 애플리케이션

    • 마이크로서비스: 큰 프로그램을 작고 독립적인 서비스로 분할

    • 모놀리식 애플리케이션: 전체 기능을 하나의 코드베이스에서 구현, 하나의 데이터베이스 사용

  • 마이크로서비스의 이점

    • ㅁ 팀이 독립적으로 일하고 각 팀의 주기에 맞춰 배포 가능

    • ㅁ 조직 확장 및 속도 향상 지원

    • ㅁ 요구 사항에 따라 서비스를 독립적으로 확장 가능

    • ㅁ 로깅, 모니터링의 명확성 개선, 세밀한 원가 계산 제공

    • ㅁ 애플리케이션의 전체적인 확장성과 안정성 향상

  • 마이크로서비스의 단점

    • ㅁ 서비스 간 명확한 경계 정의 어려움

    • ㅁ 분산된 서비스로 인한 장애 발생 지점 증가 및 인프라 복잡성 증가

    • ㅁ 네트워킹을 통한 서비스 간 통신 시 보안 문제 및 지연 시간 증가

    • ㅁ 서비스 인터페이스 관리 및 버전 관리에 강력한 요구사항 필요

  • 마이크로서비스 설계 및 배포

    • Google Cloud 플랫폼: App Engine, Cloud Run, GKE, Cloud Functions 등 서비스 제공

    • ㅁ 각 서비스의 독립성 확보를 위한 별도의 데이터 저장소 필요

    • ㅁ 다양한 마이크로서비스 간 강력한 계약 정의 및 독립적인 배포 주기 지원

    • ㅁ 하위 시스템의 동시 A/B 테스트 수행 및 테스트 자동화 최소화

  • 스테이트리스(Stateless) vs. 스테이트풀(Stateful) 서비스

    • 스테이트리스: 상태 정보를 유지하지 않고 외부에서 상태를 가져오는 방식으로, 관리 및 확장이 용이

    • 스테이트풀: 상태 정보를 유지하며, 서비스 확장 및 업그레이드에 어려움 존재

    • ㅁ 스테이트풀 서비스 설계 시 공유 백엔드 스토리지 서비스 활용 권장

    • Google Cloud의 Firestore, Cloud SQL, Memorystore 등을 활용한 데이터 서비스 및 캐싱 서비스 제공

권장사항(Best Practice) Twelve-Factor 앱

  • 코드베이스

    • ㅁ 모든 코드는 Git과 같은 버전 제어 시스템으로 추적해야 함

    • Cloud Source Repositories 사용 가능

  • 종속 항목

    • ㅁ 종속 항목은 명시적으로 선언하고 버전 제어에 저장해야 함

    • Maven이나 Pip 같은 언어별 도구로 종속 항목 추적

    • ㅁ 앱과 종속 항목을 컨테이너로 패키징하여 격리

  • 구성

    • ㅁ 환경별 구성은 코드 외부에 저장하고 환경 변수에 의해 관리됨
  • 지원 서비스

    • ㅁ 모든 지원 서비스(URL로 액세스 가능)는 구성에 설정

    • ㅁ 목적은 지원 서비스를 쉽게 다른 구현으로 교체하는 것

  • 빌드, 출시, 실행

    • ㅁ 빌드: 소스 코드에서 배포 패키지를 생성

    • ㅁ 출시: 런타임 환경 구성과 결합하여 특정 출시 버전 생성

    • ㅁ 실행: 생성된 애플리케이션 실행

  • 프로세스

    • ㅁ 애플리케이션은 스테이트리스 프로세스로 실행

    • ㅁ 상태 관리 필요 시, 각 서비스에는 자체 데이터 저장소 및 캐시 존재

  • 포트 바인딩

    • ㅁ 서비스는 포트 번호를 사용하여 노출하며, 별도의 웹 서버 필요 없음

    • ㅁ 애플리케이션은 Compute Engine, GKE, App Engine, Cloud Run에 배포 가능

  • 동시 실행

    • ㅁ 애플리케이션은 수평 확장을 위해 새로운 프로세스를 사용할 수 있어야 함

    • ㅁ 수요와 부하에 따라 수평 확장 및 축소 가능

  • 일회성 프로세스

    • ㅁ 애플리케이션은 인프라의 일시적 장애를 처리하고 빠르게 재시작 가능해야 함

    • ㅁ 리소스를 빠르게 확보 및 해제할 수 있어야 함

  • 개발/프로덕션 동등성

    • ㅁ 개발, 스테이징, 프로덕션 환경을 가능한 한 동일하게 유지

    • Docker 컨테이너를 통한 환경 설정과 프로비저닝

  • 로그

    • ㅁ 로그는 앱의 핵심 로직에서 분리되어야 하며 표준 출력을 통해 로깅

    • ㅁ Google Cloud는 로그 수집, 처리, 구조화 분석을 위한 도구 제공

  • 관리 프로세스

    • ㅁ 관리 프로세스는 일회성이며 애플리케이션에서 분리되어야 함

    • GKE의 크론 작업, App Engine의 클라우드 작업, Cloud Scheduler 등을 사용하여 관리

GCP Cloud ...

GCP Cloud ...