Google Cloud에서 Generative AI를 활용한 맞춤형 AI/ML 개발 구글 인사이트 by Miyeon. Jo 2023년 08월 21일 구글TS1팀 황진규목차개요Generative AI 서비스 소개Generative AI에서 제공하는 서비스간단한 나만의 맞춤형 Gen AI 제작해보기지원 현황1. 개요사용자가 원하는 제시어나 자료를 입력하게 되면, 그것을 판독하여 사용자에게 적절한 컨텐츠를 생성해 제공하는 생성형 AI는 2022년 하반기 OpenAI에서 ChatGPT를 출시하면서 인터넷을 뜨겁게 달구기 시작했습니다. 테크 기업들, 스타트업 할 것 없이 너도 나도 생성형 AI 서비스들을 출시하게 되었습니다. 마이크로소프트의 BingChat, 구글의 Bard, 네이버의 하이퍼클로바X, Stability AI의 Stable Diffusion 등 일반사용자들도 사용할 수 있는 서비스 중이거나 서비스를 준비중에 있습니다. 여기서 한 발 더 나아가, 생성형 AI의 응답을 기업의 Application에 맞게 맞춤형으로 만들 수 있는 도구 또한 출시되고 있습니다. 구글은 생성형 AI 모델을 엔터프라이즈 기업 Application에 맞춰 제공할 수 있는 툴인 Vertex AI Generative AI를 2023년 6월 8일 정식 런칭했습니다. 이번 아티클에서는 Vertex AI Generative AI의 특징 및 제공 서비스, 간단한 구성에 대해서 알아보도록 하겠습니다.2. Generative AI 서비스 소개Vertex AI Generative AI(이하 Gen AI)는 Google의 대규모 생성형 AI 모델에 대한 액세스를 제공하여 AI 기반 애플리케이션에서 테스트, 조정, 배포할 수 있습니다. Google Cloud Console의 Generative AI Studio, Vertex AI API, Python용 Vertex AI SDK를 사용하여 Vertex AI의 생성 AI 기능과 상호작용할 수 있습니다. 현재(2023년 8월 3일 기준) 텍스트 및 채팅, 이미지, 코드 및 텍스트 임베딩 모델이 제공됩니다. 각 모델은 Google Cloud 프로젝트에 특정한 엔드포인트를 통해 노출되므로 특정 사용 사례에 맞게 커스터마이즈 해야하는 경우가 아니면 기본 모델을 배포할 필요 없이 바로 사용 가능합니다. 또한 입력-출력 예제의 데이터 세트를 사용하여 튜닝하여 특정 사용 사례에 대한 기본 모델을 커스터마이즈 할 수 있습니다. 조정된 모델은 Google Cloud 프로젝트에서 동일한 이름의 Vertex AI Endpoints에 자동으로 배포됩니다.3. Generative AI에서 제공하는 서비스2023년 8월 3일 기준 Gen AI 서비스 중 정식 출시 전 서비스인 Preview, 정식 출시 된 일반 사용(General Available, 이하 GA) 가능한 것이 있고, 일반 사용이 가능함에도 신뢰할 수 있는 테스터 프로그램(Trusted Tester Program, 이하 TTP)을 신청해야 사용할 수 있는 프로그램이 있습니다.Generative AI(GA): 기초 모델이라고도 하는 Vertex AI에서 사용할 수 있는 Gen AI 모델은 생성하도록 설계된 콘텐츠 유형에 따라 분류됩니다. 이 콘텐츠에는 텍스트 및 채팅, 이미지, 코드 및 텍스트 임베딩이 포함됩니다.Model상태설명PaLM 2GAText and Chat 모델은 향상된 100개 이상의 다국어, 논리, 상식 추리, 수학 및 코딩 기능을 갖춘 최첨단 언어 모델입니다.ImagenTTPText-to-Image 기반 모델은 모든 비즈니스 요구에 맞게 규모에 맞게 스튜디오급 이미지를 생성하고 사용자 지정할 수 있습니다.ChirpPreviewSpeech-to-Text 기반 모델은 조직이 캡션 및 음성 지원을 통해 모국어로 고객과 보다 깊이 있고 포괄적으로 소통할 수 있도록 도와줍니다.CodeyGAText-Code 기반 모델은 SDK 또는 애플리케이션에 내장되어 코드 생성 및 코드 완성을 통해 개발자 속도를 개선하고 코드 품질을 개선할 수 있습니다.표: 구글이 제공하는 Gen AI에서 적용 가능한 생성형 AI 모델Generative AI Studio(GA): PaLM 2, Imagen, Codey, Chirp를 비롯한 구글이 제공하는 기반 모델을 가지고 프롬프트 엔지니어링, 조정, 배포할 수 있습니다.샘플 프롬프트 테스트: Gen AI Studio가 미리 준비해둔 프롬프트를 통해 생성형 AI에 던질 질의문을 빠르게 생성하고 테스트할 수 있습니다.자체 프롬프트 디자인 및 저장: 자체 프롬프트를 생성한 뒤에 생성형 AI에 질의문을 던지고 테스트할 수 있습니다.응답 인용: 응답이 훈련 데이터와 동일한 경우 Generative AI Studio 프롬프트 상자에서 출처를 인용합니다.Foundation 모델 조정: 훈련 데이터가 있는 경우 모델 자체를 조정하여 더 나은 품질의 응답을 얻을 수 있습니다. 모델을 조정하면 모델의 응답을 특정 작업의 예에 따라 사용자 지정할 수 있습니다.텍스트와 음성의 변환: Generative AI Studio의 음성 도구를 사용하면 텍스트 조각을 음성 오디오 파일로 변환하고 재생 및 다운로드할 수 있습니다.Model Garden(GA): 위에서 언급된 구글의 AI 모델 뿐만 아니라 오픈 소스 모델/3rd Party 모델 등 다양한 모델을 제공하여 비즈니스 니즈에 맞춰 최고의 리소스를 사용할 수 있는 유연성을 제공합니다.Generative AI App Builder(TTP): Gen App Builder는 다양한 내부 및 외부 정형/비정형 소스에서 데이터를 쉽게 수집하여 자연어를 통해 사용자 의도를 이해하는 앱을 빌드하고 기업의 공개 및 비공개 데이터에서 관련된 인용 및 출처를 사용해 올바른 정보를 표시할 수 있습니다. 또한 애플리케이션에서 액세스하는 데이터와 다루고자 하는 콘텐츠 또는 주제를 완전하게 제어할 수 있습니다.Tune Model(Preview): 기본 모델에 프롬프트 디자인만으로 원하는 응답을 얻지 못할 수도 있습니다. 모델 튜닝의 목표는 특정 작업에 대한 모델의 성능을 더욱 향상시키는 것입니다. 모델 튜닝 작업은 많은 예시를 포함하는 교육 데이터 세트를 모델에 제공하여 커스터마이즈를 합니다. 이런 식으로 모델을 조정하여 모델 성능을 크게 향상시킬 수 있습니다.Gen AI에서 제공하는 서비스는 Google Cloud의 AI 통합 환경인 Vertex AI, 데이터 저장 및 처리 서비스인 Google Cloud Storage, BigQuery 등 제품과도 연계가 가능합니다.4. 간단한 나만의 맞춤형 Gen AI 제작해보기아래 예제에서 다루는 Gen App Builder를 따라하기 위해서 먼저 TTP 신청(https://cloud.google.com/ai/earlyaccess/join?hl=en)을 하시고 Google의 승인이 이루어진 다음 진행할 수 있습니다. Gen App Builder을 사용하실 수 없더라도 아래 Sample Demo를 보면서 어떻게 Gen AI를 활용하는지 확인하실 수 있습니다.TTP 신청이 완료된 구글 클라우드 프로젝트에서 Gen App Builder를 검색 후 진입한 다음 새로운 Gen App을 하나 만들어보도록 하겠습니다.[CREATE A NEW APP] 버튼을 눌러 새로운 Gen App을 생성해보도록 하겠습니다.Gen App은 현재 심층 정보 검색, 최첨단 자연어 처리 및 최신 대규모 언어 처리 기능을 결합하여 사용자 의도를 이해하고 사용자에게 가장 관련성 높은 결과를 반환하는 Enterprise Search, 사용자가 현재 보고 있는 콘텐츠와 유사한 콘텐츠를 제안할 수 있는 Recommendations 기능을 제공합니다.Gen App이 어떠한 데이터를 참조할지 결정합니다. 특정 Web Site, 회사가 가지고 있는 비정형 데이터 또는 정형 데이터를 참조할 수 있습니다. Web Site는 Gen App Builder를 통해 특별히 로그인이 필요하지않은 페이지에 한해 접근 가능한 데이터를 기반으로 빠른 구축이 가능하며, 정형/비정형 Gen App Builder가 구축에 시간이 조금 소요되는 대신 회사의 Private한 데이터를 바탕으로 구축할 수 있습니다. 여기서는 Web Site를 가지고 생성을 해보도록 하겠습니다.Web Site에서 어떤 사이트를 참조하고, 어떤 사이트를 배제할지 명시해주면, Gen App Builder로 만들어진 검색엔진 생성이 완료됩니다.왼쪽의 Integration 메뉴에서 사용자가 원하는 방식으로 만들어진 Gen App을 embedding 시킬 수 있습니다. Widget은 Web Application에 삽입되어 동작할 수 있는 방식이고, API는 질의를 API 형식으로 던져 JSON 형태의 Response로 Gen App의 대답을 확인할 수 있습니다.[Widget 방식][API 방식]아래 JSON은 위의 API 응답의 일부입니다. "results": [ { "id": "0", "document": { "name": "projects/PROJECT_NO/locations/global/collections/default_collection/dataStores/my-website-search-engine_uuid/branches/0/documents/0", "id": "0", "derivedStructData": { "displayLink": "cloud.google.com", "htmlFormattedUrl": "https://cloud.google.com/\u003cb\u003edatastream\u003c/b\u003e", "formattedUrl": "https://cloud.google.com/datastream", "pagemap": { "cse_thumbnail": [ { "height": "79", "src": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSa8IR5F42FTxpTHD8L4d74r6iMstqX85Va_AqaMlPoz8BKmaMunv1prA", "width": "150" } ], "document": [ { "keyword": "E__org__GoogleCloudPlatform", "keywords": "E__org__GoogleCloudPlatform E__category__Cloud E__category__ProductExploration E__product__Datastream E__product__CloudDatabases E__category__Interest E__product__GoogleCloud E__category__CloudDatabasesAndAnalytics E__org__Alphabet E__docType__Product E__docType__LandingPage K__docType__Product K__product__Datastream" } ], "cse_image": [ { "src": "https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png" } ], "metatags": [ { "og:image": "https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png", "viewport": "width=device-width, initial-scale=1", "track-metadata-page_publishing_platform": "bricks", "og:locale": "en", "og:image:width": "1200", "google-signin-scope": "profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/webhistory", "og:type": "website", "og:url": "https://cloud.google.com/datastream", "og:title": "Change Data Capture | Datastream | Google Cloud", "track-metadata-page_template": "Product v2 Template", "google-signin-client-id": "721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com", "twitter:card": "summary_large_image", "og:site_name": "Google Cloud", "og:description": "Replicate and synchronize data reliably and with minimal latency with Datastream.", "og:image:height": "630", "theme-color": "#039be5" } ] }, "snippets": [ { "snippet": "Datastream reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, ...", "htmlSnippet": "\u003cb\u003eDatastream\u003c/b\u003e reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, ..." } ], "htmlTitle": "Change Data Capture | \u003cb\u003eDatastream\u003c/b\u003e | Google Cloud", "link": "https://cloud.google.com/datastream", "title": "Change Data Capture | Datastream | Google Cloud" } } }, … ] 위의 응답에서 snippet 부분을 추출하여 프롬프트를 만든 다음 Gen AI API에 쿼리해보도록 하겠습니다. https://cloud.google.com/vertex-ai/docs/generative-ai/text/test-text-promptscurl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://us-central1-aiplatform.googleapis.com/v1/projects/YOUR_PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict" @request.json 내용 { "instances": [ { "prompt": "You are an AI Chatbot describing Google Cloud Product. Please refer to the Context below and answer more detail.\nContext: Datastream reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, ..."} ], "parameters": { "temperature": 0.2, "maxOutputTokens": 200, "topP": 0.95, "topK": 40 } } 위와 같이 구성을 하게 되면, 아래와 같이 Gen AI로부터 응답을 받게 될 것입니다.{ "predictions": [ { "content": "Datastream reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, Cloud Storage, or Pub/Sub. It's a fully managed service that's simple to set up and use.\n\nDatastream is a great choice for businesses that need to keep their data up-to-date in real time. It's also a good option for businesses that want to avoid the hassle of managing their own data replication infrastructure.\n\nHere are some of the benefits of using Datastream:\n\n* It's a fully managed service, so you don't have to worry about managing the underlying infrastructure.\n* It's easy to set up and use.\n* It supports a variety of data sources, including MySQL, PostgreSQL, AlloyDB and Oracle databases.\n* It can deliver data in real time or in batches.\n* It's secure and reliable", "safetyAttributes": { "scores": [ 0.1 ], "categories": [ "Finance" ], "blocked": false }, "citationMetadata": { "citations": [] } } ], "metadata": { "tokenMetadata": { "outputTokenCount": { "totalBillableCharacters": 692, "totalTokens": 200 }, "inputTokenCount": { "totalTokens": 60, "totalBillableCharacters": 239 } } } }5. 지원 현황Gen AI 서비스의 업데이트 속도 및 새로 출시되는 기능이 상당히 빠른 편이므로, 아래 Release Notes를 자주 확인하여 새로운 기능에 대한 업데이트를 확인해주시는것이 가장 정확합니다. Gen AI는 8월 3일 기준 Gen AI에서 제공하는 텍스트/채팅 기반의 PaLM 2 모델은 한국어를 지원합니다. https://cloud.google.com/vertex-ai/docs/generative-ai/release-notes#July-17-2023 Gen App Builder는 공식적으로 영문만 지원됩니다. 다만 한국어에 대해서도 사용은 가능하나 원활한 동작을 보장하지 않습니다. https://cloud.google.com/generative-ai-app-builder/docs/release-notes 출처https://cloud.google.com/blog/products/ai-machine-learning/generative-ai-support-on-vertexai?hl=enhttps://cloud.google.com/blog/products/ai-machine-learning/google-cloud-launches-new-ai-models-opens-generative-ai-studio?hl=en https://services.google.com/fh/files/misc/blueprint_media_content_discovery.pdf?hl=kohttps://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html 2023년 08월 21일
금융보안원의 금융분야 AI 보안 가이드라인 구글 인사이트 by Miyeon. Jo 2023년 08월 07일 구글TS1팀 황진규목차개요Generative AI 서비스 소개Generative AI에서 제공하는 서비스간단한 나만의 맞춤형 Gen AI 제작해보기지원 현황1. 개요사용자가 원하는 제시어나 자료를 입력하게 되면, 그것을 판독하여 사용자에게 적절한 컨텐츠를 생성해 제공하는 생성형 AI는 2022년 하반기 OpenAI에서 ChatGPT를 출시하면서 인터넷을 뜨겁게 달구기 시작했습니다. 테크 기업들, 스타트업 할 것 없이 너도 나도 생성형 AI 서비스들을 출시하게 되었습니다. 마이크로소프트의 BingChat, 구글의 Bard, 네이버의 하이퍼클로바X, Stability AI의 Stable Diffusion 등 일반사용자들도 사용할 수 있는 서비스 중이거나 서비스를 준비중에 있습니다. 여기서 한 발 더 나아가, 생성형 AI의 응답을 기업의 Application에 맞게 맞춤형으로 만들 수 있는 도구 또한 출시되고 있습니다. 구글은 생성형 AI 모델을 엔터프라이즈 기업 Application에 맞춰 제공할 수 있는 툴인 Vertex AI Generative AI를 2023년 6월 8일 정식 런칭했습니다. 이번 아티클에서는 Vertex AI Generative AI의 특징 및 제공 서비스, 간단한 구성에 대해서 알아보도록 하겠습니다.2. Generative AI 서비스 소개Vertex AI Generative AI(이하 Gen AI)는 Google의 대규모 생성형 AI 모델에 대한 액세스를 제공하여 AI 기반 애플리케이션에서 테스트, 조정, 배포할 수 있습니다. Google Cloud Console의 Generative AI Studio, Vertex AI API, Python용 Vertex AI SDK를 사용하여 Vertex AI의 생성 AI 기능과 상호작용할 수 있습니다. 현재(2023년 8월 3일 기준) 텍스트 및 채팅, 이미지, 코드 및 텍스트 임베딩 모델이 제공됩니다. 각 모델은 Google Cloud 프로젝트에 특정한 엔드포인트를 통해 노출되므로 특정 사용 사례에 맞게 커스터마이즈 해야하는 경우가 아니면 기본 모델을 배포할 필요 없이 바로 사용 가능합니다. 또한 입력-출력 예제의 데이터 세트를 사용하여 튜닝하여 특정 사용 사례에 대한 기본 모델을 커스터마이즈 할 수 있습니다. 조정된 모델은 Google Cloud 프로젝트에서 동일한 이름의 Vertex AI Endpoints에 자동으로 배포됩니다.3. Generative AI에서 제공하는 서비스2023년 8월 3일 기준 Gen AI 서비스 중 정식 출시 전 서비스인 Preview, 정식 출시 된 일반 사용(General Available, 이하 GA) 가능한 것이 있고, 일반 사용이 가능함에도 신뢰할 수 있는 테스터 프로그램(Trusted Tester Program, 이하 TTP)을 신청해야 사용할 수 있는 프로그램이 있습니다.Generative AI(GA): 기초 모델이라고도 하는 Vertex AI에서 사용할 수 있는 Gen AI 모델은 생성하도록 설계된 콘텐츠 유형에 따라 분류됩니다. 이 콘텐츠에는 텍스트 및 채팅, 이미지, 코드 및 텍스트 임베딩이 포함됩니다.Model상태설명PaLM 2GAText and Chat 모델은 향상된 100개 이상의 다국어, 논리, 상식 추리, 수학 및 코딩 기능을 갖춘 최첨단 언어 모델입니다.ImagenTTPText-to-Image 기반 모델은 모든 비즈니스 요구에 맞게 규모에 맞게 스튜디오급 이미지를 생성하고 사용자 지정할 수 있습니다.ChirpPreviewSpeech-to-Text 기반 모델은 조직이 캡션 및 음성 지원을 통해 모국어로 고객과 보다 깊이 있고 포괄적으로 소통할 수 있도록 도와줍니다.CodeyGAText-Code 기반 모델은 SDK 또는 애플리케이션에 내장되어 코드 생성 및 코드 완성을 통해 개발자 속도를 개선하고 코드 품질을 개선할 수 있습니다.표: 구글이 제공하는 Gen AI에서 적용 가능한 생성형 AI 모델Generative AI Studio(GA): PaLM 2, Imagen, Codey, Chirp를 비롯한 구글이 제공하는 기반 모델을 가지고 프롬프트 엔지니어링, 조정, 배포할 수 있습니다.샘플 프롬프트 테스트: Gen AI Studio가 미리 준비해둔 프롬프트를 통해 생성형 AI에 던질 질의문을 빠르게 생성하고 테스트할 수 있습니다.자체 프롬프트 디자인 및 저장: 자체 프롬프트를 생성한 뒤에 생성형 AI에 질의문을 던지고 테스트할 수 있습니다.응답 인용: 응답이 훈련 데이터와 동일한 경우 Generative AI Studio 프롬프트 상자에서 출처를 인용합니다.Foundation 모델 조정: 훈련 데이터가 있는 경우 모델 자체를 조정하여 더 나은 품질의 응답을 얻을 수 있습니다. 모델을 조정하면 모델의 응답을 특정 작업의 예에 따라 사용자 지정할 수 있습니다.텍스트와 음성의 변환: Generative AI Studio의 음성 도구를 사용하면 텍스트 조각을 음성 오디오 파일로 변환하고 재생 및 다운로드할 수 있습니다.Model Garden(GA): 위에서 언급된 구글의 AI 모델 뿐만 아니라 오픈 소스 모델/3rd Party 모델 등 다양한 모델을 제공하여 비즈니스 니즈에 맞춰 최고의 리소스를 사용할 수 있는 유연성을 제공합니다.Generative AI App Builder(TTP): Gen App Builder는 다양한 내부 및 외부 정형/비정형 소스에서 데이터를 쉽게 수집하여 자연어를 통해 사용자 의도를 이해하는 앱을 빌드하고 기업의 공개 및 비공개 데이터에서 관련된 인용 및 출처를 사용해 올바른 정보를 표시할 수 있습니다. 또한 애플리케이션에서 액세스하는 데이터와 다루고자 하는 콘텐츠 또는 주제를 완전하게 제어할 수 있습니다.Tune Model(Preview): 기본 모델에 프롬프트 디자인만으로 원하는 응답을 얻지 못할 수도 있습니다. 모델 튜닝의 목표는 특정 작업에 대한 모델의 성능을 더욱 향상시키는 것입니다. 모델 튜닝 작업은 많은 예시를 포함하는 교육 데이터 세트를 모델에 제공하여 커스터마이즈를 합니다. 이런 식으로 모델을 조정하여 모델 성능을 크게 향상시킬 수 있습니다.Gen AI에서 제공하는 서비스는 Google Cloud의 AI 통합 환경인 Vertex AI, 데이터 저장 및 처리 서비스인 Google Cloud Storage, BigQuery 등 제품과도 연계가 가능합니다.4. 간단한 나만의 맞춤형 Gen AI 제작해보기아래 예제에서 다루는 Gen App Builder를 따라하기 위해서 먼저 TTP 신청(https://cloud.google.com/ai/earlyaccess/join?hl=en)을 하시고 Google의 승인이 이루어진 다음 진행할 수 있습니다. Gen App Builder을 사용하실 수 없더라도 아래 Sample Demo를 보면서 어떻게 Gen AI를 활용하는지 확인하실 수 있습니다.TTP 신청이 완료된 구글 클라우드 프로젝트에서 Gen App Builder를 검색 후 진입한 다음 새로운 Gen App을 하나 만들어보도록 하겠습니다.[CREATE A NEW APP] 버튼을 눌러 새로운 Gen App을 생성해보도록 하겠습니다.Gen App은 현재 심층 정보 검색, 최첨단 자연어 처리 및 최신 대규모 언어 처리 기능을 결합하여 사용자 의도를 이해하고 사용자에게 가장 관련성 높은 결과를 반환하는 Enterprise Search, 사용자가 현재 보고 있는 콘텐츠와 유사한 콘텐츠를 제안할 수 있는 Recommendations 기능을 제공합니다.Gen App이 어떠한 데이터를 참조할지 결정합니다. 특정 Web Site, 회사가 가지고 있는 비정형 데이터 또는 정형 데이터를 참조할 수 있습니다. Web Site는 Gen App Builder를 통해 특별히 로그인이 필요하지않은 페이지에 한해 접근 가능한 데이터를 기반으로 빠른 구축이 가능하며, 정형/비정형 Gen App Builder가 구축에 시간이 조금 소요되는 대신 회사의 Private한 데이터를 바탕으로 구축할 수 있습니다. 여기서는 Web Site를 가지고 생성을 해보도록 하겠습니다.Web Site에서 어떤 사이트를 참조하고, 어떤 사이트를 배제할지 명시해주면, Gen App Builder로 만들어진 검색엔진 생성이 완료됩니다.왼쪽의 Integration 메뉴에서 사용자가 원하는 방식으로 만들어진 Gen App을 embedding 시킬 수 있습니다. Widget은 Web Application에 삽입되어 동작할 수 있는 방식이고, API는 질의를 API 형식으로 던져 JSON 형태의 Response로 Gen App의 대답을 확인할 수 있습니다.[Widget 방식][API 방식]아래 JSON은 위의 API 응답의 일부입니다. "results": [ { "id": "0", "document": { "name": "projects/PROJECT_NO/locations/global/collections/default_collection/dataStores/my-website-search-engine_uuid/branches/0/documents/0", "id": "0", "derivedStructData": { "displayLink": "cloud.google.com", "htmlFormattedUrl": "https://cloud.google.com/\u003cb\u003edatastream\u003c/b\u003e", "formattedUrl": "https://cloud.google.com/datastream", "pagemap": { "cse_thumbnail": [ { "height": "79", "src": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSa8IR5F42FTxpTHD8L4d74r6iMstqX85Va_AqaMlPoz8BKmaMunv1prA", "width": "150" } ], "document": [ { "keyword": "E__org__GoogleCloudPlatform", "keywords": "E__org__GoogleCloudPlatform E__category__Cloud E__category__ProductExploration E__product__Datastream E__product__CloudDatabases E__category__Interest E__product__GoogleCloud E__category__CloudDatabasesAndAnalytics E__org__Alphabet E__docType__Product E__docType__LandingPage K__docType__Product K__product__Datastream" } ], "cse_image": [ { "src": "https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png" } ], "metatags": [ { "og:image": "https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png", "viewport": "width=device-width, initial-scale=1", "track-metadata-page_publishing_platform": "bricks", "og:locale": "en", "og:image:width": "1200", "google-signin-scope": "profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/webhistory", "og:type": "website", "og:url": "https://cloud.google.com/datastream", "og:title": "Change Data Capture | Datastream | Google Cloud", "track-metadata-page_template": "Product v2 Template", "google-signin-client-id": "721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com", "twitter:card": "summary_large_image", "og:site_name": "Google Cloud", "og:description": "Replicate and synchronize data reliably and with minimal latency with Datastream.", "og:image:height": "630", "theme-color": "#039be5" } ] }, "snippets": [ { "snippet": "Datastream reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, ...", "htmlSnippet": "\u003cb\u003eDatastream\u003c/b\u003e reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, ..." } ], "htmlTitle": "Change Data Capture | \u003cb\u003eDatastream\u003c/b\u003e | Google Cloud", "link": "https://cloud.google.com/datastream", "title": "Change Data Capture | Datastream | Google Cloud" } } }, … ] 위의 응답에서 snippet 부분을 추출하여 프롬프트를 만든 다음 Gen AI API에 쿼리해보도록 하겠습니다. https://cloud.google.com/vertex-ai/docs/generative-ai/text/test-text-promptscurl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://us-central1-aiplatform.googleapis.com/v1/projects/YOUR_PROJECT_ID/locations/us-central1/publishers/google/models/text-bison:predict" @request.json 내용 { "instances": [ { "prompt": "You are an AI Chatbot describing Google Cloud Product. Please refer to the Context below and answer more detail.\nContext: Datastream reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, ..."} ], "parameters": { "temperature": 0.2, "maxOutputTokens": 200, "topP": 0.95, "topK": 40 } } 위와 같이 구성을 하게 되면, 아래와 같이 Gen AI로부터 응답을 받게 될 것입니다.{ "predictions": [ { "content": "Datastream reads and delivers every change—insert, update, and delete—from your MySQL, PostgreSQL, AlloyDB and Oracle databases to load data into BigQuery, Cloud Storage, or Pub/Sub. It's a fully managed service that's simple to set up and use.\n\nDatastream is a great choice for businesses that need to keep their data up-to-date in real time. It's also a good option for businesses that want to avoid the hassle of managing their own data replication infrastructure.\n\nHere are some of the benefits of using Datastream:\n\n* It's a fully managed service, so you don't have to worry about managing the underlying infrastructure.\n* It's easy to set up and use.\n* It supports a variety of data sources, including MySQL, PostgreSQL, AlloyDB and Oracle databases.\n* It can deliver data in real time or in batches.\n* It's secure and reliable", "safetyAttributes": { "scores": [ 0.1 ], "categories": [ "Finance" ], "blocked": false }, "citationMetadata": { "citations": [] } } ], "metadata": { "tokenMetadata": { "outputTokenCount": { "totalBillableCharacters": 692, "totalTokens": 200 }, "inputTokenCount": { "totalTokens": 60, "totalBillableCharacters": 239 } } } }5. 지원 현황Gen AI 서비스의 업데이트 속도 및 새로 출시되는 기능이 상당히 빠른 편이므로, 아래 Release Notes를 자주 확인하여 새로운 기능에 대한 업데이트를 확인해주시는것이 가장 정확합니다. Gen AI는 8월 3일 기준 Gen AI에서 제공하는 텍스트/채팅 기반의 PaLM 2 모델은 한국어를 지원합니다. https://cloud.google.com/vertex-ai/docs/generative-ai/release-notes#July-17-2023 Gen App Builder는 공식적으로 영문만 지원됩니다. 다만 한국어에 대해서도 사용은 가능하나 원활한 동작을 보장하지 않습니다. https://cloud.google.com/generative-ai-app-builder/docs/release-notes 출처금융보안원 「금융분야 AI 보안 가이드라인」 2023년 4월 (금융분야 레그테크 포털) – https://regtech.fsec.or.kr금융위원회 보도자료 「금융분야 인공지능의 신뢰를 높인다」한국경제, 22년 12월 11일자, 데이터 결합, 2년간 249건…그 중 87%가 금융 – https://www.hankyung.com/economy/article/2022121184931 2023년 08월 07일
Kubernetes 비용 최적화를 위한 리소스 Request 설정 구글 인사이트 by Miyeon. Jo 2023년 08월 01일 구글 TS2팀 조수빈목차개요Request를 제대로 설정하지 않을 경우 발생 가능한 문제GKE Workloads at Risk dashboard1. 개요Kubernetes 비용 최적화는 적절한 리소스 요청 설정의 중요성을 이해하는 것에서 시작됩니다. 요청을 잘못 관리하면 애플리케이션이 중단되어 애플리케이션의 안정성에 연쇄적으로 부정적인 영향을 미칠 수 있습니다. Kubernetes 비용 최적화의 기본 측면을 마스터하는 데 도움이 되는 실행 가능한 전략 하나를 검토해 보겠습니다.2. Request를 제대로 설정하지 않을 경우 발생 가능한 문제노드 압력 제거(Node-pressure eviction)는 메모리와 같은 리소스가 노드의 용량 임계값에 도달할 때 발생합니다. 이 압력 상태는 Kubernetes를 활성화하여 kubeletPod를 갑자기 종료하여 리소스 회수를 시작합니다. 포드를 죽이는 우선순위는 그들이 요청한 것과 비교하여 가장 많은 리소스를 사용하는 포드에 부여됩니다.그러나 명시적으로 리소스를 요청하지 않는 BestEffort 포드는 특정 요구 사항이 없기 때문에 가장 먼저 종료될 가능성이 높습니다. 워크로드를 충분히 빠르게 죽일 수 없는 경우 kubelet Linux oom_killer가 개입하여 컨테이너를 죽일 수도 있습니다. 이 프로세스는 또한 부분적으로 QoS 클래스를 기반으로 우선 순위를 지정합니다.QoS 클래스가 BestEffort인 워크로드와 QoS 클래스가 Burstable이고 메모리가 과소 프로비저닝된 워크로드가 가장 먼저 종료될 수 있습니다. OOMKilled, ContainerStatusUnknown, Error및 와 같이 이 종료와 관련될 수 있는 오류로 인해 Evicted 문제 해결이 어려울 수 있습니다.여기에서 관찰 가능성 측정항목을 보는 것이 특히 유용할 수 있습니다. 이러한 이유로 보고서는 중요한 워크로드에 대해 요청을 적절하게 설정할 것을 권장합니다.관찰 가능성 측정항목은 다음과 같은 GKE 클러스터의 문제를 해결하는 데 도움이 될 수 있습니다.CPU 또는 메모리 요청 사용률 추이가 높으면 리소스를 더 적게 사용하도록 클러스터 또는 네임스페이스에서 컨테이너를 구성해야 할 수 있습니다.컨테이너의 재시작 횟수가 많으면 컨테이너가 비정상 종료되었을 수 있습니다.예약할 수 없는 포드가 많으면 리소스 부족 또는 구성 오류가 발생한 것입니다.높은 Cloud Logging 또는 Google Cloud Managed Service for Prometheus 수집은 Google Cloud 운영 제품군 가격과 관련이 있습니다. 수집을 줄여 비용을 절약하는 것이 좋습니다.3. GKE Workloads at Risk dashboardGKE Workloads at Risk dashboard를 사용하여 성능 또는 안정성 문제의 위험에 처한 BestEffort 및 Burstable 워크로드를 모니터링할 수 있습니다.Google Cloud Console에서 모니터링을 선택합니다.탐색 창에서 대시보드를 선택합니다.샘플 라이브러리 창 에서 Google Kubernetes Engine을 선택합니다.대시보드 목록에서 GKE Workloads at Risk dashboard 옆에 있는 미리보기 버튼을 클릭합니다.“Best Effort Workloads at Risk” 섹션에는 정의된 CPU 또는 메모리 요청이 없는 작업 부하가 표시됩니다. 메모리 요청이 정의되지 않은 경우 Pod는 언제든지 제거되고 실패한 것으로 표시될 수 있습니다. 마찬가지로 CPU 요청이 정의되지 않은 경우 CPU가 0으로 제한될 수 있으므로 워크로드가 응답하지 않을 수 있습니다. 이를 방지하려면 워크로드에 대한 CPU 및 메모리 요청을 정의해야 합니다. 이렇게 하면 워크로드가 제대로 실행되는 데 필요한 리소스를 확보할 수 있습니다.“Burstable Workloads at Risk” 섹션에는 요청한 것보다 더 많은 메모리와 CPU를 사용하는 포드가 표시됩니다. 사용 가능한 메모리가 충분하지 않으면 안정성 문제가 발생할 수 있습니다. 앞서 언급한 BestEffort 포드와 같은 이러한 포드는 종료될 수 있습니다. 요청된 것보다 더 많은 CPU를 소비하는 워크로드가 제한되어 워크로드의 최종 사용자가 경험할 수 있는 성능 저하가 발생할 수 있습니다.전체 플릿에서 위험에 처한 워크로드 식별 여러 프로젝트에서 여러 GKE 클러스터를 실행하는 조직을 위해 BigQuery 및 Looker Studio를 기반으로 구축된 포괄적이고 강력한 솔루션을 개발했습니다.이 솔루션은 BigQuery의 기능을 활용하여 클러스터와 프로젝트 전반에 걸쳐 신속한 인사이트를 제공합니다. 위험에 처한 워크로드를 식별하는 동시에 권장 사항을 제공하여 기록 관점에서 진행 상황을 모니터링할 수 있습니다. 일관된 개선을 실현하기 위해 특정 요구 사항에 맞게 사용자 정의할 수도 있습니다.Kubernetes 클러스터가 다른 곳에서 실행 중인 경우 기본 목표는 요청이 구성되거나 구성되지 않은 방식으로 인해 위험에 처할 수 있는 워크로드를 식별하는 것입니다. 모든 Kubernetes 클러스터에서 작동하는 경량 방법을 찾고 있다면 주어진 클러스터에서 CPU, 메모리 또는 둘 다에 대한 요청 없이 모든 사용자 컨테이너를 나열하는 간단한 스크립트인 kube-requests-checker 를 평가할 수 있습니다.다음 kubectl명령을 실행하여 개별 워크로드의 서비스 품질 클래스에 액세스할 수도 있습니다. $ kubectl get pod $POD_NAME -o jsonpath='{ .status.qosClass}{“\n”}’ 출처https://cloud.google.com/blog/products/containers-kubernetes/setting-resource-requests-the-key-to-kubernetes-cost-optimization?hl=enhttps://cloud.google.com/kubernetes-engine/docs/how-to/view-observability-metrics?hl=ko#interpret 2023년 08월 01일
BigQuery ML을 이용한 이미지 분류 구글 인사이트 by Miyeon. Jo 2023년 07월 25일 구글 PS1팀 김소원목차개요BigQuery ML을 사용한 이미지 데이터 분류1. 개요BigQuery의 내장된 BQML(BigQuery Machine Learning) 및 분석 기능을 통해 SQL 쿼리를 사용하여 코드 없이 predictions을 생성할 수 있습니다.2. BigQuery ML을 사용한 이미지 데이터 분류2-1. 데이터 세트 및 BigLake 연결 생성DataSet 생성BigLake 연결BigLake 연결을 사용하면 BigQuery 액세스 제어 및 보안을 유지하며 외부 데이터 소스를 연결할 수 있습니다. 이 연결을 통해 Cloud Storage에서 개체를 읽습니다.BigQuery Explorer 창에서 ADD DATA를 클릭합니다.External Data Sources에 대한 연결을 클릭하고 BigLake 및 Remote functions option을 선택합니다.2-2. Cloud Storage Bucket 생성 및 권한 부여Cloud Storage Bucket 을 사용하여 생성하려는 모델의 이미지 파일들을 업로드 합니다.Bucket 생성 생성한 DataSet 및 Connection과 동일한 리전에 생성합니다.Bucket 생성 후 이미지를 업로드 하고, Connection 서비스 계정에 필요한 권한을 부여하여 이미지에 접근합니다.ex) . export sa=”yourServiceAccountId@email.address” . gsutil iam ch serviceAccount:$sa:objectViewer “gs://<<bucket>>“2-3. External Object Table 생성Bucket 데이터에 액세스 하기 위해 BigQuery에서 외부 개체 테이블을 만듭니다.아래와 같이 비정형 이미지를 정형 데이터처럼 생성하고 조작할 수 있습니다.2-4. 모델 생성 및 Cloud Storage에 업로드이 예시는 ResNet 50 모델을 사용하여, 생성한 Object 테이블에서 추론을 실행합니다.이미지가 있는 Storage 위치에 모델을 업로드 합니다.(모델 다운로드 url은 출처 3번입니다)2-5. 모델을 BQML에 로드후 추론생성한 External Table과 동일한 BigQuery Dataset에 모델을 로드하고 Cloud Storage에 저장한 이미지를 적용합니다.Model 생성 SQL 실행 실행이 완료되면 다음과 같이 Explorer 에서 확인 가능합니다.모델은 다음과 같습니다. (Labels에서 출력 필드를 나타내는 “activation_49” 필드를 확인할 수 있으며, Features에서 모델에 입력될 필드를 나타내는 “input_1” 필드를 확인 할 수 있습니다.)추론생성한 BQML 모델을 사용하여 추론을 수행하기 위해 BigQuery에서 해당 테스트 이미지(ex)’gs://yoga_images/Downdog/00000097.jpg’) 선택하여 쿼리를 실행하며 실행 결과는 다음과 같습니다. 출처https://cloud.google.com/blog/products/data-analytics/build-an-image-data-classification-model-with-bigquery-ml?hl=enhttps://cloud.google.com/bigquery/docs/inference-tutorial-resnet#required_permissionshttps://tfhub.dev/tensorflow/resnet_50/classification/1?tf-hub-format=compressed 2023년 07월 25일
개인정보처리방침 by Miyeon. Jo 2023년 07월 11일 개인정보처리방침 ‘베스핀글로벌 주식회사’(이하 ‘회사’)는 「개인정보 보호법」 제30조에 따라 정보주체의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립•공개합니다.○ 이 개인정보처리방침은 2023년 7월 11일부터 적용됩니다.제1조(개인정보의 처리 항목, 목적, 보유기간)① 회사는 다음의 목적을 위하여 개인정보를 처리합니다. 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않으며 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.② 회사는 법령에 따른 개인정보 보유·이용기간 또는 정보주체로부터 개인정보를 수집 시에 동의받은 개인정보 보유·이용기간 내에서 개인정보를 처리·보유 후 파기합니다.③ 개인정보 보유기간의 경과, 처리목적 달성 등 개인정보가 불필요하게 되었을 때에는 지체없이 해당 개인정보를 파기합니다.④ ‘개인정보 유효기간제’에 따라 1년간 서비스를 이용하지 않은 회원의 개인정보는 별도로 1년 동안 분리 보관 후 파기합니다.⑤ 각각의 개인정보 처리 항목, 목적 및 보유 기간은 다음과 같습니다.구분처리 항목처리목적보유 기간베스핀글로벌홈페이지고객문의(Contact Us)[필수] 문의 분야, 문의 경로, 문의 내용, 성명, 회사명, 산업군, 이메일, 부서명, 휴대전화번호문의사항 상담, 서비스 관련 민원처리 및 처리결과 고지3년베스핀 뉴스레터 구독[필수] 성명, 회사명, 이메일홍보성 뉴스레터 제공수신 동의 철회 시컨텐츠 다운로드[필수] 성명, 직함, 부서명, 회사명, 산업군, 휴대전화번호, 이메일홍보성 기술자료 제공6개월프로모션(이벤트),무료 컨설팅 신청[필수] 성명, 직함, 회사명, 부서명, 이메일, 휴대전화번호, 산업군, 회사 규모(인원)[선택] 문의사항홍보성 교육(세미나, 웨비나 등) 및 문의사항 상담1년홍보 및 마케팅 동의 고객[필수] 휴대전화번호 또는 이메일(1가지 이상)신규 서비스 및 제품, 이벤트, 프로모션 안내수신 동의 철회 시OpsNow360회원 정보[필수] 이메일, 성명, 회사명, 비밀번호, 사용언어, 휴대 전화 번호OpsNow360 서비스 제공,본인확인회원 탈퇴 시* Trial 회원은 체험 종료 후 1년** 가입 미완료 정보는 3개월고객지원[필수] 요청자 이메일, 회사명, 기술지원 요청 사항OpsNow360 서비스의 기술 지원, 서비스 관련 불만처리3년빌링포털[필수] 담당자 ID(이메일 ID), 비밀번호, 회사명, 이메일[선택] 계좌번호(CMS 등록) 또는 카드 정보계약서·청구서 발송, 요금결제·정산, 채권추심, 법인 회원 식별회원 탈퇴 후 6개월채용채용 지원자[필수] 이메일, 휴대폰번호, 비밀번호, 본인 인증시 본인확인값(CI, DI), 이름, 지원분야, 생년월일, 영문이름, 추천인, 지원경로, 사진, 주소, 연락처, 병역사항, 고등학교, 대학교, 대학원, 직장경력, 경험 및 경력기술서, 포트폴리오 첨부, 경력기술서 첨부, 공인외국어시험, 자격증, 자기소개서[선택 – 민감정보] 국적, 장애여부, 보훈여부인재 채용 전형의 진행 및 전형 단계별 안내해당 채용건의 종료 시채용 지원 중 문의[필수] 성명, 전화번호, 이메일, 문의내용문의사항 접수 시 민원처리 및 처리결과 고지3년채용 합격자채용 지원 시 수집 정보 외[필수] 통장사본[필수 – 고유식별정보] 주민등록등본(주민등록번호), 외국인등록번호[선택 – 고유식별정보]피부양자 등록시 가족관계증명서(주민등록번호), 외국인등록번호급여 및 복리후생 제공, 4대보험, 경력확인 등 인사 서비스 제공퇴사 후 5년 제2조(개인정보의 보존) ① 정보주체로부터 동의받은 개인정보 보유기간이 경과하거나 처리목적이 달성되었음에도 불구하고 다른 법령에 따라 개인정보를 계속 보존하여야 하는 경우에는, 해당 개인정보를 별도의 데이터베이스(DB)로 옮기거나 보관장소를 달리하여 보존합니다. 보존 항목 근거법령 보존기간 계약 또는 청약철회 등에 관한 기록 전자상거래 등에서의 소비자 보호에 관한 법률 5년 대금결제 및 재화 등의 공급에 관한 기록 5년 소비자의 불만 또는 분쟁처리에 관한 기록 3년 표시/광고에 관한 기록 6개월 세법이 규정하는 모든 거래에 관한 장부 및 증빙서류 국세기본법 5년 전자금융 거래에 관한 기록 전자금융거래법 5년 서비스 방문 기록 통신비밀보호법 3개월 ② 개인정보 파기의 절차 및 방법은 다음과 같습니다. 1. 파기절차 회사는 파기 사유가 발생한 개인정보를 선정하고, 회사의 개인정보 보호책임자의 승인을 받아 개인정보를 파기합니다. 2. 파기방법 전자적 파일 형태의 정보는 기록을 재생할 수 없는 기술적 방법을 사용합니다. 종이에 출력된 개인정보는 분쇄기로 분쇄하거나 소각을 통하여 파기합니다 제3조(개인정보의 제3자 제공) 회사는 개인정보를 제1조(개인정보의 처리 목적)에서 명시한 범위 내에서만 처리하며, 정보주체의 동의, 법률의 특별한 규정 등 「개인정보 보호법」 제17조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다. 제4조(개인정보처리 위탁)① 회사는 원활한 개인정보 업무처리를 위하여 다음과 같이 개인정보 처리업무를 위탁하고 있습니다.수탁사처리위탁 업무 내용스파크플러스사무실 관리메이크플로우빌링 포털의 개발 유지보수토스페이먼츠카드결제서비스NHN KCP카드결제서비스코리아포트원카드결제서비스효성에프앰에스자동이체서비스 제공 및 자동이체 동의 사실 통지나이스평가정보고객 본인 확인 서비스Freshworks Inc.고객 문의 및 안내 관리 플랫폼 운영salesforce.com incCRM 플랫폼 운영Infobip알림 서비스Twilio알림 서비스(주)마이다스인채용홈페이지 및 채용관리 전산시스템의 운영 및 관련 민원처리베네피아복지몰 위탁 운영휴넷임직원 교육 위탁 운영② 개인정보처리 위탁 중 국외에서 처리하는 위탁업무는 아래와 같습니다.수탁업체정보관리책임자 및 연락처이전목적이전되는 개인정보 항목이전되는 국가이전일시 및 방법개인정보이용기간Salesforce.com inc.Data Protection Officer / privacy@salesforce.com홍보 및 마케팅 관리 도구 사용성명, 회사명, 산업군, 이메일, 부서명, 직함, 휴대 전화 번호, 산업군, 회사 규모, 문의사항미국서비스 이용 시점에 네트워크를 통한 전송위탁업무 종료 시까지Freshworks Inc.Data Protection Officer / dpo@freshworks.comOpsNow360 서비스의 기술 지원, 서비스 관련 불만처리 도구 사용이메일, 회사명, 휴대 전화 번호, 기술지원 요청 사항미국서비스 이용 시점에 네트워크를 통한 전송위탁업무 종료 시까지InfobipPersonal Information Management Team / ritesh.menon@infobip.comAlertNow Notification 서비스의 SMS / Kakao 발송 기능 도구 사용휴대 전화 번호영국서비스 이용 시점에 네트워크를 통한 전송위탁업무 종료 시까지TwilioIntegrated support team / support@twilio.comAlertNow Notification 서비스의 SMS / Kakao 발송 기능 도구 사용휴대 전화 번호미국서비스 이용 시점에 네트워크를 통한 전송위탁업무 종료 시까지③ 회사는 위탁계약 체결시 「개인정보 보호법」 제26조에 따라 위탁업무 수행목적 외 개인정보 처리금지, 기술적․관리적 보호조치, 재위탁 제한, 수탁자에 대한 관리․감독, 손해배상 등 책임에 관한 사항을 계약서 등 문서에 명시하고, 수탁자가 개인정보를 안전하게 처리하는지를 감독하고 있습니다.④ 위탁업무의 내용이나 수탁자가 변경될 경우에는 지체없이 본 개인정보 처리방침을 통하여 공개하도록 하겠습니다. 제5조(정보주체와 법정대리인의 권리•의무 및 그 행사방법) ① 정보주체는 베스필글로벌 주식회사에 대해 언제든지 개인정보 열람·정정·삭제·처리정지 요구 등의 권리를 행사할 수 있습니다. ② 제1항에 따른 권리 행사는 회사에 대해 「개인정보 보호법」 시행령 제41조제1항에 따라 서면, 전자우편, 모사전송(FAX) 등을 통하여 하실 수 있으며 회사는 이에 대해 지체 없이 조치하겠습니다. ③ 제1항에 따른 권리 행사는 정보주체의 법정대리인이나 위임을 받은 자 등 대리인을 통하여 하실 수 있습니다.이 경우 “개인정보 처리 방법에 관한 고시(제2020-7호)” 별지 제11호 서식에 따른 위임장을 제출하셔야 합니다. ④ 개인정보 열람 및 처리정지 요구는 「개인정보 보호법」 제35조 제4항, 제37조 제2항에 의하여 정보주체의 권리가 제한될 수 있습니다. ⑤ 개인정보의 정정 및 삭제 요구는 다른 법령에서 그 개인정보가 수집 대상으로 명시되어 있는 경우에는 그 삭제를 요구할 수 없습니다. ⑥ 회사는 정보주체 권리에 따른 열람의 요구, 정정·삭제의 요구, 처리정지의 요구 시 열람 등 요구를 한 자가 본인이거나 정당한 대리인인지를 확인합니다. 제6조(개인정보의 안전성 확보 조치)회사는 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취하고 있습니다. 1. 정기적인 자체 감사 실시개인정보 처리 관련 안정성 확보를 위해 정기적으로 자체 감사를 실시하고 있습니다. 2. 개인정보 처리 직원의 최소화 및 교육개인정보를 처리하는 직원을 지정하고 담당자에 한정시켜 최소화 하여 개인정보를 관리하는 대책을 시행하고 있습니다. 3. 내부관리계획의 수립 및 시행개인정보의 안전한 처리를 위하여 내부관리계획을 수립하고 시행하고 있습니다. 4. 해킹 등에 대비한 기술적 대책회사는 해킹이나 컴퓨터 바이러스 등에 의한 개인정보 유출 및 훼손을 막기 위하여 보안프로그램을 설치하고 주기적인 갱신·점검을 하며 외부로부터 접근이 통제된 구역에 시스템을 설치하고 기술적/물리적으로 감시 및 차단하고 있습니다. 5. 개인정보의 암호화이용자의 개인정보는 비밀번호는 암호화 되어 저장 및 관리되고 있어, 본인만이 알 수 있으며 중요한 데이터는 파일 및 전송 데이터를 암호화 하거나 파일 잠금 기능을 사용하는 등의 별도 보안기능을 사용하고 있습니다. 6. 접속기록의 보관 및 위변조 방지개인정보처리시스템에 접속한 기록을 최소 1년 이상 보관, 관리하고 있으며,다만, 5만명 이상의 정보주체에 관하여 개인정보를 추가하거나, 고유식별정보 또는 민감정보를 처리하는 경우에는 2년이상 보관, 관리하고 있습니다. 또한, 접속기록이 위변조 및 도난, 분실되지 않도록 보안기능을 사용하고 있습니다. 7. 개인정보에 대한 접근 제한개인정보를 처리하는 데이터베이스시스템에 대한 접근권한의 부여,변경,말소를 통하여 개인정보에 대한 접근통제를 위하여 필요한 조치를 하고 있으며 침입차단시스템을 이용하여 외부로부터의 무단 접근을 통제하고 있습니다. 8. 문서보안을 위한 잠금장치 사용개인정보가 포함된 서류, 보조저장매체 등을 잠금장치가 있는 안전한 장소에 보관하고 있습니다. 9. 비인가자에 대한 출입 통제개인정보를 보관하고 있는 물리적 보관 장소를 별도로 두고 이에 대해 출입통제 절차를 수립, 운영하고 있습니다. 제7조(개인정보 자동 수집 장치의 설치•운영 및 거부에 관한 사항)① 회사는 이용자에게 개별적인 맞춤서비스를 제공하기 위해 이용정보를 저장하고 수시로 불러오는 ‘쿠키(cookie)’를 사용합니다.② 쿠키는 웹사이트를 운영하는데 이용되는 서버(http)가 이용자의 컴퓨터 브라우저에게 보내는 소량의 정보이며 이용자들의 PC 컴퓨터내의 하드디스크에 저장되기도 합니다.가. 쿠키의 사용 목적 : 이용자가 방문한 각 서비스와 웹 사이트들에 대한 방문 및 이용형태, 인기 검색어, 보안접속 여부, 등을 파악하여 이용자에게 최적화된 정보 제공을 위해 사용됩니다.나. 쿠키의 설치•운영 및 거부 : 웹브라우저 상단의 도구>인터넷 옵션>개인정보 메뉴의 옵션 설정을 통해 쿠키 저장을 거부 할 수 있습니다.다. 쿠키 저장을 거부할 경우 맞춤형 서비스 이용에 어려움이 발생할 수 있습니다. 제8조 (개인정보 보호책임자) ① 베스핀글로벌 개인정보 처리에 관한 업무를 총괄해서 책임지고, 개인정보 처리와 관련한 정보주체의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다. ▶ 개인정보 보호책임자 성명 이학진 직책 CPO / CISO 직급 실장 연락처 1688-1280, internalsec_bgk@bespinglobal.com ※ 개인정보 보호 담당부서로 연결됩니다. ② 정보주체께서는 베스필글로벌 주식회사 의 서비스(또는 사업)을 이용하시면서 발생한 모든 개인정보 보호 관련 문의, 불만처리, 피해구제 등에 관한 사항을 개인정보 보호책임자 및 담당부서로 문의하실 수 있습니다. 베스필글로벌 주식회사 은(는) 정보주체의 문의에 대해 지체 없이 답변 및 처리해드릴 것입니다. 제9조(개인정보 열람청구) 정보주체는 「개인정보 보호법」 제35조에 따른 개인정보의 열람 청구를 아래의 부서에 할 수 있습니다. 회사는 정보주체의 개인정보 열람청구가 신속하게 처리되도록 노력하겠습니다. ▶ 개인정보 열람청구 접수·처리 부서 부서명 사내보안팀 연락처 1688-1280, internalsec_bgk@bespinglobal.com 제10조(권익침해 구제방법)정보주체는 개인정보침해로 인한 구제를 받기 위하여 개인정보분쟁조정위원회, 한국인터넷진흥원 개인정보침해신고센터 등에 분쟁해결이나 상담 등을 신청할 수 있습니다. 이 밖에 기타 개인정보침해의 신고, 상담에 대하여는 아래의 기관에 문의하시기 바랍니다. 1. 개인정보분쟁조정위원회 : (국번없이) 1833-6972 (www.kopico.go.kr)2. 개인정보침해신고센터 : (국번없이) 118 (privacy.kisa.or.kr)3. 대검찰청 : (국번없이) 1301 (www.spo.go.kr)4. 경찰청 : (국번없이) 182 (ecrm.cyber.go.kr)「개인정보보호법」제35조(개인정보의 열람), 제36조(개인정보의 정정·삭제), 제37조(개인정보의 처리정지 등)의 규정에 의한 요구에 대 하여 공공기관의 장이 행한 처분 또는 부작위로 인하여 권리 또는 이익의 침해를 받은 자는 행정심판법이 정하는 바에 따라 행정심판을 청구할 수 있습니다.※ 행정심판에 대해 자세한 사항은 중앙행정심판위원회(www.simpan.go.kr) 홈페이지를 참고하시기 바랍니다. 제11조(개인정보 처리방침 변경)① 이 개인정보처리방침은 2023년 7월 11일부터 적용됩니다.② 이전의 개인정보 처리방침은 아래에서 확인하실 수 있습니다.– 이전 이력보기(2023.02.26) 2023년 07월 11일
BigQuery에서 CARTO를 이용한 ML 워크플로 구축 구글 인사이트 by Miyeon. Jo 2023년 06월 30일 구글 PS1팀 이진오목차개요CARTO Workflows 소개CARTO 워크플로로 BigQuery ML 잠금 해제1. 개요클라우드 네이티브 분석의 범위를 더 넓은 사용자 기반으로 확장하기 위해 BigQueryML을 파트너인 CARTO 의 혁신적인 시각적 분석 도구와 함께 사용하는 방법을 살펴보겠습니다.2. CARTO WorkflowsCARTO Workflows를 사용하면 구성 요소와 데이터 소스를 드래그 앤 드롭하여 분석을 시각적으로 디자인할 수 있습니다. 그러면 워크플로가 자동으로 SQL로 컴파일되고 BigQuery로 푸시다운됩니다. 사용자는 BigQuery SQL 및 해당 확장 프로그램의 모든 기능을 사용하여 정교한 분석 워크플로를 설계, 실행, 자동화, 공유할 수 있습니다.전체 분석 파이프라인을 생성 및 시각화하고, 개별 단계를 실행하고, 필요한 경우 디버그할 수 있습니다. Workflows에서 생성된 모든 것은 기본적으로 BigQuery에서 계산됩니다. 도구의 단순성 덕분에 팀 전체에서 분석을 더 폭넓게 채택하고 온보딩을 더 빠르게 할 수 있으므로 더 많은 비전문 사용자 집단을 위한 고급 ML 기능을 사용할 수 있습니다.3. CARTO 워크플로로 BigQuery ML 잠금 해제BigQueryML 에서 사용할 수 있는 ARIMA 제품군을 기반으로 하는 모델을 사용하여 소비자 브랜드 카테고리의 일일 매장 판매를 예측하는 워크플로를 구축합니다.3-1. 1단계 – 데이터 입력BigQuery에 대한 기본 연결을 통해 CARTO Data Explorer를 통해 이 데이터 세트에 액세스하고 데이터 세트를 Workflows 캔버스로 드래그하기만 하면 됩니다.[그림 2]만약 [그림 2]와 같이 클러스터의 평균 CPU 사용률이 권장 한도인 70% 보다 낮고, hottest node의 CPU 사용률은 거의 100%와 같이 실행될 경우에는, hot tablet을 확인해 볼 필요가 있습니다. 이와 같이 평균 node와 hottest node 사이의 CPU 사용률의 큰 차이는 hot spot의 강력한 표시라고 볼 수 있습니다.3-2. 2단계 – 데이터 준비일일 주류 판매의 모든 트랜잭션이 있으므로 매장별, 일별 트랜잭션을 그룹화해야 합니다. 결과는 각 판매 지점에 대한 단일 일일 판매 가치를 제공합니다.3-3. 3단계 – 모델 학습 필터우리 모델의 마감일은 2020-06-01입니다. 이전 일일 데이터는 모델을 교육하는 데 사용됩니다. 이렇게 하려면 Simple_Filter. 또한 1년 간의 과거 데이터로 예측할 예정이므로 Simple_Filte r 2019-06-01 날짜를 추가로 적용합니다.그런 다음 데이터 세트에서 원하는 열을 선택하고 정렬하여 최신 데이터만 표시합니다.3-4. 4단계 – ARIMA 모델 훈련단일 쿼리에서 1802개의 매장에 대한 변수를 사용하여 ARIMA 모델로 데이터를 10분 이내에 교육했습니다. CREATE_MODELBigQuery의 명령문을 사용합니다 . 미국 공휴일이 선택되었습니다. 빈도는 매일이며 다양한 계절성을 고려합니다. 계수 추정 및 매개변수 선택 작업은 BigQueryML에 맡깁니다. 워크플로에 정의된 BigQuery 옵션은 다음과 같습니다.3-5. 5단계 – 예측우리는 또한 ML.FORECAST일일 판매 예측을 하는 데 사용합니다. 예측 값에 대한 입력을 선택하고 신뢰 구간도 설정할 수 있습니다. 이 프로세스는 새로 훈련된 모델을 사용하여 설정된 지평에 따라 미래를 예측합니다. 라는 열도 추가합니다 index(CONCAT DATE WITH STORE NUMBER). 이 열은 예측 데이터를 실제 값과 결합하여 결과를 비교하는 데 사용됩니다.3-6. 6단계 – 예측 저장이 마지막 단계에서는 예측 결과를 BigQuery 테이블에 저장합니다. 이러한 결과를 추가로 분석하거나 CARTO Builder를 사용하여 출력을 시각화할 수 있습니다. 출처https://cloud.google.com/blog/products/data-analytics/building-ml-workflows-in-bigquery-the-easy-way-without-code?hl=en 2023년 06월 30일
Cloud Bigtable Hotspot 제거 구글 인사이트 by Miyeon. Jo 2023년 06월 22일 구글 PS1팀 황선아목차개요Cloud Bigtable Hot TabletHot Tablet 데이터 사용 사례문제가 있는 row key 식별분 단위 세분화로 핫스팟 관찰클러스터 내에서 문제가 있는 테이블 식별1. 개요Cloud Bigtable(이하 Bigtable)의 성능이 저하될 수 있는 요인은 여러 가지가 있습니다. 다양한 성능 문제를 해결하기 위해 bigtable은 클러스터에서 hot tablet을 식별하고 관찰할 수 있는 기능을 제공합니다. 본 글에서는 bigtable의 hot tablet을 식별하는 방법과 제거하는 방법에 대해서 사용 사례를 통해 설명드리겠습니다.Cloud Bigtable(이하 Bigtable)의 성능이 저하될 수 있는 요인은 여러 가지가 있습니다. 다양한 성능 문제를 해결하기 위해 bigtable은 클러스터에서 hot tablet을 식별하고 관찰할 수 있는 기능을 제공합니다. 본 글에서는 bigtable의 hot tablet을 식별하는 방법과 제거하는 방법에 대해서 사용 사례를 통해 설명드리겠습니다.2. Cloud Bigtable Hot TabletBigtable의 테이블은 쿼리 워크로드의 균형을 맞추기 위해 tablet이라는 연속 행 블록으로 샤딩됩니다. 각 tablet은 bigtable의 각 노드와 연결되며, tablet 행 작업은 노드에서 수행됩니다. 성능, 확장성을 최적화하기 위해 액세스 패턴을 기반으로 tablet이 분할되거나 다른 노드로 이동하며, 사용자 액세스 패턴에 따라 tablet이 노드 간에 분할 및 재조정됩니다.Hot tablet은 노드와 연결된 다른 tablet보다, 지나치게 많은 CPU를 사용하는 tablet입니다. Hot tablet은 특정 데이터 포인트에 대한 예상치 못한 많은 양의 요청 또는 초기 스키마 설계 중 고르지 않은 테이블 모델링으로 인해 발생할 수 있습니다. 이 불균형한 노드 사용은 더 높은 대기 시간 및 복제 지연을 유발할 수 있으며, 이는 hot spot이라고 표현합니다. 이 경우에 사용할 수 있는 완화 기술에 대해 알아보겠습니다.3. Hot Tablet 데이터 사용 사례3-a. 문제가 있는 row key 식별[그림 1][그림 1]과 같이 몇 시간 동안 P99 지연 시간이 증가한 경우가 있다고 가정해 봅시다. 이는 CPU 초과 사용으로 인해 발생할 수 있으며, 워크로드가 클러스터의 권장 사용 제한을 초과함을 의미합니다. CPU 초과 사용률은 일반적으로 클러스터가 과소 프로비저닝되었음을 의미하며, 클러스터에 수동으로 더 많은 노드를 추가하거나 자동 확장을 사용하여 노드를 자동으로 추가하여 해결할 수 있습니다. CPU 초과 사용이 근본적인 문제인지 확인하기 위해 이 클러스터의 CPU 사용률을 살펴볼 필요가 있습니다.[그림 2]만약 [그림 2]와 같이 클러스터의 평균 CPU 사용률이 권장 한도인 70% 보다 낮고, hottest node의 CPU 사용률은 거의 100%와 같이 실행될 경우에는, hot tablet을 확인해 볼 필요가 있습니다. 이와 같이 평균 node와 hottest node 사이의 CPU 사용률의 큰 차이는 hot spot의 강력한 표시라고 볼 수 있습니다.1) Hot Tablet 확인다음을 사용하여 hot tablet 목록을 확인할 수 있습니다.Google Cloud CLICloud Bigtable Admin APICloud Bigtable 클라이언트 라이브러리Google Cloud CLI를 사용하기 위해서는 gcloud CLI를 설치해야 합니다.특정 클러스터의 hot tablet 목록을 보려면, Cloud Shell 또는 로컬 터미널 창에서 hot-tablets list 명령어를 실행합니다.Unsetgcloud bigtable hot-tablets list CLUSTER_ID –instance INSTANCE_ID 다음을 바꿉니다.CLUSTER_ID: 클러스터의 영구 식별자INSTANCE_ID: 인스턴스의 영구 식별자Hot tablet은 CPU 사용량을 기준으로 내림차순으로 출력되며, 출력 예시는 아래와 같습니다.TABLECPU_USAGESTART_TIMEEND_TIMESTART_KEYEND_KEYtest-data89.32021-12-14T01:19:57+00:002021-12-14T01:20:57+00:00user432958user433124test-data22.82021-12-14T01:04:59+00:002021-12-14T01:20:57+00:00user312932user312932\000test-data20.92021-12-14T01:18:56+00:002021-12-14T01:20:56+00:00user592140user592192TABLE : Hot tablet과 연결된 테이블의 ID입니다.CPU_USAGE : 1분 간격으로 Hot tablet과 연결된 노드의 평균 CPU 사용률을 백분율로 표시합니다. 이 비율은 시작 시간부터 종료 시간까지 쓰기 CPU와 읽기 CPU의 합계의 평균입니다.START_TIME : Hot tablet 기간의 시작 시간입니다.END_TIME :Hot tablet 기간의 종료 시간입니다.START_KEY : Hot tablet의 첫 번째 row key입니다.END_KEY : Hot tablet의 마지막 row key입니다.2) Hot Spot 해결위의 예시에서 확인되는 hot spot을 해결하기 위해서는 두 가지 방법을 고려할 수 있습니다.격리/조절할 다운스트림 유저/워크로드 식별Row key 재설계 위의 두 가지 방법에 대한 자세한 설명은 아래와 같습니다.격리/조절할 다운스트림 유저/워크로드 식별 : user432958에서 user433124까지(출력 첫 번째 항목) row key에 해당하는 사용자와 연결된 트래픽을 격리하거나 조절할 수 있습니다. 또한, 출력 두 번째 항목은 user312932에서 user312932\000까지 단일 행만 표시됩니다. 이는 가능한 가장 작은 tablet 크기입니다. 단일 row key에서 과도하게 쓰기/읽기는 단일 행 tablet으로 이어집니다. 이 문제를 해결하기 위해 user312932와 관련된 트래픽을 격리하거나 조절하여 hot tablet을 완화할 수 있습니다. Row key를 재설계하여 테이블 쿼리가 row key 공간 전체에, 보다 고르게 분산되도록 하여 로드 밸런싱 및 tablet 분할을 개선할 수 있습니다. <user-id>를 row key로 사용하면 모든 사용자 관련 정보가 단일 행에 저장됩니다. 이는 관련 없는 데이터를 함께 그룹화하고 잠재적으로 여러 워크플로가 동일한 행에 액세스하도록 하는 안티 패턴입니다. 고려해야 할 대체 row key 디자인은 <workload-type>:<user-id> 또는 <workload-type>:<user-id>:<timestamp>입니다.3-b. 분 단위 세분화로 Hot spot 관찰1) Key VisualizerHot tablet 목록을 key visualizer의 히트맵과 함께 사용할 수 있습니다. Key visualizer는 키 공간 액세스 패턴을 전체적으로 관찰하는 데 적합한 도구입니다.Key visualizer에서 히트맵을 검사한 후 특정 hot spot을 추가로 살펴볼 수 있습니다. Key visualizer는 몇 주 동안 실행되며, hot spot의 데이터가 15분 간격으로 집계됩니다. 또한 여러 태블릿이 같은 key visualizer 키 공간에 결합될 수 있습니다.2) 수명이 짧은 단기 Hot Spot그러나 좁은 key 범위에서 burst CPU 사용하는 경우에는 key visualier로 진단이 어려울 수 있습니다. 이 경우는 수명이 짧은 hot spot을 발생시키고 P99 대기시간을 높아지게 할 수 있으며, 이러한 유형의 hot spot은 key visualizer로 진단하기 어려울 수 있습니다. Key visualizer의 최소 세분성이 15분이며 일시적인 hot spot을 표시하지 않을 수 있기 때문입니다. Key visualizer는 지속적이고 수명이 긴 hot spot을 식별하는 데 탁월한 도구이지만, 보다 세분화된 burst 사용을 식별하지 못할 수 있습니다.[그림 3][그림 4][그림 3]과 같이 지연 시간이 급증하여 hottest node의 CPU 사용률을 확인했으나, [그림 4]와 같이 CPU 사용률이 권장량보다 낮은 경우가 있을 수 있습니다. 이는 수명이 긴 hot spot은 없음을 나타내지만 키 범위 내에서 일시적인 hot spot을 나타낼 수 있습니다. 이러한 경우에는 key visualizer에서 진단이 어려울 수 있습니다.[그림 5][그림 5]와 같이 단기 hot spot이 발생한 경우에는 key visualizer에서 확인되지 않을 수 있습니다. 만약 단기 hot spot이 발생한 경우에는 3-a에서의 gcloud 명령어를 통해 단기 hot spot을 식별할 수 있습니다.3-c. 클러스터 내에서 문제가 있는 테이블 식별만약 하나의 클러스터에 여러 개의 테이블을 가지고 있는 경우에는 key visualizer를 통해 hot spot을 식별하기 어려울 수 있습니다. Key visualizer는 테이블 수준에서 작동하기 때문입니다. 따라서 테이블이 여러 개 있는 클러스터의 경우에는, 클러스터 수준에서 작동하는 3-a에서의 gcloud 명령어를 통해 CPU 사용량이 많은 테이블을 식별할 수 있습니다. 출처https://cloud.google.com/bigtable/docs/hot-tablets?hl=enhttps://cloud.google.com/blog/products/databases/hotspots-and-performance-debugging-in-cloud-bigtable?hl=en 2023년 06월 22일
VPC SC의 Policy 기능과 BigQuery 데이터 보호 구글 인사이트 by Miyeon. Jo 2023년 06월 08일 VPC Service Control의 Ingress/Egress Policies를 이용한 세분화된 BigQuery 접근 제어구글 PS1팀 손지황VPC Service Controls에 대하여전통적인 보안 측면에서 Firewall은 TCP/IP, UDP 기반의 네트워크 통신에 대한 보안 기능을 제공하였습니다. 그리고 GCP 역시 Firewall 기능을 제공하고 있고, 올해 기능이 추가된 새로운 버전 런칭도 하였지만, VPC내 각종 Resource에 대한 API를 효율적으로 통제하고 보호하기에는 다른 성격의 보호 서비스가 필요합니다. VPC Service Control은 GCP Resource에 대한 API 통신을 효율적으로 통제하기에 적합한 서비스로, GCP API 전용 방화벽으로 불러도 될만큼 API 통신을 쉽고 세밀하게 제어할 수 있습니다. Perimeter로 불리는 보호 영역을 설정하고(어디서), 보호 대상 서비스 지정(무엇을), Perimeter를 기준으로 Ingress / Egress 정책을 설정하는것만으로(어떻게) GCP 내 Resource에 대해 효과적으로 보호 할 수 있습니다.Perimeter의 통과 조건인 Ingress/Egress PoliciesAccess Level은 IP 기반, 지리적 위치 그리고 GCP 계정(User, Service Account) 등 각종 조건의 조합으로 구성되는 만큼 그 자체만으로도 훌륭한 설정이 가능합니다. 따라서 초기 VPC Service Control은 Perimeter와 Perimeter 간의 관계인 Bridge, 그리고 Perimeter 통과 조건에는 Access Level을 이용하여 구성하도록 설계되었습니다. 하지만 Perimeter 간의 관계를 설정할때 사용하였던 Bridge는 같은 ORG내에 있는 Project에만 설정이 가능하다는 제약이 있었고, 그래서 보조적으로 타 ORG에 있는 Project와 관계를 설정할때는 Ingress/Egress Policy를 통해 Project를 허용하는 설정을 해야만 설정이 가능하였습니다. 거기에 Perimeter를 보호하는데 있어 Access Level과 Bridge만으로는 기본적인 설계가 가능하지만 그 조합은 단순했고, 그보다 더 상세한 조건으로 허용 조건을 설정한다는것은 불가능하다는 문제가 있었습니다. 그래서 GCP는 Perimeter 통과 조건을 Ingress/Egress Policies를 기본 조건으로 변경하고, 기존의 Access Level 기반의 설정은 Optional 한 설정으로 변경하였습니다. 이것이 가능한것은 기존의 Access Level 설정 옵션은, 사실 Perimeter로 들어오는 Ingress API 요청에 대해 허용 Access Level을 설정함으로 Perimter를 보호했던거고, 이는 Ingress Policy에 Access Level에 대해 모든 것을 허용함과 같은 의미이기 때문입니다. 즉, 기존의 Access Level이 Optional로 변경되었지만, Ingres Policy 설정을 통해 동일한 효과를 가질 수 있으므로 특별한 경우가 아니면 사용할 일이 없게 되었으며, 이제 Ingress/Egress Policies를 통해 기존과 동일한 수준 또는 더 상세하게 통과 조건을 설정할 수 있게 된것입니다. 이를 이용해서 BigQuery의 데이터를 접근하는, 부여된 권한과 같은 조건에 따라 보호할 수 있습니다.Ingress/Egress PolicyIngress/Egress Policy는 Perimeter를 기준으로 방향에 따라 From/To 설정을 하게 됩니다. GCP에 대한 API는 어디서 어떤 형태로든 호출될 수 있으므로 그에 맞게 설정을 진행합니다.Ingress PolicyIngress Policy는 From에 Identity와 Source, To는 Project와 Service를 설정합니다.Identity: ‘Any Identity’, ‘Any User Account’, ‘Any Service Account’를 통해 각각 제한 없음, 모든 유저, 모든 서비스 어카운트에 대해 지정을 할 수 있습니다. 또 ‘Selected identities’를 통해 직접 허용할 유저와 서비스 어카운트 각각을 입력할 수 있습니다. GCP에 접근하는 환경이 다수의 유저만 접근할 경우 Any User Account를 선택할 수 있지만, 일부 유저만 사용하는 환경이라면 Selected identities를 통해 제한을 하는것이 보안을 위한 선택입니다. 다만, 보안을 위해 Any를 선택할 수 없고, Selected identities를 통해 입력할 유저가 많다면 Any Identity를 선택하고, 다음 Source에 적절한 Access Level을 지정합니다. Policy에 다수의 유저가 입력되면 스트링 형태로 표현되므로 관리의 어려움이 있습니다. 이럴때는 Access Level을 통해 User, User + IP Range 형태로 제한을 거는것이 더 효율적입니다.Source: API가 호출되는 위치 입니다. ‘All Sources’, ‘Access Level’, ‘Projects’, ‘VPC Networks’를 선택할 수 있으며, 보통 ‘Projects’ 또는 ‘Access Level’로 설정을 하게 됩니다. Project간 API 통신에는 Projects를 선택하게 되고, 앞서 이야기한것처럼 Identity로 설정하기 어려운 경우 Access Level을 통해 제한을 걸 수 있습니다.Project: ‘All projects’, ‘Selected projects’를 선택할 수 있습니다. 보통 All projects로 Perimeter에 설정된 Project 모두에 대해 공통 설정을 하는것이 일반적이나, Perimeter에 Project가 복수로 설정된 경우 Selected projects를 선택해 각각에 대해 설정할 수 있습니다.Service: Policy의 가장 중요한 설정입니다. 어떠한 Service(Resource) API를 허용할지 선택할 수 있습니다. ‘All services’ 또는 ‘Selected services’를 선택할 수 있습니다. ‘All services’를 선택할 경우 Perimeter로 보호받는 모든 서비스에 대한 API가 허용됩니다. 하지만 VPC SC의 보다 상세한 설정을 위해서는 ‘Selected services’를 선택하고, 허용할 API와 Method를 제한하게 됩니다. Method는 각 API에서 호출하는 Method이며, GCP는 보통 각 리소스에 대해 CRUD Method를 각각 제공하므로 이를 통해 API에 대한 상세한 제어가 가능합니다.Egress PolicyEgress Policy는 From에 Identity, To는 GCP냐 외부 리소스냐에 따라 달라지는데, 보통 GCP에 대한 통신을 보호하므로 GCP 기준으로 Project와 Services를 설정하게 됩니다.Identity, Project, Services는 Ingress와 동일한 방식으로 옵션을 설정 하게 됩니다.BigQuery에서 Query 수행VPC Service Control을 사용해 BigQuery Data를 보호하기 위해서는 BigQuery에서 Query를 수행 시 어떠한 API 동작이 수행되는지 이해할 필요가 있습니다. 이는 Query 내용과 실행 위치에 따라 다양한 조합으로 수행이 되는데, 특정 케이스에 대한 이해가 있으면 다른 케이스에 대한 동작을 예상해볼 수 있습니다.다음은 특정 프로젝트(Src Prj.)에서 다른 프로젝트(Tgt Prj.)에 있는 BQ Data에 대한 Select Query를 실행했을때 프로젝트 간 발생하는 내부 호출에 대한 흐름입니다.위 그림을 순서대로 살펴보면사용자는 Source Project의 GCP Console에에서 Select Query를 실행합니다. 이때 데이터를 조회하는 대상은 Target Project의 BQ에 저장된 데이터 입니다. 이때 사용자는 GCP Console에서 `Run Query`를 클릭 했을 뿐이지만 실제로는 사용자 위치에서 Source Project로 Query 실행을 한것에 대한 API Method가 내부적으로 생성됩니다.(Source Project의 Perimeter 통과)Source Project는 Target Project로 GCP 내부적인 BigQuery API 호출을 생성합니다. 이 때 사용하는 Method는 BigQuery Job을 생성하는 bigquery.jobs.create와 실제 데이터를 요청하는 bigquery.tables.getData 입니다.GCP는 사용자가 실제 Target Project에 접근이 가능한지 확인하기 위한것으로 추정되는 API 호출을 하나 더 생성합니다. 이는 사용자 위치에서 직접 Target Project로 2번과 동일한 API Method를 호출함으로 알 수 있습니다. ※ 만약 최초 호출이 사용자가 아닌 Source Project의 VPC 내에서 이루어졌다면, 다른 흐름이 나타날것입니다.Target Project에서 데이터를 가져오는 BigQuery Job 수행이 완료되면, 반대로 Source Project에 BigQuery Job을 생성하는 요청을 하게 됩니다.확보된 데이터가 Source Project의 GCP Console에서 표시됩니다.위 케이스를 보면 BigQuery에서 Query를 수행 시 내부적으로 API 통신이 이루어지고 있음을 알 수 있습니다. 따라서 상황별 호출되는 API Method를 알고 있으면 BigQuery를 효율적으로 보호할 수 있습니다.BigQuery에서 Project간 단방향 조회 설정GCP를 이용해 구축한 시스템은 초기에는 VPC SC의 기본적인 기능만으로도 BigQuery의 Data를 안전하게 보호할 수 있습니다. 하지만 시스템이 확장되면서 GCP 내외적으로 데이터에 접근하는 다양한 케이스가 있고, 케이스별로 제약조건이 상이할 수 있습니다. 경우에 따라 기존 Bridge로는 커버가 안되는 상황이 발생하게 되는데, VPC SC 에서 Policy를 사용하면 이런 상황에 적절한 설정으로 BigQuery 데이터를 계속 보호할 수 있습니다. 그리고 이런 케이스 중 하나가 바로 BigQuery 단방향 조회 케이스 입니다.케이스 시나리오프로젝트 A와 B가 있고, A에서 B로 데이터 조회 쿼리를 날릴 수 있지만, B에서 A로는 차단해야하는 경우가 있다고 가정합니다.이는 프로젝트 A는 모든 데이터를 저장하는 곳이고, B는 데이터가 생성되는 프로젝트라고 했을때, A는 조회를 위해 B에 접근을 해야하지만, B는 여러 프로젝트로부터 각종 데이터가 수집되는 A의 데이터에 접근해서는 안됩니다. 즉 프로젝트마다 가지고 있는 데이터의 중요도로 인해 조회 방향을 설정하는 케이스로, 이를 권한으로 제어할 수 있지만, 관리자나 상위 권한을 가진 사람은 어쩔 수 없이 두 프로젝트 모두 권한을 가지는 예외 상황이 발생할 수 있습니다. 따라서 보다 강화된 보안을 위해서는 불필요한 API Method를 차단함으로 혹시라도 잘못된 방향으로 데이터를 조회하는 상황을 원천적으로 차단할 수 있다는 장점을 가지게 됩니다.VPC SC의 Policy 설정이런 단방향 조회 설정의 열쇠는 Service 설정에 Method 입니다. Project A와 Project B에 설정된 각각의 Perimeter의 Ingress/Egress Policy 설정에 Method 조정을 통해 이를 구현합니다.Project A에 대한 Perimeter의 Policy설정Ingress Policy From: Identities:ANY_IDENTITY Source > Projects = Project A To: Projects = Project B Services = Service name: bigquery.googleapis.com Service methods: bigquery.jobs.create Egress Policy From: Identities:ANY_IDENTITY To: Projects = Project B Service = Service name: bigquery.googleapis.com Service methods: 허용할 BigQuery API의 Method 설정 허용할 Method는 케이스마다 차이가 있어 명확하게 정의하기가 어렵습니다. 다만, 기초적인 Select만 수행한다고 가정한다면, 다음과 같은 Method만 허용해도 문제는 없습니다.BigQuery에서 Select 에 필요한 최소한의 Methodbigquery.jobs.createbigquery.tables.getbigquery.tables.getDataSelect에 필요한 권장 Methodbigquery.jobs.createbigquery.datasets.getbigquery.tables.getbigquery.tables.getDatabigquery.tables.getIamPolicybigquery.tables.list그 외 허용하는 수준에 따라 모든 Method를 열거나, 작업 범위에 따라 다음과 같은 Method를 선별하여 추가할 수 있습니다.BigQueryStorage.ReadRowsBigQueryStorage.FinalizeStreamBigQueryStorage.SplitReadStreamBigQueryStorage.BatchCreateReadSessionStreamsBigQueryStorage.CreateReadSessionbigquery.routines.listbigquery.routines.getbigquery.models.listbigquery.models.getMetadatabigquery.datasets.getbigquery.jobs.createbigquery.tables.listbigquery.tables.updatebigquery.tables.updateTagbigquery.tables.getbigquery.tables.getDatabigquery.tables.getIamPolicybigquery.tables.setCategory지원되는 Method 목록은 다음 링크에서 확인할 수 있습니다. Docs: Supported service method restrictionsProject B에 대한 Perimeter의 Policy설정Ingress Policy From: Identities:ANY_IDENTITY Source > Projects = Project B To: Projects = Project A Services = Service name: bigquery.googleapis.com Service methods: Project A의 Egress Policy에 허용한 Method와 동일 Egress Policy From: Identities:ANY_IDENTITY To: Projects = Project A Service = Service name: bigquery.googleapis.com Service methods: bigquery.jobs.create Project B는 A와 반대로 설정하게 됩니다. A의 Egress에서 허용한 Method가 B의 Ingress에 동일하게 설정되어야 합니다. 다만 BigQuery Job을 생성하는 Method의 경우 BigQuery 내부 구조상 두 프로젝트 모두 양방향으로 허용 되어야 합니다.BigQuery 보안과 관련된 MethodBigQuery에는 자체적인 보안 기능으로 column-level security와 row-level security가 있습니다. 해당 기능이 설정된 데이터를 조회시 bigquery.tables.getData와 별도로 추가 method가 필요합니다.Column-Level SecurityBigQuey는 Policy Tag를 사용하여 개인 정보 등의 민감한 데이터를 별도의 권한으로 관리할 수 있습니다. 그리고 다른 프로젝트에서 이 Policy Tag를 설정하고, 데이터가 있는 프로젝트에서 이 Policy Tag를 가져다 쓴다고 하면 Fine-Grained Reader라는 권한이 필요하게 되는데, 실제 데이터 질의 시 권한 확인을 위한 별도의 API 호출을 하게 됩니다.이때 사용하는 Method가 ‘fineGrainedGet’ 입니다. 이 Method 없이는 데이터 조회에 필요한 Method가 허용되고, 관련 IAM 권한이 있어도 절대 데이터에 접근할 수 없었습니다. Column-Level Security가 설정된 테이블에 접근할때는 다음 Method를 반드시 허용해 줘야합니다.datacatalog.categories.fineGrainedGetRow-Level Security최근까지 Row-Level Security가 적용된 테이블에 접근해야하는 경우, 해당 Method가 지원되지 않아 Policy를 All Method로 오픈하지 않고서는 설정이 불가능하였습니다. 하지만 이제 관련된 Method가 지원되어 Policy 설정으로도 Row-Level Security가 설정된 데이터에 대해서도 Method 제한과 동시에 접근이 가능해졌습니다.Method에 `getFilteredData`를 허용함으로 Row-Level Security에 설정된 테이블도 정상적으로 제어가 가능해졌습니다. 따라서 Row-Level Security가 설정된 테이블의 데이터를 조회한다면 다음 Method를 반드시 허용해줘야 합니다.bigquery.rowAccessPolicies.getFilteredData맺음말기존 VPC Service Control의 경우 Bridge는 Perimeter와 Perimeter를 동등한 Level로 맞추기 때문에, 허용하고 싶지 않는 Service도 허용하게 된다거나, Access Level만으로는 데이터에 대한 Read 권한만 제공하고 싶지만 CRUD 모두를 허용하게 되는 등 의도하지 않은 과도한 허용을 할 수 밖에 없었습니다. 하지만 Ingress/Egress Policy를 사용하게 되면 다양한 상황에서 최소한의 Method만 허용하여, 서비스에 영향을 주지 않으면서 보안적으로 안전한 시스템 환경을 구성할 수 있습니다. 각 케이스에 맞는 Method만 허용한다는 작업은 BigQuery 기능 각각에 대해 내부 동작 방식을 알아야만 설정할 수 있으므로 사실 쉽지 않은 작업입니다. 다만 보안에 대한 의지를 가지고, 최소 허용 후 기능 동작 시 발생하는 에러 로그를 가지고 분석을 하게 되면 분명 필요한 Method를 확인할 수 있습니다. 앞서 이야기 했지만 권한으로만 제어를 하기에는 예외적인 상황이 발생할 수 있으며, 시간이 지남에 따라 점차 추가로 부여되는 권한들로부터 작업의 편의성과 보안을 모두 가질 수 없습니다. 따라서 VPC SC를 이용하여 원천적으로 접근을 통제하는 방법이 필연적으로 같이 수행되어야 하므로, 각 케이스에 맞는 설정으로 안정된 서비스와 보안 모두를 가지시길 바랍니다. 참고문헌GCP VPC Service Controls Official Documents 2023년 06월 08일
시냅스엠 by Miyeon. Jo 2023년 05월 26일 시냅스엠 산업 분야미디어 국가대한민국 상품 및 서비스AWS옵스나우360 Company Overview 시냅스엠은 국내 최초 온라인 비디오 플랫폼 ‘위캔디오(WECANDEO)’를 서비스하는 동영상 전문 기업입니다. 위캔디오는 웹 사이트나 앱 서비스에서 동영상과 라이브 서비스를 운영하는 데 필요한 모든 도구를 제공하는 All-In-One 플랫폼입니다. 동영상 서비스 구축 및 배포, 관리 등을 위한 ‘VideoPack’과 라이브 스트리밍의 전 과정을 지원하는 ‘LivePack’으로 구성되어 있습니다. 특히 멜론 뮤직 어워드, 부산원아시아페스티벌, 하이원 서울가요대상 등 각종 대형 라이브 공연을 지원한 다수의 경험을 바탕으로 안정적인 라이브 서비스를 제공합니다. 국내외 광고 플랫폼과 연동되어 있어 광고로 인한 수익화가 가능하다는 점도 위캔디오만의 특장점입니다. 주요 고객사로는 멜론, iHQ, 뽀로로TV 등이 있으며 콘텐츠 및 엔터테인먼트부터 미디어, 금융, 교육, 공공기관까지 1,000개 이상의 기업들이 위캔디오를 사용하고 있습니다. Challenge 기존에는 위캔디오 시스템의 대부분을 온프레미스 환경에서 운영했습니다. IDC 서버를 직접 구매하고 시스템 엔지니어가 프로그램을 설치하고 관리했습니다. 하지만 비즈니스 규모가 점점 커지면서 서버와 인프라 관리 인력 수요가 급증했고, 특히 온프레미스 환경에서 라이브 서비스를 제공하는 데 있어 여러 가지 한계가 있었습니다. 자체 시스템만으로는 24시간 365일 안정적인 서비스를 지원하는 것이 어려웠고, 시스템에서 발생하는 이슈를 빠르게 대응하는 것 역시 매우 힘들었기 때문입니다. 그래서 더 효율적이고 안정적인 라이브 시스템을 구축하기 위해 AWS 도입을 결정했습니다. 내부적으로 클라우드 경험이 적다 보니 처음 AWS를 도입하고 사용하는 과정에서 필요한 정보를 찾는 것이 쉽지 않았습니다. 또한 클라우드 전환 과정에서도 예상보다 많은 시간과 비용이 소요되었습니다. 클라우드 전환은 꼭 필요하지만 체질을 완전히 바꾸는 일이기 때문에 처음에는 많은 시행착오를 겪을 수밖에 없다고 생각합니다. 하지만 이러한 시행착오가 자칫 잘못하면 기업의 존폐를 좌우할 수도 있습니다. 따라서 다양한 클라우드 전환 경험을 지닌 파트너가 반드시 필요했습니다. Solution “AWS의 가장 큰 장점은 글로벌 서비스가 굉장히 용이하다는 점입니다. 위캔디오를 이용하는 대부분의 고객사들은 동영상 서비스를 지원하는 플랫폼을 운영하기 때문에 글로벌 서비스에 대한 니즈가 많았는데요. AWS를 사용하면서 글로벌 서비스를 지원하는 부분에 있어 많은 문제가 해결되었습니다. AWS는 글로벌 시장에서 미디어 서비스를 제공하는 데 가장 최적화된 클라우드 플랫폼이라고 생각합니다.” – 시냅스엠 사업본부장 반동수 님 1) AWS 기반의 동영상 및 라이브 서비스 구축 동영상 서비스에 있어 고객사들이 가장 중요하게 생각하는 것은 바로 안정성입니다. 시냅스엠은 AWS Elemental MediaLive와 Amazon CloudFront를 도입함으로써 24시간 안정적인 라이브 서비스를 고객들에게 제공할 수 있게 되었습니다. 라이브 동영상 인코딩에 AWS Elemental MediaLive를, 글로벌 영상 송출과 트래픽 관리에는 Amazon CloudFront를 사용하고 있습니다. AWS 도입으로 미디어 서비스를 글로벌로 확장하는 일도 더욱 용이해졌습니다. 실제로 많은 고객사들이 AWS를 기반으로 한 위캔디오를 통해 국내뿐 아니라 해외에서도 24시간 동영상 및 라이브 콘텐츠를 진행하고 있습니다. AWS 도입 초기에는 기존의 온프레미스 환경에 일부 AWS 서비스를 도입해 사용하는 형태였습니다. 하지만 시간이 지나고 IDC 서버가 점점 노후화되기 시작하면서 이제는 모든 인프라를 AWS로 전환하고 있습니다. AWS Lambda, Amazon EC2, Amazon S3 등 다양한 서비스들을 점진적으로 늘려가고 있으며 지금은 대부분의 시스템을 AWS로 전환해 사용 중입니다. 내년에는 모든 인프라를 클라우드로 이전하는 ‘클라우드 원년’이 될 것으로 기대하고 있습니다. 2) 클라우드 파트너 베스핀글로벌 베스핀글로벌과의 파트너십을 통해 AWS 클라우드를 사용하는 데 있어 많은 도움을 받고 있습니다. 베스핀글로벌은 가격 할인 정책부터 크레딧 정보, 신기능 업데이트 등 꼭 필요하지만 직접 챙기기 어려운 부분들을 알려주었습니다. 그래서 본업에 집중하면서도 안정적이고 효율적으로 AWS를 사용하고 운영할 수 있었습니다. 모든 인프라를 AWS로 전환하는 과정에서도 베스핀글로벌의 클라우드 경험과 노하우를 바탕으로 한 조언 덕분에 예상치 못한 리스크를 줄이고 클라우드 전환에도 성공적으로 안착할 수 있었습니다. 또한 베스핀글로벌을 통해 멀티 클라우드 관리 플랫폼 옵스나우360(OpsNow360)을 도입해 클라우드 사용 데이터를 간편하게 관리하고 있습니다. Benefit “베스핀글로벌과는 2018년부터 인연을 맺고 있는데요. 베스핀글로벌은 클라우드를 넘어 미디어 고객사 영업, 공동 마케팅 등 여러 가지 측면에서도 시냅스엠이 성공할 수 있도록 많은 도움을 주고 있습니다. 실제로 베스핀글로벌을 통해 비디오 플랫폼 구축을 준비하는 고객사를 만나 위캔디오를 공급하는 등 좋은 성과도 나오고 있습니다. 그래서 저는 베스핀글로벌을 클라우드 파트너일 뿐 아니라 사업 파트너라고 생각합니다. 앞으로 베스핀글로벌과의 파트너십 범위를 넓히고 협력 관계를 더 공고히 해서 함께 성장할 수 있기를 기대합니다.” – 시냅스엠 사업본부장 반동수 님 1) 커뮤니케이션 비용 50% 절감 AWS를 사용하는 과정에서 궁금한 점이나 요청사항이 있을 때면 베스핀글로벌을 통해 문의하고 있습니다. 직접 연락해야 하는 수고를 덜고 더 빠르고 편하게 답변을 받을 수 있습니다. 본격적으로 AWS를 통해 위캔디오 서비스를 제공하기 시작하면서 AWS와 관련한 고객 문의사항도 많이 생겨났습니다. 이때도 역시 베스핀글로벌이 대신해서 AWS와 적극적으로 커뮤니케이션을 하며 지원해 주고 있습니다. 클라우드를 사용하면서 플랫폼 측과의 커뮤니케이션에 들어가는 비용도 효율화하는 것이 중요한데, 베스핀글로벌 덕분에 커뮤니케이션 비용도 약 50% 절감할 수 있었습니다. 2) 간편한 클라우드 자원 및 비용 관리 옵스나우360을 도입하기 전에는 AWS 콘솔에 직접 들어가 사용량 및 비용 정산 자료를 보곤 했습니다. 하지만 AWS 콘솔은 너무 복잡해서 비기술자가 보고 이해하기 매우 어려웠습니다. 반면 옵스나우360은 전반적인 사용자 인터페이스(UI)가 굉장히 쉽고 사용자 친화적으로 구성되어 있으며 리포트 기능도 훌륭합니다. 그래서 이제는 클라우드 관련 데이터들은 모두 옵스나우360을 통해 확인하고 있습니다. 옵스나우360을 사용함으로써 비용도 최적화하고 클라우드 환경을 더 쉽고 안정적으로 관리할 수 있게 되었습니다. 기업 입장에서는 클라우드 관리에 필요한 인적 자원 부담을 덜고, 직원들 입장에서는 관리 스트레스에서 해방된다는 장점도 있습니다. 이제는 옵스나우360이 없으면 업무에 불편사항이 많아질 것으로 예상됩니다. Market Overview 누구나 창작자가 되어 콘텐츠를 만들고 경제적 가치를 창출하는 ‘크리에이터 이코노미’ 시대가 도래했습니다. 소셜 미디어 플랫폼을 중심으로 많은 사용자들이 크리에이터의 콘텐츠를 소비하고, 브랜드는 크리에이터를 통해 상품을 홍보하고, 이를 기반으로 크리에이터는 수익을 얻는 구조입니다. 크리에이터 이코노미 시장은 2022년 2,500억 달러에서 2027년 4,800억 달러 규모로 성장할 전망입니다. 그러나 딜로이트에 따르면 최근 크리에이터들은 기존의 소셜 미디어 플랫폼을 넘어 사용자와 직접 소통할 수 있는 방법을 모색하는 추세라고 합니다. 즉, 크리에이터 자신만의 서비스를 만드는 움직임이 시작된 것인데요. 이러한 흐름은 기업이나 브랜드에서도 찾아볼 수 있습니다. 소셜 미디어를 통하지 않고 자사 사이트에서 콘텐츠를 직접 제공하는 것입니다. 이 과정에서 동영상 서비스 구축과 운영을 돕는 솔루션들이 주목받고 있습니다. 가장 대표적인 솔루션은 동영상 전문 기업 시냅스엠의 온라인 비디오 플랫폼 ‘위캔디오’입니다. 위캔디오는 자체 웹 사이트나 앱 서비스에서 동영상 및 라이브 서비스를 운영하는 데 필요한 모든 도구를 제공합니다. 동영상과 라이브 서비스에서 가장 중요한 요소는 바로 안정성인데요. 이를 위해 위캔디오는 모든 시스템을 클라우드로 전환하고 있으며, 클라우드 위에서 동영상 서비스는 물론 365일 24시간 안정적인 라이브 서비스를 제공 중입니다. 이 과정에서 시냅스엠은 베스핀글로벌과의 파트너십을 통해 클라우드를 더 스마트하게 사용하고 있습니다. 또한 클라우드 영역뿐 아니라 영업, 마케팅 등 비즈니스 영역에서도 긴밀하게 협업하며 사업 기회를 확대하고 있습니다. 시냅스엠 반동수 사업본부장은 베스핀글로벌을 ‘단순한 클라우드 파트너가 아닌 고객사의 성공을 돕는 비즈니스 파트너’라고 말합니다. 앞으로도 클라우드를 기반으로 더욱 빠르게 성장해 나갈 시냅스엠의 행보를 기대합니다. 문의하기 2023년 05월 26일
Airflow 2.4의 핵심 변경점 짚어보기 구글 인사이트 by Miyeon. Jo 2023년 05월 24일 목차개요Data-aware schedulingEasier management of conflicting python dependencies using the new ExternalPythonOperatorMore improvements to Dynamic Task MappingAuto-register DAGs used in a context manager (no more as dag: needed)Additional improvements개요문서 작성 시점 기준으로 Composer에서 제공하는 Airflow 버전 중 EOS 기간이 가장 많이 남은 버전이며, Data-aware의 기능이 처음 도입된 버전으로서 Data-aware를 소개함이 이 문서의 핵심 목표입니다.Data-aware란 시간 기반으로만 스케줄링 되던 Airflow에서 데이터 인식을 통한 DAG 스케줄링을 지원하는 기능을 말합니다. 현재로선 해당 기능이 출시(2022-09)된 지 얼마 되지 않아 강력하다고 볼 수 없지만 지원하기 이전의 파이프라인을 보다 다양하고 효율적인 구성을 구현하게 하는 개념이라 볼 수 있습니다.앞서 말씀드린 Data-aware 포함한 Airflow 2.4의 변경된 기능을 짚어보도록 합시다.Data-aware schedulingData-aware는 Airflow 내 특정 태스크에서 데이터셋을 업데이트할 때 새로운 DAG를 스케줄링할 수 있습니다. 해당 기능에 대해 자세히 말씀드리자면, DAG 생성 시 작고 독립적인 DAG를 만들어, 이를 큰 데이터 기반 워크플로우로 연결할 수 있음을 의미합니다. 현재 ExternalTaskSensor 나 TriggerDagRunOperator를 사용하고 계신다면, Data-aware 기능으로 대체하여 스케줄링을 효율적으로 관리 할 수 있습니다. 이해를 돕기 위해 아래 예시를 확인해 주세요, 먼저, `my_task`라는 작업이 `my-dataset`이라는 데이터셋을 생성하는 간단한 DAG를 작성해봅시다:from airflow import Dataset dataset = Dataset(uri='my-dataset') with DAG(dag_id='producer', ...) @task(outlets=[dataset]) def my_task(): ... 데이터셋은 URI로 정의됩니다. 이 데이터셋이 변경될 때마다 스케줄되는 두 번째 DAG(consumer)를 다음과 같이 작성할 수 있습니다:from airflow import Dataset dataset = Dataset(uri='my-dataset') with DAG(dag_id='dataset-consumer', schedule=[dataset]): ... 이 두 개의 DAG가 있으면, my_task가 끝나는 즉시 Airflow는 dataset-consumer 워크플로우를 위한 DAG 실행합니다.현재 지원하는 기능만으로는 모든 사용 사례에 적용할 수 없습니다, 하지만 차기 버전 릴리즈(2.5, 2.6 등)에서는 이 기반을 확장하고 개선할 예정입니다.데이터셋은 현재로서는 데이터셋의 추상적인 개념을 나타내며 직접 읽기 또는 쓰기 기능이 없습니다. 이번 버전에서는 앞으로 더욱 발전시킬 기본 기능을 추가하였으며, 앞으로 더욱 발전된 기능을 제공할 예정입니다.데이터셋에 대한 자세한 정보는 데이터 중심 스케줄링에 대한 문서를 참조해 주세요. 이는 데이터셋이 어떻게 식별되는지 (URI), 여러 데이터셋에 어떻게 의존할 수 있는지, 데이터셋이 무엇인지에 대해 어떻게 생각해야 하는지에 대한 세부 정보가 포함되어 있습니다.Easier management of conflicting python dependencies using the new ExternalPythonOperator모든 파이썬 라이브러리가 함께 이상 없이 사용될 수 있다면 좋겠지만, 현실적으로 불가능합니다. 때때로 여러 파이썬 라이브러리를 Airflow 설치에 동시에 설치하려 할 때 충돌이 발생합니다.이 문제를 해결하기 위해 @task.external_python (ExternalPythonOperator 포함)을 도입했습니다. 이를 통해 사전에 구성된 가상 환경 또는 완전히 다른 파이썬 버전에서 파이썬 함수를 Airflow 작업으로 실행할 수 있습니다:@task.external_python(python='/opt/venvs/task_deps/bin/python') def my_task(data_interval_start, data_interval_env) print(f'Looking at data between {data_interval_start} and {data_interval_end}') ... 가상 환경에 설치해야 하는 것은 어떤 컨텍스트 변수에 접근하는지에 따라 다소 미묘하게 달라지니, 상세 ExternalPythonOperator 사용법에 대해 반드시 읽어보시기를 바랍니다.More improvements to Dynamic Task Mapping이제 동적 작업 매핑은 다음을 지원합니다: expand_kwargs: 여러 매개변수를 non-TaskFlow 연산자에 할당하기 위함 zip: 교차 곱 없이 여러 가지를 결합하기 위함 map: 작업이 실행되기 직전에 매개변수를 변환하기 위함자세한 내용은 각 링크를 참조해주세요.Auto-register DAGS used in a context manager (더이상 `as dag:` 구문이 필요하지 않습니다)앞서 언급되었던 내용들과는 달리 사소한 개선이지만, 이 문법은 기존에 무의미한 반복과 단순한 휴먼에러를 야기 해왔습니다.with DAG(dag_id="example") as dag: ... @dag def dag_maker(): ... dag2 = dag_maker() ‘as dag:’를 사용하는 구문은 다음과 같이 변경될 수 있습니다.with DAG(dag_id="example"): ... @dag def my_dag(): ... my_dag() ‘as dag:’ 없이 간단하게 DAG를 정의하고 함수를 호출할 수 있습니다. 이 동작을 비활성화하려는 경우에는, DAG에서 auto_register=False로 설정하면 됩니다.# 이 DAG는 변수에 할당되지 않았기 때문에 Airflow에서 인식되지 않습니다. with DAG(dag_id="example", auto_register=False): ... Additional improvements650개 이상의 커밋으로 기능, 수정 사항, 변경 사항의 전체 목록은 모두 나열하기 어려우므로 전체 변경 점은 릴리즈 노트를 확인해 주세요.주목해야 할 주요 내용은 아래와 같습니다:홈페이지 자동 새로고침데코레이터 추가(@task.short_circuit)데코레이터 추가(@task.kubernetes)CLI를 통하여 role 삭제 기능 추가ExternalTaskSensor내 TaskGroup 지원 가능워커에서 Dynamic DAG의 최적화를 처리하도록 하는 parsing_context 실험적 기능 추가하나의 schedule 변수로 통합기존 불안정했던 컨피그 마스킹 기능을 이제 Admin → Configuration에서 민감하지 않은 데이터로 설정할 수 있도록 기능 제공클래스 이름에서 operator 이름을 분리 출처https://airflow.apache.org/blog/airflow-2.4.0/#data-aware-scheduling-aip-48 2023년 05월 24일