Terraform을 이용한 Google Cloud Monitoring Alert 만들기 구글 인사이트 by Miyeon. Jo 2023년 11월 28일 구글PS2팀 권영배목차개요Google Cloud 콘솔에서 알림 정책을 수동으로 만들기Terraform을 이용한 알림 정책 만들기1. 개요이 문서에서는 콘솔에서 Google Cloud Monitoring에 대한 알림 정책(Cloud Run 작업용)을 만드는 방법과 이후 이를 Terraform 코드로 변환하는 방법을 설명합니다.2. Google Cloud 콘솔에서 알림 정책을 수동으로 만들기“Monitoring > Alerting” 페이지로 이동하여 “CREATE POLICY”을 클릭합니다.“CREATE POLICY” 클릭Cloud Run 작업 실행 상태에 따라 알림 정책을 만들고 싶습니다. 따라서 알림 조건 측정항목의 메트릭으로 Cloud Run 작업의 ‘COMPLETED EXECUTIONS‘을 선택하겠습니다. 다른 목적으로 알림이 필요할 수도 있습니다. 필요한 사항에 따라 측정항목을 적절하게 조정하는 것을 잊지 마세요. 워크플로우는 동일해야 합니다.Select a Metric > CLOUD RUN JOB – COMPLETED EXECUTIONS경고 조건 지표로 “Completed Executions”를 선택하겠습니다.메트릭을 선택한 후에는 특정 조건이 충족될 때만 경고가 트리거되도록 필터를 추가해야 합니다. Job이 성공했을 경우에 대해서 필터링을 추가합니다.ADD A FILTER ClickFilter : resultComparator : ‘=’Value : ‘successed’Add filter for alert condition metric.다음으로 Alert trigger 를 구성합니다. 내 ETL 작업은 매일 실행되도록 예약되어 있으므로 하루 이내에 성공적으로 실행되지 않으면 경고를 트리거하고 싶습니다.Configure alert trigger마지막으로 알림을 받을 방법을 선택해야 합니다.알림 채널이 아직 구성되지 않았습니다.아직 알림 채널을 구성하지 않은 경우 드롭다운 목록은 비어 있습니다. ‘알림 채널 관리’를 클릭하세요.알림 채널 중 하나로 새 이메일을 추가합니다.이메일을 입력 후 저장합니다.내 이메일을 추가하면 알림 채널 드롭다운 목록에 표시됩니다.알림 채널을 선택한 다음 이 알림 정책의 표시 이름을 입력합니다.알림 정책 이름을 입력하세요알림 정책이 성공적으로 생성되었습니다. 아래와 같이 표시됩니다.알림 정책이 생성되었습니다.여기에서 이 버튼을 전환하여 언제든지 정책을 비활성화하거나 활성화할 수 있습니다.아직 이 페이지를 떠나지 마세요. 정책 표시 이름을 클릭하고 다음 부분에 대한 JSON 구성 파일을 다운로드합니다.이 알림 정책에 대한 JSON 구성 파일을 다운로드합니다.3. Terraform을 이용하여 알림 정책 만들기JSON 구성 파일을 열고 가능한 한 많이 복사하여 테라폼 구성 파일에 붙여넣어 보십시오. 나중에 terraform import 작업을 수행하려는 경우 정책 ID가 필요할 수 있으니 JSON 파일에서 참조해 사용하세요.Alerting policy JSON configuration file이러한 모든 정보를 통해 Terraform 코드를 사용하여 복제할 수 있습니다.resource "google_monitoring_alert_policy" "alert_policy_name" { display_name = "No successful job execution in one day" combiner = "OR" conditions { display_name = "Cloud Run Job - Completed Executions" condition_absent { filter = "resource.type = \"cloud_run_job\" AND resource.labels.job_name = has_substring(\"etl-\") AND metric.type = \"run.googleapis.com/job/completed_execution_count\" AND metric.labels.result = \"succeeded\"" duration = "86400s" trigger { percent = 100 } aggregations { alignment_period = "300s" per_series_aligner = "ALIGN_RATE" } } } enabled = true notification_channels = ["projects/${gcp-project-id}/notificationChannels/${notification-channel-id}"] }monitoring.tf이 Terraform 코드 블록을 유지하여 다음 알림 정책을 직접 구성할 수 있습니다. 기존 정책을 Terraform 상태로 가져오려면 terraform import를 실행해야 합니다. 아래 표시된 코드를 사용할 수 있습니다. #!/bin/bash ######################################## # # run chmod +x terraform_import.sh to make the script executable # # Execute this script: ./terraform_import.sh # ######################################## set -e GCP_REGION="us-central1" GCP_PROJECT_ID="" GCP_PROJECT_NUM="" SERVICE_ACCOUNT_NAME="" SERVICE_ACCOUNT_EMAIL="" # ---------- import google monitoring alert policy to terraform ------------ GCP_ALERT_POLICY_ID="" TERRAFORM_ALERT_NAME="" terraform import google_monitoring_alert_policy.$TERRAFORM_ALERT_NAME \ projects/$GCP_PROJECT_ID/alertPolicies/$GCP_ALERT_POLICY_IDterraform_import.sh이메일에 알림이 어떻게 표시되는지 궁금하신 경우 아래 이미지를 참조하세요.경고 알림 이메일의 예. 출처https://cloud.google.com/monitoring/alerts/terraform?hl=kohttps://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/monitoring_alert_policyhttps://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/monitoring_notification_channel 2023년 11월 28일
국내 굴지의 식품 제조/유통 기업 A사 by Miyeon. Jo 2023년 11월 22일 국내 굴지의 식품 제조/유통 기업 A사 국내 굴지의 식품 제조/유통 기업 A사 산업 분야제조/유통 국가대한민국 상품 및 서비스헬프나우 데이터옵스Snowflake 많은 기업들이 그동안 쌓아 온 수많은 데이터를 바탕으로 비즈니스 성과를 이루고자 하지만 데이터를 제대로 관리하고 분석하는 과정에는 막대한 비용과 시간이 소요됩니다. 특히 오랜 업력을 지닌 제조/유통 기업의 경우 고객 데이터, 영업 데이터, 제조 데이터 등 각 데이터가 저장된 시스템의 종류와 위치가 모두 다르고 데이터 유형도 너무 다양합니다. 따라서 데이터를 조회하는 것에서부터 많은 한계에 직면하곤 합니다. 베스핀글로벌은 이러한 기업의 Pain Point를 해결하기 위해 데이터 수집부터 전환, 분석, 처리, 운영ᐧ관리까지 AI 비즈니스를 실현하는 데 필요한 모든 영역을 체계적이고 신속하게 지원합니다. HepNow DataOps는 기업 데이터를 핵심 자산으로 만들고 그 활용도를 극대화할 수 있는 전략적이고 체계적인 데이터 관리 프로세스와 방법론을 제시합니다. 이어지는 제조/유통 분야 엔터프라이즈 기업의 실제 사례를 통해 HelpNow DataOps가 산재된 데이터를 통합적으로 관리하기 위해 어떠한 해결책을 제시했는지 구체적인 내용을 확인하시길 바랍니다. Situation 베스핀글로벌은 클라우드 기반의 모던 데이터 플랫폼을 구축하는 과정에서 데이터 클라우드 솔루션 ‘스노우플레이크(Snowflake)’를 활용해 모든 시스템의 데이터를 통합적으로 수집하고 분석할 수 있도록 구성했습니다. 모던 데이터 플랫폼에서는 정형 데이터는 물론 비정형, 반정형, 웹페이지 크롤링, 클라우드 플랫폼, 세일즈포스 등 다양한 유형의 데이터가 AWS S3를 거쳐 스노우플레이크로 수집됩니다. 이렇게 수집된 데이터는 스노우플레이크 상에서 한 번에 조회하고 분석하는 등 편리하게 활용할 수 있습니다.스노우플레이크는 인터넷 크롤링 데이터, 이모지와 같은 반정형 데이터를 간편하게 처리해 인터넷상의 댓글이나 고객 리뷰 등도 놓치지 않고 데이터로 활용할 수 있어 매우 만족스럽습니다. 하나의 테이블에 대해 팀별/사용자별 조회 권한을 각기 다르게 설정할 수 있기 때문에 복잡한 권한 구조를 지닌 조직에서도 문제없이 사용 가능하다는 점도 큰 장점입니다. 또한 스토리지와 CPU가 분리되어 있어 하나의 데이터베이스(DB)에 대해서도 비즈니스 상황에 따라 서로 다르게 구성해 신속하게 활용할 수 있어 시간 및 비용 측면에서도 매우 효율적입니다. 구축 전 구축 후 해당 시스템 접속 후 해당 데이터만 조회 가능 여러 시스템 간 연계 분석이 어려움 데이터 적시성의 한계 - 데이터 조회를 위해서는 IT 인력 지원이 반드시 필요함 데이터 통합 저장소 상에서 모든 데이터 조회 가능 여러 시스템 간 연계 분석이 간편함 IT 인력 지원이 없어도 필요한 데이터를 언제든지 조회 * 이해를 돕기 위한 구성으로, 실제 아키텍처와 차이가 있습니다. Benefit A사는 50년 이상의 역사를 지닌 국내 굴지의 식품 제조 및 유통 기업입니다. 업무 프로세스를 개선하고 기존의 비즈니스를 디지털 환경에 적합한 형태로 발전시켜 나가기 위해 전사 차원에서 클라우드 기반의 디지털 트랜스포메이션을 추진했습니다.디지털 트랜스포메이션의 첫걸음으로써 전사 데이터를 하나로 모아 분석할 수 있는 데이터 플랫폼이 필요했습니다. 기존에는 고객, 영업, 제조, 품질 등의 데이터들이 여러 시스템에 산재되어 있고 특정 시스템에 접속해 데이터를 조회하더라도 다른 시스템의 데이터를 같이 볼 수 없어 통합적인 데이터 활용이 어려웠기 때문입니다. 또한 데이터를 조회하기 위해서는 IT 인력의 지원이 반드시 필요했기 때문에 데이터를 제때 빠르게 볼 수 있는 적시성에 한계도 있었습니다. “베스핀글로벌은 스노우플레이크 전문가 인증 자격 ‘스노우프로 코어’ 취득 인력 33명, ‘데이터 챔피언’ 3명을 보유하고 있는 등 데이터 전문성과 기술력을 객관적으로 인정받은 국내 대표 스노우플레이크 파트너사입니다. 이 외에도 AWS Data Specialty, GCP Data Specialist, ML Certificates 등 데이터 및 AI 관련 인증과 전문 인력을 다수 보유하고 있으며 데이터, 더 나아가 AI 비즈니스를 실현하는 데 필요한 모든 영역을 체계적이고 빠르게 지원합니다.” – 베스핀글로벌 데이터 엔지니어 장익철 이사 베스핀글로벌의 Data + AI 역량 Snowflake SnowPro Core 30+ AWS Data Specialty 150+ (SageMaker 30+) GCP Data Specialist 100+ (Vertex AI 10+) NCP Pro 30+ Azure Specialty 50+ ML Certificates 100+ Generative AI (LLM) 30+ Prompt Engineer 30+ DAP, SQLD 30+ 베스핀글로벌은 다수의 데이터 프로젝트를 수행한 경험을 바탕으로 최적의 아키텍처와 인프라 환경을 구축했으며, 이후에도 안정화를 위한 모니터링 및 기술 지원을 적극 제공했습니다. 아직 Self Service BI가 구축되지 않은 상태에서 데이터 전문 지식이 없는 사용자의 경우 데이터를 조회하기 어려웠는데, 베스핀글로벌이 현업 실무자를 대상으로 정기적인 교육을 실시해 준 덕분에 데이터 플랫폼의 활용도를 더욱 높일 수 있었습니다. 이 외에도 클라우드를 처음 사용하다보니 발생하는 부가적인 문의사항들에 대해서도 빠르게 지원했으며, 새롭게 업데이트되는 기능에 대해서도 신속하게 대응해주어 예상했던 것 이상의 결과물이 도출되었습니다.앞으로도 베스핀글로벌과의 협업을 통해 데이터 플랫폼을 전사적으로 확대하고 활용도를 더욱 높여나가기를 기대합니다. HelpNow DataOps 기업의 정형/비정형 데이터를 핵심 자산화할 수 있도록 데이터 통합⋅전환, 데이터 흐름⋅처리 프로세스를 자동화해 데이터 활용을 극대화하는 전략적 데이터 관리 프로세스이자 방법론입니다. 산업 분야를 막론한 국내 최대 수준 데이터 프로젝트 경험과 전문 역량을 기반으로 표준화된 구축 방법론을 제시합니다. 데이터 마이그레이션 데이터 레이크 구축 빅데이터 시스템 구축 및 운영(DataOps) 데이터 ETL 구축 데이터 분석 및 시각화(BI Tools) 전문 지식 공유 헬프나우 데이터옵스 문의하기 2023년 11월 22일
모밋 by Miyeon. Jo 2023년 11월 16일 모밋 산업 분야IT 국가대한민국 상품 및 서비스OpsNow Company Overview (주)스타팅파트너스(구 ‘모밋’)는 ‘기술로 사람을 연결하고 성장을 가치 있게 한다’는 슬로건 아래 청년 구직자와 기업을 연결하는 직무경험 기반 신입 채용 플랫폼을 만들어가고 있는 소셜벤처기업입니다. 스타팅파트너스는 ‘스펙이 아닌 직무 경험을 기반으로 청년들의 사회 진출을 돕고, 지속 가능하며 모방 불가능한 경쟁력으로 HR 시장의 등대가 되자!’ 라는 비전을 가지고 450만 비경제활동 청년의 취업 진입 장벽과 730만 중소기업의 신입 채용 리스트를 IT 기술로 해결하고자 하는 목표를 가진 기업입니다.스타팅파트너스는 ‘스타팅’이라는 서비스를 통해 인사 담당자들이 궁금한 내용을 담아 이력서를 작성할 수 있도록 지원합니다. 이를 통해 취업 준비생과 기업을 직무경험 빅데이터로 연결하고 있으며, 동서대학교 SW 중심사업단 연구팀과는 AI 분야에서 공동 연구개발을 진행하고 있습니다. 또한, 여러 기업들과의 제휴 협약을 통해 채용 서비스의 경쟁력을 높이는 데 주력하고 있습니다. Challenge 스타팅파트너스는 대다수의 신생 스타트업과 마찬가지로 적은 인원으로 다양한 기업 활동 업무를 수행해야 하는 어려움을 겪었습니다. 이 중에서도 가장 시급한 문제는 체계적인 관리 시스템의 구축이었습니다. 스타팅파트너스 서비스의 운영 비용 중에는 서버(클라우드 인프라) 관련 비용이 상당 부분을 차지하고 있었지만, 개발팀은 당장 클라우드 인프라 관리 업무보다는 본업인 제품 개발에 더욱 집중해야 했습니다. 이를 해결하기 위한 논의를 거듭한 끝에 클라우드 관리 업무 수행을 도와줄 수 있는 클라우드 관리 플랫폼 도입을 검토하게 되었습니다. Solution ““무엇보다도 클라우드 비용 절감이라는 측면에서 만족할 만한 성과가 있었고, 또한 클라우드 관리에 필요한 단순 반복적인 업무를 줄여 제품 기획과 제품 개발이라는 핵심 업무에 인력과 시간을 집중할 수 있어 매우 만족합니다. 적은 인원으로 제품 개발과 클라우드 인프라 관리까지 해야 하는 팀, 조직에 OpsNow를 추천합니다.” – (주)스타팅파트너스, 김홍찬 대표 베스핀글로벌을 통해 클라우드 관리 플랫폼 OpsNow(옵스나우)를 도입했습니다. OpsNow의 대시보드에서 클라우드 자원과 비용에 대한 변동 사항을 쉽게 확인할 수 있었고, 이상 비용 탐지, 청구서 조회, 리포트 구독, 클라우드 예산 관리, 비용 분석 등의 기능을 이용하여 클라우드 유지 관리 업무에 소요되는 시간을 상당히 절약할 수 있었습니다. 또한, OpsNow에서 지원하는 비용 최적화 기능에서 제공하는 다양한 절감 추천 사항을 적용함으로써 클라우드 비용까지 절감할 수 있어 일석이조의 효과를 누릴 수 있었습니다. Results 무엇보다도 클라우드 비용 절감이라는 측면에서 만족할 만한 성과를 얻을 수 있었고, OpsNow 툴을 사용하여 클라우드 관리를 효율적으로 수행함으로써 반복적인 업무를 상당 부분 줄일 수 있었습니다. 이로 인해 회사는 필요한 곳에 더 많은 인력과 자원을 투입하여 생산성을 향상시킬 수 있었습니다. 적은 인원이 효율적으로 업무에 집중하기 위해서는 툴의 활용이 필수적이라고 생각합니다. 스타팅파트너스는 단순 반복적인 업무의 피로를 줄이기 위해 툴을 적극 도입해 사용하고 있습니다. 이로 인해 업무 효율성이 크게 향상되어 팀원들이 매우 만족하고 있으며, 더욱 중요한 제품 개발에 많은 시간을 투입할 수 있어 회사 입장에서도 만족도가 상당히 높습니다. Market Overview 최근 채용 플랫폼들이 빅데이터, AI 등 IT 기술 기반의 HR 테크 기업으로 변모하고 있습니다. 전 세계 HR 테크 시장 규모는 2021년 325억 8천만 달러에서 매년 10%씩 성장해 2031년까지 765억 달러에 이를 전망입니다. 더불어 채용 플랫폼들이 제공하는 서비스도 더욱 다양해지고 있는데요. 단순 구인구직 정보를 넘어 구직자 맞춤형 서비스, 하이엔드 인재 전용 서비스, 기업 큐레이션 서비스 등 특화된 기능을 선보이는 것입니다. 이러한 채용 서비스의 버티컬화는 구인구직 매칭률을 높이고 플랫폼의 경쟁력을 강화하기 위한 전략이라는 분석입니다. 스타팅파트너스는 신입 청년 구직자에 특화된 채용 플랫폼 ‘스타팅’을 제공하는 IT 스타트업입니다. 구직자는 스타팅파트너스의 플랫폼 내에서 직무 경험 프로젝트를 수행하고, 직무 경험 중심의 이력서를 작성할 수 있다는 점이 특징입니다. 더 확장성 있고 안정적인 버티컬 채용 플랫폼 서비스를 제공하기 위해 스타팅파트너스는 클라우드 인프라를 도입해 활용 중입니다. 하지만 서비스 운영 비용 중 클라우드 인프라 비용이 상당 부분을 차지하게 되면서 본격적인 클라우드 관리가 필요했는데요. 이를 위해 스타팅파트너스는 클라우드 파트너 베스핀글로벌이 추천하는 클라우드 관리 플랫폼 ‘OpsNow’를 도입했습니다. 그 결과 클라우드 비용은 물론 클라우드 유지 관리에 소요되는 시간도 절약해 제품 기획 및 개발이라는 핵심 업무에 집중할 수 있게 되었습니다. 앞으로도 더 효율적인 클라우드 관리의 도움으로 성장을 지속하며 신입 청년 구직자들의 취업 진입장벽 문제를 선도적으로 해결해 나갈 스타팅파트너스의 행보를 기대합니다. 문의하기 옵스나우 보러가기 2023년 11월 16일
Vertex AI Pipelines 활용하여 파이프라인 자동화 구글 인사이트 by Miyeon. Jo 2023년 11월 08일 구글 PS2팀 강희정목차Vertex AI Pipelines 소개Vertex AI Pipelines 작성Artifact Registry에 Vertex AI Pipelines 업로드Vertex AI Pipelines Schedules 이용한 실행 자동화1. Vertex AI Pipelines 소개Vertex AI Pipelines는 머신러닝 워크플로를 조정하여 머신러닝 시스템을 자동화하고, 모니터링 및 관리할 수 있습니다. Vertex AI Pipelines를 사용하면 머신러닝 시스템에 DevOps를 결합한 MLOps 를 구축할 수 있습니다. 서버리스 방식으로 제공되어 인프라나 클러스터 유지 보수에대한 관리 요소 없이 파이프라인 구축에 집중할 수 있습니다.2. Vertex AI Pipelines 작성Vertex Pipelines는 TFX( TensorFlow Extended ) 및 KFP( Kubeflow Pipelines ) 두 가지 오픈소스 Python SDK를 지원합니다. 이번 예제에서는 KFP SDK를 사용하며 Vertex AI 서비스에 대한 액세스를 지원하는 Google Cloud pipeline component 사용을 포함합니다.2-1. 필요한 라이브러리를 불러오고 기본 파라미터를 정의합니다.from typing import NamedTuple import kfp from google.cloud import aiplatform from kfp import compiler, dsl from kfp.dsl import (Artifact, ClassificationMetrics, Input, Metrics, Output, component) from google_cloud_pipeline_components.v1.automl.training_job import \ AutoMLTabularTrainingJobRunOp from google_cloud_pipeline_components.v1.dataset.create_tabular_dataset.component import \ tabular_dataset_create as TabularDatasetCreateOp from google_cloud_pipeline_components.v1.endpoint.create_endpoint.component import \ endpoint_create as EndpointCreateOp from google_cloud_pipeline_components.v1.endpoint.deploy_model.component import \ model_deploy as ModelDeployOp PROJECT_ID = "YOUR-PROJECT-ID" REGION = "us-central1" BUCKET_URI = f"gs://{PROJECT_ID}-unique" # set path for storing the pipeline artifacts PIPELINE_NAME = "automl-tabular-beans-training" PIPELINE_ROOT = f"{BUCKET_URI}/pipeline_root/beans" 2-2. 파이프라인에서 실행할 모델 평가 구성요소를 작성합니다.@component( base_image="gcr.io/deeplearning-platform-release/tf2-cpu.2-6:latest", packages_to_install=["google-cloud-aiplatform"], ) def classification_model_eval_metrics( project: str, location: str, thresholds_dict_str: str, model: Input[Artifact], metrics: Output[Metrics], metricsc: Output[ClassificationMetrics], ) -> NamedTuple("Outputs", [("dep_decision", str)]): # Return parameter. import json import logging from google.cloud import aiplatform aiplatform.init(project=project) # Fetch model eval info def get_eval_info(model): response = model.list_model_evaluations() metrics_list = [] metrics_string_list = [] for evaluation in response: evaluation = evaluation.to_dict() print("model_evaluation") print(" name:", evaluation["name"]) print(" metrics_schema_uri:", evaluation["metricsSchemaUri"]) metrics = evaluation["metrics"] for metric in metrics.keys(): logging.info("metric: %s, value: %s", metric, metrics[metric]) metrics_str = json.dumps(metrics) metrics_list.append(metrics) metrics_string_list.append(metrics_str) return ( evaluation["name"], metrics_list, metrics_string_list, ) # Use the given metrics threshold(s) to determine whether the model is # accurate enough to deploy. def classification_thresholds_check(metrics_dict, thresholds_dict): for k, v in thresholds_dict.items(): logging.info("k {}, v {}".format(k, v)) if k in ["auRoc", "auPrc"]: # higher is better if metrics_dict[k] < v: # if under threshold, don't deploy logging.info("{} < {}; returning False".format(metrics_dict[k], v)) return False logging.info("threshold checks passed.") return True def log_metrics(metrics_list, metricsc): test_confusion_matrix = metrics_list[0]["confusionMatrix"] logging.info("rows: %s", test_confusion_matrix["rows"]) # log the ROC curve fpr = [] tpr = [] thresholds = [] for item in metrics_list[0]["confidenceMetrics"]: fpr.append(item.get("falsePositiveRate", 0.0)) tpr.append(item.get("recall", 0.0)) thresholds.append(item.get("confidenceThreshold", 0.0)) print(f"fpr: {fpr}") print(f"tpr: {tpr}") print(f"thresholds: {thresholds}") metricsc.log_roc_curve(fpr, tpr, thresholds) # log the confusion matrix annotations = [] for item in test_confusion_matrix["annotationSpecs"]: annotations.append(item["displayName"]) logging.info("confusion matrix annotations: %s", annotations) metricsc.log_confusion_matrix( annotations, test_confusion_matrix["rows"], ) # log textual metrics info as well for metric in metrics_list[0].keys(): if metric != "confidenceMetrics": val_string = json.dumps(metrics_list[0][metric]) metrics.log_metric(metric, val_string) logging.getLogger().setLevel(logging.INFO) # extract the model resource name from the input Model Artifact model_resource_path = model.metadata["resourceName"] logging.info("model path: %s", model_resource_path) # Get the trained model resource model = aiplatform.Model(model_resource_path) # Get model evaluation metrics from the the trained model eval_name, metrics_list, metrics_str_list = get_eval_info(model) logging.info("got evaluation name: %s", eval_name) logging.info("got metrics list: %s", metrics_list) log_metrics(metrics_list, metricsc) thresholds_dict = json.loads(thresholds_dict_str) deploy = classification_thresholds_check(metrics_list[0], thresholds_dict) if deploy: dep_decision = "true" else: dep_decision = "false" logging.info("deployment decision is %s", dep_decision) return (dep_decision,)2-3. 다음과 같은 Google Cloud Pipeline Component가 포함된 파이프라인을 정의합니다.TabularDatasetCreateOp : BigQuery를 데이터소스로 한 tabular 형식의 데이터세트 정의AutoMLTabularTrainingJobRunOp : tabular 형식의 AutoML 학습 후, Vertex AI Model Registry에 등록ModelDeployOp : Model Registry에 등록된 학습 모델을 Online Prediction(endpoint)에 배포@kfp.dsl.pipeline(name="automl-tab-beans-training-v2", pipeline_root=PIPELINE_ROOT) def pipeline( bq_source: str = "bq://aju-dev-demos.beans.beans1", display_name: str = DISPLAY_NAME, project: str = PROJECT_ID, gcp_region: str = "us-central1", api_endpoint: str = "us-central1-aiplatform.googleapis.com", thresholds_dict_str: str = '{"auRoc": 0.95}', ): dataset_create_op = TabularDatasetCreateOp( project=project, display_name=display_name, bq_source=bq_source ) training_op =AutoMLTabularTrainingJobRunOp( project=project, display_name=display_name, optimization_prediction_type="classification", optimization_objective="minimize-log-loss", budget_milli_node_hours=1000, column_transformations=[ {"numeric": {"column_name": "Area"}}, {"numeric": {"column_name": "Perimeter"}}, {"numeric": {"column_name": "MajorAxisLength"}}, ... other columns ... {"categorical": {"column_name": "Class"}}, ], dataset=dataset_create_op.outputs["dataset"], target_column="Class", ) model_eval_task = classif_model_eval_metrics( project, gcp_region, api_endpoint, thresholds_dict_str, training_op.outputs["model"], ) with dsl.Condition( model_eval_task.outputs["dep_decision"] == "true", name="deploy_decision", ): deploy_op =ModelDeployOp( # noqa: F841 model=training_op.outputs["model"], project=project, machine_type="n1-standard-4", )2-4. Google Cloud 파이프라인 작업을 실행합니다.aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI) from google.cloud import bigquery bq_source = "aju-dev-demos.beans.beans1" client = bigquery.Client() bq_region = client.get_table(bq_source).location.lower() try: assert bq_region in REGION print(f"Region validated: {REGION}") except AssertionError: print( "Please make sure the region of BigQuery (source) and that of the pipeline are the same." ) # Configure the pipeline job = aiplatform.PipelineJob( display_name=PIPELINE_DISPLAY_NAME, template_path="tabular_classification_pipeline.yaml", pipeline_root=PIPELINE_ROOT, parameter_values={ "project": PROJECT_ID, "gcp_region": REGION, "bq_source": f"bq://{bq_source}", "thresholds_dict_str": '{"auRoc": 0.95}', "DATASET_DISPLAY_NAME": DATASET_DISPLAY_NAME, "TRAINING_DISPLAY_NAME": TRAINING_DISPLAY_NAME, "MODEL_DISPLAY_NAME": MODEL_DISPLAY_NAME, "ENDPOINT_DISPLAY_NAME": ENDPOINT_DISPLAY_NAME, "MACHINE_TYPE": MACHINE_TYPE, }, enable_caching=False, ) # Run the job job.submit()2-5. Vertex AI Pipelines 에서 파이프라인 작업을 확인합니다.3. Artifact Registry에 위에서 생성한 파이프라인 YAML 파일을 업로드합니다.Artifact Registry를 이용하여 파이프라인 파일을 관리하면 재사용과 추적이 용이합니다.※ Artifact Registry에 `demo-kfp-repo` 이름의 KFP 저장소가 생성되어 있어야 합니다.from kfp.registry import RegistryClient client = RegistryClient(host=f"https://us-central1-kfp.pkg.dev/{PROJECT_ID}/demo-kfp-repo") templateName, versionName = client.upload_pipeline( file_name="tabular_classification_pipeline.yaml", tags=["latest"],) [Artifact Registry 저장소에 업로드 된 파일 확인]4. Vertex AI Pipelines Schedules 이용한 실행 자동화Vertex AI Pipelines에서는 파이프라인 YAML 파일을 이용하여 스케줄을 등록할 수 있는 기능을 제공하고 있습니다. 학습 일정이 일정한 스케줄에 의해 이루어지는 경우, 간단히 등록하여 자동 학습을 실행할 수 있습니다. Google Cloud console에서 3번 단계에서 Artifact Registry에 업로드한 파이프라인을 자동 실행하도록 스케줄링을 만들어 보겠습니다.다음 순서에 따라 파이프라인 일정을 만듭니다.4-1. Google Cloud 콘솔의 Vertex AI 섹션에서 파이프라인 페이지의 일정 탭으로 이동합니다.4-2. 예약된 실행 만들기를 클릭하여 파이프라인 실행 만들기 창을 엽니다.4-3. 3번에서 업로드한 Artifact Registry에서 파이프라인을 가져오기 위해 기존 파이프라인에서 선택을 클릭합니다.파이프라인 YAML 파일이 포함된 저장소를 선택합니다.파이프라인 구성요소와 버전을 선택합니다.4-4. 파이프라인 실행을 식별하기 위한 실행 이름을 지정하고, 실행할 리전을 선택합니다.4-5. 다음과 같이 실행 일정을 지정합니다.반복을 선택합니다.시작 시간에서 일정이 활성화되는 시간을 지정합니다.즉시 : 일정을 만들고 즉시 첫 번째 실행이 수행되도록 예약활성화 날짜 : 특정 시간과 날짜에 첫 번째 실행 예약빈도 필드에서 unix-cron을 기반으로 하는 크론 일정 표현식을 사용하여 파이프라인 실행을 예약하고 실행할 빈도를 지정합니다.실행 예약 시간을 실행할 시간대를 선택합니다.실행 예약 시간을 실행할 시간대를 선택합니다.종료에서 일정이 종료되는 시간을 지정합니다.만료되지 않음 : 무기한 파이프라인 실행사용 : 특정 날짜와 시간에 일정 종료4-6. (선택사항) 커스텀 서비스 계정, 고객 관리 암호화 키(CMEK) 또는 피어링된 VPC 네트워크를 지정하는 경우 입력합니다.4-7. 계속을 클릭하고 파이프라인의 런타임 구성을 지정합니다.4-8. 제출을 클릭하여 파이프라인 실행을 만듭니다.4-9. 설정한 스케줄에 맞게 파이프라인이 실행되는지 확인합니다. 출처https://cloud.google.com/vertex-ai/docs/pipelines/introductionhttps://cloud.google.com/blog/topics/developers-practitioners/use-vertex-pipelines-build-automl-classification-end-end-workflowhttps://github.com/GoogleCloudPlatform/vertex-ai-samples/blob/main/notebooks/official/pipelines/automl_tabular_classification_beans.ipynbhttps://cloud.google.com/vertex-ai/docs/pipelines/create-pipeline-templatehttps://cloud.google.com/vertex-ai/docs/pipelines/schedule-pipeline-run 2023년 11월 08일
Datastream을 이용한 BigQuery로 실시간 데이터 복제 구글 인사이트 by Miyeon. Jo 2023년 11월 02일 구글 PS2팀 백소연목차CDC란?Datastream 소개소스와 대상 설정AWS RDS(MySQL) 셋팅연결 프로필 생성스트림 생성실행 및 데이터 확인마무리1. CDC란?CDC(Change Data Capture)는 변경된 데이터를 사용하여 동작을 위할 수 있도록 변경된 데이터를 확인하고 추적하는 데 사용되는 소프트웨어 설계 패턴 집합입니다. 또한 CDC는 기업 데이터 소스에 대한 변경사항의 식별, 캡처, 배포를 기반으로 하는 데이터 통합 접근 방식입니다.2. Datastream 소개Datastream은 Google Cloud Platform에서 제공하는 데이터 복제 서비스로, 관계형 데이터베이스 관리 시스템(RDBMS) 및 기타 소스의 소스 데이터를 BigQuery 및 Cloud Storage와 같은 대상으로 거의 실시간으로 가져올 수 있습니다.Datastream의 이점은 다음과 같습니다.실시간 데이터 분석: ELT 파이프라인을 설정하여 BigQuery에서 거의 실시간 통계를 얻을 수 있어, 데이터 지연 시간을 최소화하고 빠른 의사결정을 지원합니다.서버리스 및 자동 확장: Datastream는 서버리스 서비스로, 리소스 프로비저닝이나 관리가 필요하지 않으며, 자동으로 확장 및 축소하여 서비스 가용성을 유지합니다.간편한 설정 및 모니터링: 쉬운 설정 및 모니터링 환경을 통해 가치를 신속하게 실현할 수 있으며, 운영 및 유지 관리가 간소화됩니다.Google Cloud 데이터 서비스 통합: 다양한 Google Cloud 데이터 서비스와의 통합을 지원하여 데이터 이동과 변환을 용이하게합니다.3. 소스와 대상 설정Datastream을 이용해 AWS RDS의 MySQL 데이터를 BigQuery로 실시간 복제해 보도록 하겠습니다.4. AWS RDS(MySQL) 셋팅MySQL을 소스로 하여 CDC 구성을 위해서 바이너리 로깅을 활성화해야 합니다. DB 파라미터 값을 변경하고 Datastream이 접근 할 수 있는 계정을 생성합니다.1) MySQL를 사용한 AWS RDS 인스턴스를 생성합니다. 샘플 데이터베이스 및 테이블을 생성하고 샘플 데이터를 삽입합니다.2) 파라미터 그룹을 생성하고 해당 그룹에서 매개변수를 찾아 아래 표와 같이 수정합니다.매개변수값binlog_formatROWlog_bin_use_v1_row_eventsTTPlog_bin_use_v1_row_events1read_only0net_read_timeout3600net_write_timeout3600wait_timeout86400<표. 매개변수 수정 대상>3) RDS 인스턴스에서 수정을 선택하여 “추가구성 > DB 파라미터 그룹”에서 신규 생성 및 매개변수 변경을 해준 파라미터 그룹으로 변경 적용합니다.4) Datastream에서 MySQL 데이터에 접근 가능하도록 계정 생성 및 권한을 부여합니다.CREATE USER 'datastream'@'%' IDENTIFIED BY '비밀번호'; GRANT REPLICATION SLAVE, SELECT, REPLICATION CLIENT ON *.* TO 'datastream'@'%'; FLUSH PRIVILEGES;5. 연결 프로필 생성다음은 Google Cloud 콘솔에서 Datastream을 설정합니다. Datastream에서는 소스와 타겟에 대해서 연결 정보를 “연결 프로필” 서비스를 통해 관리합니다.1) Datastream에서 연결 프로필 서비스를 선택하고 Create Profile에서 소스인 MySQL을 선택합니다.2) 소스에 대한 연결 정보를 입력합니다.리전 : Datastream이 작업 될 위치로 소스와 타겟 위치에 상관 없이 지정 가능연결 세부 정보 : MySQL의 연결 정보로 사용자 계정은 이전 단계에서 생성한 “datastream” 계정을 입력3) 연결 방법을 정의 합니다. Public 혹은 Private하게 설정 가능하며 이번 데모에서는 Public하게 통신하는 방법에 대해서 안내합니다. 연결 방법은 “IP 허용 목록”을 선택합니다.연결 방법 : IP 허용 목록나열 된 IP 목록은 상황에 따라 소스 단 네트워크에서 방화벽 오픈이 필요4) 타겟정보를 생성합니다. 이전과 동일하게 Create Profile을 선택하고 타겟인 BigQuery를 선택하고 연결 정보를 입력합니다.리전 : 소스 연결 프로필에서 선택한 리전과 동일한 리전을 선택6. 스트림 생성이제 CDC 작업을 수행할 스트림을 생성합니다. 사전에 생성 한 연결 프로필을 활용하고 어떻게 작업 할 것인지 구체적으로 정의 합니다.1) 스트림의 기본 정보를 입력합니다.리전 : 연결 프로필과 동일한 리전을 선택소스 유형 : MySQL대상 위치 유형 : BigQuery2) 소스 연결 프로필을 선택하고 소스 데이터를 어떻게 옮기지 선택합니다.All tables from all schemas : 소스에서 읽어지는 모든 데이터베이스, 테이블 가져오기Specific schemas and tables : 데이터베이스, 테이블 사용자 선택Custom : 필터링 규칙 적용으로 데이터베이스, 테이블 가져오기3) “Specific schemas and tables”을 선택하면 소스 데이터베이스 정보를 그대로 읽어오고 원하는 Table을 선택합니다.4) 스트림 실행 시 초기 적재 데이터의 처리 방법에 대해서 선택합니다.Automatic : 스트림 실행 시 자동으로 초기 적재가 실행되고 그 이후 변경분 데이터 적재Manual : 초기 적재 필요 시 사용자가 선택적으로 실행5) 타겟 연결에 대해서 상세 정의 합니다. 타겟 프로필을 먼저 선택합니다.6) 타겟에 데이터를 어떻게 데이터를 적재할지 선택합니다. 소스와 타겟이 데이터베이스 및 테이블 1:1 매핑하여 적재 할 수도 있고 소스의 모든 데이터가 타겟의 하나의 데이터베이스에 일괄로 적재 할 수도 있습니다. 이번에는 “각 스키마를 위한 데이터 세트” 옵션을 선택하여 소스와 타겟이 1:1로 매핑되어 적재되도록 합니다.“각 스키마를 위한 데이터 세트” 선택위치 유형 : 대상인 BigQuery 데이터세트가 위치할 리전 선택데이터 세트 프리픽스 : 소스 데이터베이스와 동일한 형상으로 데이터세트 및 테이블이 생성 될 건데 PREFIX가 필요하다면 작성예) PREFIX가 “raw”이고 소스 데이터베이스가 “demodb”이면 타겟 데이터베이스는 “raw_demodb”로 생성7) Datastream을 통해 수집되는 변경 분 데이터를 BigQuery에 어떤 주기로 반영 할 것인지 선택합니다. 그리고 스트림 만들기를 선택하여 생성 작업을 완료합니다.max_staleness 지정 : BigQuery에 반영 시 upsert 작업이 수행되며 BigQuery 분석 비용이 발생. 수행 빈도가 짧을 수록 비용이 증가 될 수 있음.7. 실행 및 데이터 확인스트림 작업 생성이 완료 되었다면 실행하여 데이터가 정상적으로 복제 되는지 확인합니다.1) 스트림 작업을 시작합니다.2) 특정 테이블에 대해서 초기적재를 수행해 봅니다. 객체 탭을 선택하면 이관 대상 테이블이 보여지고 “백필 시작”을 선택하여 초기적재를 수행합니다.3) BigQuery에 데이터가 정상적으로 적재가 되었는지 확인합니다.BigQuery > SQL 작업 공간 > Script 창 열기4) 소스 데이터베이스에서 데이터를 변경하였을 때 BigQuery에 변경 내용이 반영 되는지 확인합니다.8. 마무리Datastream을 통해 MySQL에서 BigQuery 데이터를 실시간 복제하는 방법에 대해 알아보았습니다. Datastream을 사용하면 관계형 데이터베이스(RDBMS)에서 BigQuery로의 데이터 복제 작업을 간단하고 빠르게 수행할 수 있으며 데이터의 실시간성을 향상시켜 비즈니스에 가치를 제공할 수 있습니다. 출처https://cloud.google.com/datastream/docs/quickstart-replication-to-bigquery?hl=kohttps://cloud.google.com/datastream/docs/configure-your-source-mysql-database?hl=ko#rdsformysqlhttps://cloud.google.com/datastream/docs/destination-bigquery?hl=kohttps://cloud.google.com/bigquery/docs/change-data-capture?hl=ko#required_permissionshttps://cloud.google.com/datastream/docs/behavior-overview?hl=kohttps://cloud.google.com/datastream/docs/overview?hl=kohttps://medium.com/google-cloud/replicate-cloudsql-mysql-data-to-bigquery-in-realtime-using-datastream-ad07b41d2bb6 2023년 11월 02일
K2코리아 by Miyeon. Jo 2023년 10월 23일 K2코리아 산업 분야제조 및 유통 국가대한민국 상품 및 서비스AWSOracle CloudOpsNow Security Company Overview K2코리아는 아웃도어 브랜드 ‘K2’, ‘아이더’와 골프웨어 브랜드 ‘와이드앵글’, ‘피레티’, 스포츠 브랜드 ‘다이나핏’, 안전화 브랜드 ‘K2세이프티’, ‘아이더세이프티’ 등을 운영하는 대한민국 대표 종합 패션 기업입니다. 최근에는 감성 라이프스타일 아웃도어 브랜드 ‘노르디스크’를 런칭했습니다. 뛰어난 기술력을 바탕으로 매 시즌마다 새로운 스타일과 경쟁력을 갖춘 다양한 제품들을 출시하고 있습니다. 현재 전국 1,000여 개 매장과 더불어 통합 온라인 쇼핑몰 ‘K.VILLAGE’를 운영하고 있으며 매출액 1조 원을 넘어서는 등 지속적인 성장을 이어가고 있습니다. Challenge K2코리아는 비즈니스 초기에는 모든 인프라를 온프레미스로 운영하다가 2018년부터 본격적으로 클라우드를 도입하기 시작했습니다. 현재 온프레미스 서버와 클라우드를 함께 사용하는 하이브리드 클라우드와 여러 클라우드 플랫폼을 활용하는 멀티 클라우드 환경을 구축해 운영하고 있습니다. 데이터베이스(DB)는 온프레미스 서버를, DB를 제외한 Web/WAS 등의 운영 시스템은 클라우드를 활용 중이며 클라우드 플랫폼으로는 AWS와 오라클 클라우드(OCI)를 사용하고 있습니다. Solution [AWS] RFID 및 제품 사용성 평가 시스템 구축 및 MSP 서비스 K2코리아는 2018년부터 RFID(무선주파수인식기술)를 도입해 활용하고 있습니다. RFID는 제품마다 고유 코드가 기록된 전자칩을 부착해 해당 제품의 정보를 식별하는 기술입니다. 현재 K2코리아의 모든 브랜드 제품들은 RFID를 통해 이력을 관리하고 있습니다. 생산부터 입고, 출고, 판매, CS까지 제품의 모든 이력을 간편하게 보고 관리할 수 있기 때문에 재고 파악이나 물류 적재 등에 들어가는 비용에 대한 효율화가 가능합니다. 또한 K2코리아 신발연구소에서는 더 좋은 제품을 만들기 위해 주기적으로 필드에서의 사용성 평가를 실시하고 있습니다. 테스터로 선발된 사용자가 제품을 착용하고 실제 아웃도어 환경에서 기능성을 평가하고 분석하는 것입니다. 기존에는 테스트 결과를 종이 문서에 기록해 취합하다 보니 수많은 문서를 정리하고 관리하기에 어려움이 있었습니다. 따라서 기존의 수기로 진행되던 사용성 평가 설문조사를 온라인 플랫폼으로 전환했습니다. RFID와 제품 사용성 평가 시스템은 처음부터 AWS 클라우드 위에 구축되어 운영되고 있습니다. 클라우드를 활용한 덕분에 인프라를 직접 별도로 관리하지 않아도 안정적으로 운영할 수 있고, 상황에 따라 유연하게 확장할 수 있어 편리하고 만족스럽습니다. 이 외에도 통합 온라인 쇼핑몰을 AWS 기반으로 운영하는 등, 기존 온프레미스 서버 환경을 대부분 클라우드로 전환하여 사용하고 있습니다. 해당 인프라는 베스핀글로벌의 MSP 서비스를 통해 운영 및 관리되고 있습니다. 특히 사용자 유입이 급증하는 이벤트 발생 시에도 베스핀글로벌의 전담 인력이 인프라 실시간 모니터링과 즉각적인 대응을 지원합니다. 또한, 서드파티 솔루션 연동 최적화와 최신 보안 패치를 통해 인프라 보안 수준까지 한층 강화할 수 있었습니다. Benefit “베스핀글로벌과는 2018년 RFID 시스템 구축 사업부터 함께하고 있습니다. 베스핀글로벌은 클라우드 파트너로서 멀티 클라우드 활용을 통해 안정적으로 서비스를 제공하고 운영할 수 있도록 많은 도움을 주었습니다.” – K2코리아 전산실 문기석 이사 Benefit 1) 비즈니스 연속성 50% 향상 클라우드를 활용하면서 무중단 시스템 구축이 가능해졌고 인프라 측면에서 비즈니스 연속성이 50% 이상 향상되었습니다. RFID나 제품 사용성 평가 시스템 등을 운영하면서 온프레미스 환경에서는 종종 발생하던 인프라 단의 이슈들이 클라우드 도입 후에는 지금까지 단 한 번도 발생한 적이 없습니다. 2) 클라우드 보안 환경 구축 온프레미스에서는 방화벽이나 서버 접근 경로 등에 대한 내용을 잘 알기 때문에 보안 정책을 바로 세울 수 있었습니다. 하지만 클라우드는 구성이 복잡하기 때문에 어느 부분에 문제가 있는지조차 알기 어려웠습니다. 그래서 본격적으로 클라우드에 맞는 보안 환경을 구축해야겠다고 생각했습니다. 베스핀글로벌의 추천으로 클라우드 보안 형상 관리(CSPM) 솔루션 ‘옵스나우 시큐리티(OpsNow Security)’를 도입했습니다.옵스나우 시큐리티를 실제로 사용해보니 생각하지 못했던 보안 구성과 다양한 조치 방법들을 제안해주어 유용했습니다. 특히 보안 점수로 보안 현황을 파악할 수 있기 때문에 빠르게 문제를 인지하고 조치할 수 있다는 점이 가장 큰 장점입니다. 지금은 옵스나우 시큐리티에서 매일 클라우드 보안 현황을 확인하고 클라우드 보안을 더욱 체계적으로 관리하고 있습니다. 3) 클라우드 파트너 베스핀글로벌 베스핀글로벌은 AWS, OCI 등 클라우드를 도입하고 운영하는 전 과정에서 든든한 파트너가 되어주었습니다. 초기 도입 단계에서의 클라우드 플랫폼 선택과 스펙 비교부터 아키텍처 설계, 실제 구성, 서버 이중화까지 모든 과정을 함께 고민하며 체계적으로 지원해 주었습니다.운영 단계에서도 모니터링과 기술 지원이 안정적으로 이어졌고, 서비스나 프로젝트 진행 중 이슈가 발생했을 때도 신속하게 대응해 주어 큰 도움이 되었습니다. 온라인 지원은 시간이 오래 걸릴 것이라는 우려와 달리, 대부분 30분 이내에 담당자가 지정되고 최종 처리까지도 2시간 이내에 완료되어 매우 만족스러웠습니다. 논의가 필요한 사항이나 긴급 이슈가 발생했을 때도 즉각적인 커뮤니케이션이 가능해 신뢰가 쌓였습니다.또한 인프라 가용성과 보안 강화를 위해 MSP 전문 운영 서비스를 도입하면서 운영 안정성이 크게 향상되었습니다. 이벤트 기간에도 중단 없는 서버 운영이 가능했으며, 선제적인 보안 조치를 통해 인프라 안정성을 확보할 수 있었습니다. 특히 계정 권한 분리 전략을 적용해 보안 사고를 예방하는 동시에 운영 복잡도를 낮추고 비용 효율성까지 개선할 수 있었습니다. Market Overview 패션 업계의 디지털 전환이 가속화되고 있습니다. 특히 상품 재고 관리 영역에서 디지털 역량을 적극 활용해 효율성과 생산성을 높이는 추세입니다. 패션 트렌드 변화 속도가 매우 빠르고 이에 따라 의류의 가치 역시 빠르게 감소된다는 점에서 재고관리는 수익성을 좌우하는 중요한 요소이기 때문입니다. K2코리아는 업계에서 선도적으로 RFID 시스템을 구축함으로써 재고 관리 영역을 혁신했습니다. 단순히 재고 관리에 그치지 않고 생산부터 CS까지 제품의 모든 이력을 간편하게 관리하는 것이 특징입니다. 이를 통해 K2코리아는 재고 파악과 물류 적재에 들어가는 비용을 절감하고 더 효율화했습니다. 이 외에도 기존에 수기로 진행하던 제품 사용성 평가 과정을 온라인 플랫폼으로 구축하고 전사 ERP 시스템을 고도화하는 등 디지털 전환에 앞장서고 있습니다. 이러한 디지털 혁신 기반에는 클라우드가 있습니다. K2코리아는 AWS와 오라클 클라우드를 모두 사용하는 멀티 클라우드 환경을 운영 중입니다. K2코리아 문기석 이사는 “클라우드 도입을 통해 무중단 시스템 구축이 가능해졌고, 비즈니스 연속성이 50% 증가했다”고 말했습니다. 그리고 이 과정에서 베스핀글로벌과의 파트너십을 통해 클라우드 환경을 더욱 안정적으로 운영하고 있습니다. 또한 CSPM 솔루션 옵스나우 시큐리티를 통해 클라우드 보안까지 체계적으로 관리 중입니다. 앞으로도 클라우드 위에서 더 빠르게 성장하고 도약해 나갈 K2코리아의 행보를 기대합니다. 문의하기 2023년 10월 23일
컴투스 by Miyeon. Jo 2023년 10월 10일 컴투스 산업 분야게임 국가대한민국 상품 및 서비스구글 클라우드 Company Overview 컴투스 그룹은 미래 콘텐츠 산업의 패러다임에 발맞춰 글로벌 최고 수준의 게임들을 성공적으로 서비스하고 있습니다. 전 세계 160개 이상 국가의 유저들이 ‘서머너즈 워’, ‘미니게임천국’, ‘MLB 퍼펙트 이닝’ 등 히트 IP 기반의 다양한 작품들을 즐기고 있습니다. 올인원 게임 플랫폼 ‘Hive’와 클라우드 컴퓨팅 서비스 ‘GCloud’는 세계 어디에서나 빠르고 쾌적한 게임 및 메타버스 경험을 제공하는 기반이 되고 있습니다. Challenge 컴투스의 인프라 환경은 IDC와 자체 클라우드 컴퓨팅 서비스인 ‘GCloud’를 결합한 하이브리드 클라우드 형태로 운영되었습니다. IDC 환경은 하드웨어 구매로 인한 초기 투자 비용에 대한 부담, 하드웨어 장애 유지 보수, 언제 증가할지 모르는 사용자와 트래픽으로 인한 서버 증설 등 여러 가지를 고려해야 합니다. 이를 보완하기 위해 기존에는 자체적으로 운영하는 클라우드 컴퓨팅과 결합한 하이브리드 형태로 서비스를 운영하고 있었습니다. 매년 진행하는 글로벌 이스포츠 대회 ‘서머너즈 워 월드 아레나 챔피언십(SWC)’으로 게임 유저가 지속적으로 증가했습니다. 이에 따라 방대한 유저 데이터를 실시간으로 수집하고 분석할 수 있는, 더 빠르고 안정적인 인프라가 필요하게 되었습니다. 그래서 새로운 인프라를 구성하기 위해 퍼블릭 클라우드 컴퓨팅 도입을 검토하기 시작했습니다. Solution “하이브리드 클라우드 환경에서 서비스를 운영하고 있었지만 인프라 운영 담당자로서 더 안정적인 인프라에 대해 지속적으로 고민하게 되었습니다. 특히 급증하는 수많은 유저 데이터를 실시간으로 수집하고 분석할 수 있는 인프라가 필요했고, 다양한 퍼블릭 클라우드를 검토한 결과 Google Cloud로의 이전을 결정했습니다.” – 컴투스플랫폼 인프라기술실 인프라기술C팀 팀장 임상민 님 퍼블릭 클라우드를 검토하는 과정에서 3가지 기준을 가장 중요하게 살펴보았습니다. ‘(1) Perfomance & Availability: 글로벌 전 지역을 대상으로 안정적인 서비스를 운영할 수 있는 성능과 가용성을 가지고 있는가? (2) Easy to Set-up: 인프라를 웹 콘솔에서 셀프 서비스로 손쉽게 구성할 수 있는가? (3) Global Latency: 자체적인 네트워크 인프라를 통해 지연이 없고 글로벌 서비스를 제공하는 데 적합한가?’입니다. 여러 가지 클라우드 플랫폼을 비교한 결과, 이 3가지 조건을 모두 충족하는 Google Cloud를 선택해 인프라를 이전하기로 결정했습니다. 이후 ‘서머너즈 워’의 기존 인프라 구조에서 크게 벗어나지 않고 Google Cloud에서도 안정적인 운영이 가능한 글로벌 리전과 적합한 Google Cloud 서비스를 찾아 성능 검증을 진행했습니다. DB 서버의 성능과 보안을 최우선으로 고려해 인프라를 구성하기 시작했고 단 2주만에 클라우드 서비스 선정부터 실제 구성, 기존 데이터 이전까지 모든 마이그레이션 작업을 완료했습니다. 지금은 모든 ‘서머너즈 워’ 시리즈를 Google Cloud 위에서 안정적으로 운영하고 있습니다.이 과정에서 VM(가상 머신)에 사용되는 외부 IP(인터넷 프로토콜) 주소를 최소화하고 불필요한 외부 연결 정책을 줄이기 위한 방안으로 Google Cloud의 Cloud NAT(Network Address Translation, 네트워크 주소 변환) 서비스를 선택했습니다. Cloud NAT을 통해 VM에 사용되는 NAT IP 주소를 자동으로 확장할 수 있고, 각 VM에 적용 가능한 네트워크 대역폭을 그대로 사용할 수 있어 보안, 확장성, 성능은 물론 비용 절감 측면에서도 모두 만족스럽습니다. Benefit “베스핀글로벌은 Google Cloud 전문 기술과 역량을 바탕으로 어떠한 이슈가 발생했을 때 구체적이고 확실한 가이드를 제공합니다. 직접 확인했다면 몇 시간씩 걸렸을 일도 베스핀글로벌의 가이드를 통해 1시간 안에 완료할 수 있습니다. Google Cloud 도입을 고민하고 있다면 베스핀글로벌을 추천합니다.” – 컴투스플랫폼 인프라기술실 인프라기술C팀 팀장 임상민 님 Benefit 1) 안정적인 인프라 운영 Google Cloud를 도입하고 인프라 운영에 많은 변화가 있었습니다. 하루에도 200번 이상 수차례 VM 마이그레이션이 진행되는데, Google Cloud는 게임이 중단되는 등의 영향이 전혀 없고 서버를 종료하지 않아도 되기 때문에 안심하고 서비스를 운영하고 있습니다. 최근에는 타 게임과의 콜라보 이벤트를 진행하면서 유저 유입이 평소보다 빠르게 증가하는 일이 있었습니다. 이러한 상황에서도 Google Cloud를 통해 필요한 자원을 실시간으로 유연하게 할당할 수 있게 되어 네트워크 트래픽이 급증하더라도 서비스를 안정적으로 제공 중입니다. 2) 업무 시간 50% 단축 유저들에게 보다 쾌적한 서비스 환경을 제공하기 위해 Google Cloud에 대해 전문적인 기술과 역량을 갖춘 클라우드 파트너 베스핀글로벌과 함께하고 있습니다. 베스핀글로벌의 가장 큰 장점은 확실한 기술 지원과 빠른 문의 대응입니다. 예를 들어, 게임 서버와 DB 간에 연결 이슈가 발생한다면 베스핀글로벌에서는 신속하게 확인해 ‘어디가 차단되어 있고, 여기에 문제가 있으니 이렇게 조치하라’는 구체적이고 확실한 가이드를 제공합니다. 내부에서 직접 확인했다면 몇 시간씩 걸렸을 일도 베스핀글로벌의 가이드를 통해 1시간 안에 완료할 수 있기 때문에 업무 시간이 50% 이상 단축되었습니다. 컴투스 그룹은 앞으로도 베스핀글로벌과의 파트너십을 통해 지속적으로 협력하고, Google Cloud를 기반으로 서비스를 더욱 고도화해 나갈 예정입니다. Market Overview 최근 게임 업계의 주요 트렌드로 지적재산권(IP)이 주목받고 있습니다. 인기 게임의 오리지널 IP를 기반으로 후속 게임, 만화, 음악 등 다양한 매체로 확장해 나가는 것입니다. 기존의 충성 유저들에게 새로운 스토리와 세계관을 제공함으로써 친밀도를 높이고, 안정적인 비즈니스 효과를 얻을 수 있다는 점에서 전 세계 게임 기업들은 IP 확보와 육성에 집중하고 있습니다.(관련 기사)글로벌 게임 회사 컴투스 역시 국내외 인기 IP 기반의 다양한 게임들을 서비스하고 있습니다. 특히 ‘서머너즈 워’ 시리즈는 많은 팬덤이 있는 서구권을 넘어 전 세계 시장으로 서비스 지역을 확대하고 있는 등 강력한 글로벌 IP 경쟁력을 지닌 대표작 중 하나입니다. 컴투스는 유저들에게 보다 안정적인 서비스를 제공하기 위해 현재 모든 ‘서머너즈 워’ 시리즈를 Google Cloud 위에서 서비스하고 있습니다. 이 과정에서 베스핀글로벌을 통해 Google Cloud를 더 효율적으로 운영하고 있는데요. 인프라 운영을 담당하는 컴투스플랫폼 임상민 팀장은 “베스핀글로벌의 장점은 확실한 기술 지원과 빠른 문의 대응”이라고 설명하며 “이슈 발생 시 베스핀글로벌의 구체적인 가이드를 통해 업무 시간이 50% 이상 단축되었다”고 말합니다. 앞으로도 Google Cloud 위에서 전 세계 유저들에게 최고의 재미와 경험을 선사할 컴투스의 행보를 기대합니다. 구글 클라우드 문의하기 2023년 10월 10일
Storage Transfer Service에 대한 액세스 제어 설정 구글 인사이트 by Miyeon. Jo 2023년 10월 10일 구글 TS2팀 이수림목차개요Storage Transfer Service 소개액세스 제어 개요액세스 제어 방법에이전트 설정 명령어1. 개요대부분의 경우 스토리지 관리자는 Storage Transfer Service를 사용하여 서로 다른 액세스 권한을 가진 모든 파일을 포함한 전체 파일 시스템을 마이그레이션합니다. 사용자가 POSIX 액세스가 관찰되는지 확인해야 하는 경우 다중 테넌트 스토리지 환경에서 데이터를 마이그레이션하는 것이 어려울 수 있습니다. 전송 도구는 허용된 것만 전송할 수 있어야 합니다. Storage Transfer Service는 루트 권한으로 작동하지만 전송 에이전트에 액세스 제어를 적용하는 방법이 있습니다. 이 블로그에서는 Storage Transfer Service에 대한 액세스 제어 설정 방법에 대해 알아보도록 하겠습니다.2. Storage Transfer Service 소개Storage Transfer Service(이하 STS)는 Google Cloud Storage, Amazon S3, Azure Storage, 온프레미스 데이터 등을 비롯한 파일 스토리지 시스템과 객체 간의 데이터 전송을 자동화하는 서비스로, 코드를 작성할 필요 없이 대량의 데이터를 빠르고 안정적으로 전송하는 데 사용할 수 있습니다.데이터 무결성을 통해 전송 중에 데이터가 손상되지 않았는지 확인 가능하며, 자동 재시도, 병렬 아키텍처를 통한 전송 속도 가속화 등 우수한 성능을 자랑합니다.STS가 사용되는 사례는 다음과 같습니다.1) Cloud Storage로 데이터 마이그레이션:STS를 사용하여 다른 클라우드 스토리지 제공업체, 온프레미스 데이터 센터, HTTP/HTTPS URL의 데이터를 Cloud Storage로 마이그레이션할 수 있습니다.2) 백업: 데이터를 Google Cloud에 복제하거나 다른 리전에 Cloud Storage 버킷 사본을 생성합니다.3) 데이터 처리 파이프라인: BigQuery 또는 Dataproc을 사용한 분석을 위해 다른 클라우드, 데이터 센터, 에지에서 생성된 데이터를 Google Cloud로 이동합니다.4) 아카이브: 값비싼 온프레미스 스토리지 시스템의 콜드 데이터를 Cloud Storage로 옮겨 스토리지 비용을 절감합니다.3. 액세스 제어 개요마운트/권한 설정이 없으면 전송 에이전트는 마운트 내의 모든 데이터를 전송할 수 있습니다. /mnt/에 마운트된 에이전트는 모든 기본 디렉터리인 dataset A, dataset B, dataset C, dataset D에서 Cloud Storage로 데이터를 전송할 수 있습니다.멀티 테넌트 NAS/NFS 스토리지 환경에서 특정 사용자 그룹에 대한 전송 서비스를 설정해야 하는 경우, 특정 마운트 /POSIX 사용자 계정 권한을 사용하여 그룹에 속하지 않는 데이터에 대한 액세스를 제한해야 합니다. 여러 그룹에 대해 서로 다른 POSIX 사용자 계정 권한을 사용하여 여러 설정을 수행할 수 있습니다.에이전트 풀 A의 모든 에이전트는 /mnt/dataset A의 데이터에만 액세스할 수 있으며, 다른 dataset B, dataset C, dataset D에는 액세스할 수 없습니다. 마찬가지로, 에이전트 풀 B의 모든 에이전트는 /mnt/dataset B의 데이터에만 액세스할 수 있으며, 다른 dataset A, dataset C, dataset D에는 액세스할 수 없습니다.이처럼 특정 에이전트는 특정 마운트 및 기본 디렉터리의 데이터만 Cloud Storage로 전송할 수 있습니다.4. 액세스 제어 방법컨테이너를 전송 에이전트로 설정하여 액세스 제어 방법을 설명합니다.데이터에 대한 전송 에이전트 액세스 권한을 제한하는 방법에는 두 가지가 있습니다. 두 가지 액세스 제어 방법을 단독으로 사용하거나 결합하여 사용할 수 있습니다.1) Mount컨테이너의 마운트 옵션에 디렉토리를 지정하여 서비스를 전송합니다.마운트 위치 외부의 데이터에 액세스할 수 없습니다. 전송 노드/VM이 디렉터리에 액세스할 수 있더라도 Docker 컨테이너/에이전트에 마운트되지 않으면 데이터에 액세스할 수 없습니다.대규모 파일 시스템에서는 프로젝트가 디렉터리 구조로 구성될 가능성이 높습니다. 에이전트에 특정 디렉터리를 탑재하면 에이전트 풀이 특정 프로젝트 데이터를 대상으로 할 수 있다는 장점이 있습니다.2) POSIX user account permission에이전트가 디렉터리 상단에 액세스할 수 있더라도 POSIX 사용자 계정 권한에 따라 액세스가 제한됩니다.다중 테넌트 환경에서 관리자는 POSIX 권한으로 사용자 액세스를 제한할 수 있다는 장점이 있습니다.5. 에이전트 설정 명령어다음은 Mount / POSIX 사용자 계정 권한으로 전송 에이전트를 설정하는 명령 예시입니다.1) 서비스 계정 json 키 설정gcloud iam service-accounts keys create service_account.json --iam-account=<service account name> 2) 전송 에이전트 설정docker run --ulimit memlock=64000000 -d --rm -v <directory to be transferred>:<directory to be transferred> -v <path to the service account key>/service_account.json:<path to the service account key>service_account.json --user 1000:1001 gcr.io/cloud-ingest/tsop-agent:latest --project-id=thomashk-migration1 --creds-file=<path to the service account key>service_account.json --hostname=$(hostname) --agent-pool=<name of the agent pool>Mount : “–user uid:gid”를 사용하여 POSIX 사용자 권한을 설정합니다.POSIX user account permission : -v <directory to be transferred>:<directory to be transferred> 를 사용합니다.권한 없이 디렉터리를 전송하려는 경우 다음과 같은 오류가 표시됩니다.위에서 언급한 설정 방법을 통해 멀티 테넌트 NAS 환경에서 액세스 제어를 사용하여 여러 전송 에이전트를 설정할 수 있습니다. 출처https://cloud.google.com/storage-transfer/docs/overviewhttps://cloud.google.com/blog/products/storage-data-transfer/move-your-data-around-easily-with-storage-transfer-service?hl=en 2023년 10월 10일
밸류비젼앤쉽테크 by Miyeon. Jo 2023년 10월 09일 밸류비젼앤쉽테크 산업 분야IT 국가대한민국 상품 및 서비스 Amazon Bedrock Company Overview 밸류비젼앤쉽테크는 Database에 적재되는 선박 및 항구에 대한 실시간 정보를 기반으로 AI를 통해 선박 및 항구에 대한 다양한 정보를 제공하는 서비스를 만들고자 했습니다. 하지만 실시간으로 수집되는 방대한 양의 선박 AIS 데이터와 기상 정보를 처리하는 과정에서 성능 저하 문제에 직면했습니다. 내부 연구개발팀을 통해 구축한 Text-to-SQL 기반 챗봇은 낮은 SQL 정확도와 느린 응답 속도로 인해 서비스 전반의 효율성을 떨어뜨렸습니다. 이는 정확도와 응답 속도뿐만 아니라, 높은 운영 비용과 복잡한 아키텍처 관리의 어려움까지 야기했습니다. 특히, LLM(대규모 언어 모델) 활용 시 과도한 Input/Output 토큰이 발생하고, 생성된 쿼리에서 문법 오류가 자주 나타나는 문제도 있었습니다. 더 나아가 AWS Lambda의 제약 조건과 데이터 쿼리에 자동으로 limit,top이 설정되는 문제 또한 효율적인 데이터 관리를 방해하는 요인이 되었습니다. Solution 베스핀글로벌은 고객사의 기존 프로세스(AS-IS)를 먼저 심층적으로 분석하여 문제의 근본 원인을 진단했습니다. 이를 바탕으로 두 가지 핵심적인 개선 방안을 적용했습니다. 첫째, 데이터베이스 구조를 전면적으로 개선했습니다. 기존 데이터를 재정의하고 테이블을 간소화하며, T2S 모델이 더 쉽게 이해할 수 있도록 정규화된 관계를 재설계했습니다. 둘째, 프롬프트 테스트를 통해 정확도를 비약적으로 향상시켰습니다. 실제 업무 환경에서 사용되는 다양한 샘플 쿼리를 보완하고 반복적인 테스트를 진행함으로써 LLM이 정확하고 오류 없는 쿼리를 생성하도록 최적화했습니다. 또한, Amazon Bedrock의 지식기반을 활용해 RAG 아키텍처를 구성하여 효율성을 높였으며, 웹브라우저에 직관적인 UI를 구축하여 사용자 편의성을 개선했습니다. Result 프롬프트 개선을 통해 응답의 정확도가 90% 이상 달성되었고, 할루시네이션 현상을 최소화할 수 있었습니다. 응답 속도는 기존 대비 약 2배 향상되었으며, 운영 및 유지보수 비용 또한한 약 90% 절감되었습니다. 특히, OpenSearch 대신 pgvector를 활용하여 비용 효율성을 높였습니다. 아키텍처 최적화를 통해 에이전트는 Sonnet 4.0 모델로 쿼리를 생성하고, 더 저렴한 Haiku 모델로 자연어를 변환하는 방식을 채택해 속도와 비용을 동시에 잡았습니다. 또한, 챗봇(ChatVue) 적용시 딥뷰(DeepVue) 솔루션 및 선박 및 항만 상세 정보와 구글맵 연동 등 외부 사이트와의 연계를 통해 서비스의 가치를 극대화했습니다. 문의하기 2023년 10월 09일
나무엘 by Miyeon. Jo 2023년 10월 09일 나무엘 산업 분야미디어&엔터테인먼트 국가대한민국 상품 및 서비스Amazon Bedrock Company Overview 나무엘은 사람이 직접 진행하던 숏폼 하이라이트 생성 업무를 AI 기반 솔루션으로 자동화하고자 했습니다. 이 작업은 영상에서 대본을 추출하고, 그 대본에서 핵심 하이라이트를 식별하여 숏폼 영상으로 만드는 과정이 필요합니다. 하지만 Amazon Bedrock 서비스만을 단독으로 사용하여 모든 자동화를 구현하기에는 기능적 한계가 있어, 이를 보완할 수 있는 다양한 AWS 서비스를 결합하여 최적의 아키텍처를 구축하고, Amazon Bedrock 서비스를 효율적으로 사용하기 위해 관련된 전문적인 기술 역량을 가진 인력을 확보하는 것이 과제였습니다. Solution Amazon Bedrock 서비스만 가지고 처음 테스트를 진행했을 때, 대용량 동영상이 업로드되지 않는 명백한 기능적 한계를 발견했습니다. 이처럼 단일 서비스만으로는 자동화 프로세스를 완성할 수 없었기에, 우리는 전체 시스템 구조를 근본적으로 재검토했습니다.그 결과, 자동화라는 최종 목표를 달성하기 위해 Amazon Bedrock의 장점을 활용하면서도 문제점을 보완할 수 있도록 AWS Transcribe, Lambda, S3 등 다양한 서비스를 추가로 조합했습니다. 이러한 서비스들을 유기적으로 결합하여 영상의 주요 내용과 하이라이트 구간을 식별하고, 이를 기반으로 숏폼 영상을 제작하는 완벽한 자동화 시스템을 성공적으로 구축했습니다. Outcome AI 기반 하이라이트 영상 생성 서비스 도입 후, 편집 담당자가 긴 영상을 처음부터 끝까지 수작업으로 확인하고 편집하던 비효율적인 업무 과정이 완전히 자동화되었습니다.그 결과 업무 생산성이 크게 향상되었고, 다양한 버전의 숏폼 영상을 더 빠르고 효율적으로 제작하여 콘텐츠를 더 신속하게 게시할 수 있게 되었습니다. 문의하기 2023년 10월 09일