AWS 기술 블로그

Amazon S3 데이터 레이크와 기계학습을 위한 Snowflake 통합 파이프라인 플랫폼 구축하기

인공지능과 기계학습 기술의 상용화로, 기업들은 대량의 데이터를 효과적으로 수집, 저장, 관리할 필요성을 점차 인식하고 있습니다. 데이터 레이크(Data Lake)는 이러한 필요성에 부응하여, 다양한 소스로부터 대규모의 데이터를 실시간으로 수집하고 저장함으로써 기업의 의사결정과 혁신을 지원합니다. 이제 데이터 레이크는 기업이 데이터 자산을 최대한 활용하고 비즈니스 가치를 창출하는 핵심 요소로 자리 잡고 있습니다.

정형, 반정형, 비정형 데이터 등 다양한 유형의 데이터 소스로부터 데이터를 데이터 레이크로 수집하는 작업에는 어려움이 있습니다. 데이터 소스의 연결 방법과 데이터 수집 방법이 다양하고, 수집된 데이터를 분석 및 AI/ML 작업에 활용할 수 있도록 데이터를 변환 및 정제하는 반복 작업이 증가합니다. 또한 데이터의 품질을 유지 및 관리하기 어렵다는 문제점도 있습니다.

많은 고객들은 데이터 수집과 활용의 과정 중에서 유사한 문제를 겪고 있습니다. 이를 해결하기 위해 다음과 같은 방법들을 활용하고 있습니다.

  1. 클라우드 기반의 확장 가능한 데이터 수집 및 오케스트레이션 서비스를 활용하여 유연한 데이터 파이프라인을 구성합니다. 이를 통해 다양한 데이터 소스의 데이터를 손쉽게 데이터 레이크로 수집할 수 있습니다.
  2. 쉽게 구성하고 활용할 수 있는 ETL(추출, 변환, 로드) 서비스를 사용하여 반복적인 데이터 변환 작업을 자동화하고 효율성을 높입니다. 이렇게 가공된 데이터는 분석 및 AI/ML 용도로 바로 활용할 수 있습니다.
  3. 관리형 서비스를 활용하여 데이터 웨어하우스(Data Warehouse)를 구성하고 운영 및 확장할 수 있습니다. 이를 통해 대규모 데이터 처리 및 분석이 가능해지며, 데이터 사일로를 제거하고 데이터의 품질을 보장할 수 있습니다.
  4. 최종적으로 데이터 마트(Data Mart)를 클라우드 기반의 관계형 데이터베이스 서비스를 통해 제공함으로써, 사용자들의 다양한 데이터 요구 사항을 빠르고 정확하게 만족할 수 있습니다.

이 블로그에서는 실제 고객사에서 AWS의 다양한 데이터 관련 서비스와 Snowflake를 활용하여 어떻게 데이터를 분석하고 AI/ML에 활용하고 있는지 사례를 살펴보겠습니다.

솔루션 개요

  1. 여러 데이터 소스의 데이터를 쉽게 검색, 준비, 이동, 통합할 수 있도록 지원하며, ETL 작업을 자동화하고 관리하는 서버리스 데이터 통합 서비스인 AWS Glue와 오케스트레이션 서비스인 Amazon Managed Workflows for Apache Airflow(MWAA)를 활용하여 유연한 데이터 파이프라인을 구성하여 다양한 데이터 소스의 데이터를 데이터 레이크(S3)로 수집하는 것을 용이하게 합니다.
  2. 수집된 원본(Raw) 데이터를 AWS Glue와 Snowflake를 사용하여 반복적인 ETL 작업을 자동화하여 원천 데이터를 사용 가능한 가공된 데이터로 변환합니다. 이렇게 가공된 데이터는 분석 및 AI/ML 용도로 바로 활용할 수 있습니다.
  3. Snowflake는 클라우드 기반 데이터 웨어하우스로 방대한 규모의 데이터에 대해 다중 클러스터 컴퓨팅을 제공하여, 데이터 사일로를 제거하고, 데이터 볼륨 및 워크로드에 관계없이 대규모 데이터 처리 및 분석을 가능하게 합니다. 이를 통해 제공되는 데이터의 품질을 보장할 수 있습니다.
  4. 최종적으로 데이터 마트는 관계형 데이터베이스를 클라우드에서 쉽게 설정, 운영 및 확장할 수 있게 해주는 Amazon RDS를 통해 제공되며, 이를 통해 사용자들의 데이터 요구를 충족시킬 수 있습니다. 그리고 데이터 마트는 Amazon QuickSightTableau 등을 통해 BI로 활용될 수 있습니다.

단계 요약

고객 사는 아래와 같은 단계로 데이터 파이프라인을 구성하였습니다.

  1. 데이터 레이크 구축
    1. AWS Glue를 활용한 S3 데이터 레이크로의 데이터 수집
    2. MWAA를 활용한 데이터 워크플로 생성 및 관리
  2. 데이터 전처리 및 활용
    1. AWS Glue와 Snowflake를 활용한 데이터 전처리
    2. Amazon AthenaAmazon SageMaker를 활용한 AI/ML 플랫폼 구성
    3. Amazon API GatewayAWS Lambda를 활용한 데이터 마트 활용 및 시각화

사전 준비사항

  • 데이터 수집을 위한 원천 데이터와 AWS VPC 간 네트워크를 연결하고 점검합니다.
  • 원천 데이터 수집을 위해 DB 접속 정보를 AWS Secrets Manager에 등록하여 사용을 준비합니다.
  • 각 서비스에서 활용하는 AWS IAM 역할을 생성합니다.

1. 데이터 레이크 구축

데이터 레이크를 통해 다양한 데이터 소스의 데이터를 하나의 중앙화된 저장소로 저장하고, 이를 활용한 통합 데이터 분석이 가능해집니다. 이 단계에서는 데이터 소스들의 원천 데이터를 S3 데이터 레이크 저장소로 수집하는 과정을 구성합니다.

단계 1 : AWS Glue를 활용한 S3 데이터 레이크로의 데이터 수집

고객 환경에서 생성되는 다양한 데이터 소스를 통합적으로 분석하기 위해 Amazon S3를 중앙화된 저장소로 활용하여 데이터를 통합 저장합니다. 이 중앙화된 저장소는 데이터 레이크라고 불리며, 데이터 레이크에 저장된 데이터를 기반으로 다양한 분석 작업을 수행할 수 있도록 지원합니다. Amazon S3는 뛰어난 확장성과 내구성을 갖춘 객체 스토리지로, 데이터 레이크의 핵심 저장소 역할을 담당합니다. 또한, AWS Glue는 서버리스 데이터 통합 서비스로서 데이터를 추출(Extract), 변환(Transform), 적재(Load)하는 ETL 작업을 효율적으로 수행할 수 있도록 돕습니다.

AWS Glue 서비스를 활용하여 원천 데이터 소스와 연결하고, 메타데이터를 수집합니다. AWS Glue 크롤러(Crawler)가 실행되면 데이터 소스를 자동으로 스캔하여 메타데이터를 추출하고, 이를 AWS Glue 데이터 카탈로그(Data Catalog)에 메타데이터 테이블로 저장합니다. 수집한 메타데이터를 활용하여 AWS Glue 작업을 생성 및 호출하여 원천 데이터를 가져옵니다. AWS Glue 작업은Python 코드를 직접 작성하여 사용하거나, AWS Glue 스튜디오의 GUI를 활용하여Python 코드 작성을 최소화할 수 있습니다.

단계 2 : Apache Airflow 를 활용한 데이터 워크플로 생성 및 관리

많은 수의 데이터 파이프라인을 모니터링할 때, Apache Airflow를 활용하여 편리하게 워크플로를 제어하고 모니터링할 수 있습니다. Amazon Managed Workflows for Apache Airflow(MWAA) 는 Apache Airflow를 기반으로 하는 완전 관리형 서비스로, AWS 클라우드에서 워크플로우를 쉽게 구축하고 운영할 수 있게 해줍니다.

Amazon MWAA 시작하기 가이드를 따라 MWAA 환경을 생성합니다. 이 과정에서 Apache Airflow에서 사용할 Directed Acyclic Graphs(DAG)와 매개변수 등의 파일을 저장할 S3 버킷과 MWAA가 동작하는 동안 AWS 서비스에 접근할 수 있도록 허용하는 실행 역할(IAM 역할) 등을 구성하여 MWAA 환경을 생성합니다.

MWAA 환경 생성 후, Python으로 작성된 DAG 파일을 지정된 S3 위치에 업로드하면 워크플로 생성이 가능합니다. Airflow는 Amazon provider 패키지에 포함된 오퍼레이터를 통해 AWS Glue를 비롯한 다양한 AWS 서비스에 접근하는 워크플로를 자동화하고 관리할 수 있습니다.

아래와 같은 순서로 AWS Glue를 통해 구성한 파이프라인 워크플로를 생성하고 모니터링합니다.

  1. 스케줄 메타데이터를 생성합니다.DAG 하나에 한가지 스케줄을 등록하고 여러 DAG의 스케줄을 관리하기 위해 CSV 포맷의 스케줄 메타데이터를 생성하여 DAG 스케줄을 통합 관리합니다. 해당 스케줄 메타데이터 CSV 파일은 S3에 업로드하여 DAG를 통해 활용할 수 있도록 구성하였습니다.
    column1 column2 column3 column4 column5
    1 SYSTEM DB_NAME SCHEDULE_GROUP DAG_START_DATE DAG_SCHEDULE
    2 test postgres catalog_daily 202212190000 00 17 * * *
  2. 데이터 수집 메타데이터를 생성합니다.AWS Glue로 구성된 파이프라인에는 인자를 전달하여 동작합니다. 해당 인자는 Airflow에서 전달하여 동작하도록 합니다. 해당 인자를 전달하기 위해 데이터 수집 메타데이터를 생성하고 스케줄 메타데이터와 같이 CSV 포맷으로 S3에 업로드하여 사용합니다.
  3. DAG 작성생성한 메타데이터를 활용하여 DAG를 생성합니다.
    # S3 csv를 읽고 dataframe으로 return
    def get_s3_to_df(self, s3_bucket, s3_key):
        obj = boto3.client('s3').get_object(Bucket = s3_bucket, Key = s3_key)
        df = pd.read_csv(io.BytesIO(obj["Body"].read()))
        return df
    Python

    생성한 DAG는 소스 코드 수정없이 메타데이터 관리를 통해 스케줄을 변경하고 수집 데이터를 추가 및 제거할 수 있습니다.

  4. MWAA 환경 생성Amazon MWAA 관리 콘솔을 통해서 다음과 같이 MWAA 환경을 생성합니다. 자세한 생성 방법은 Amazon MWAA 시작하기를 참조하세요.

    세부 정보 지정

    고급 설정 구성

    생성된 MWAA 환경

    Airflow UI, 출처: https://airflow.apache.org/docs/apache-airflow/stable/ui.html

데이터 전처리 및 활용

앞 단계에서 구축한 데이터 파이프라인을 통해서 다양한 데이터 소스들의 데이터가 데이터 레이크에 원본 형태로 저장되어 있습니다. 이 원천 데이터를 분석에 활용하기 위해서는 적절한 전처리 과정이 필요합니다. 이 단계에서는 데이터 전처리 워크플로를 구성합니다.

단계 1: AWS Glue와 Snowflake를 활용한 데이터 전처리

AWS Glue를 활용한 데이터 전처리

AWS Glue의 스튜디오 기능을 통해 데이터 전처리 작업을 생성할 수 있습니다. 또한, 직접 쿼리를 작성하여 작업을 만들 수도 있습니다. 사례에서는 많은 양의 다양한 데이터 전처리 작업을 생성하고 관리하기 위해 AWS Athena를 통해 쿼리를 작성하고 많은 데이터 전처리 쿼리를 하나의 AWS Glue 작업에 인자로 전달하여 전처리를 진행하는 방식으로 진행하였습니다.

Snowflake를 활용한 데이터 전처리

Snowflake에서 제공하는 외부 테이블(External Table) 기능과 저장 프로시저(Stored Procedure)를 통해 데이터 전처리를 진행하였습니다.

  1. 먼저 AWS Marketplace에서 Snowflake Connector를 구독합니다.
  2. AWS Glue 작업을 생성합니다. 기본 적재는 Delete-Insert 방식으로 구현하였습니다. 대용량 데이터 처리를 위해 날짜 인자를 전달하여 부분 일자 단위로 작업을 수행하고 파티션을 나누어 작업이 가능하도록 구성하였습니다. 다양한 전처리 작업을 수행하기 위해 전처리 쿼리를 따로 보관하고 해당 SQL을 전달 받아 작업이 수행됩니다.
    if PARTITION_FORMAT == 'MM/dd/yyyy HH:mm:ss.SSSSSS' :
        tableDataFrame=JDBC_node1.withColumn(PARTITION_COLUMN, date_format(to_date(col(PARTITION_KEY), PARTITION_FORMAT), 'yyyyMMdd'))
    elif PARTITION_FORMAT == 'yyyyMMddhhddss' or PARTITION_FORMAT == 'yyyyMMdd' :
        tableDataFrame=JDBC_node1.withColumn(PARTITION_COLUMN, substring(col(PARTITION_KEY), 1, 8))
    Python
  3. AWS Athena를 통해 데이터 전처리 쿼리를 생성합니다.생성한 쿼리는 S3에 저장하여 AWS Glue 작업에서 호출하여 사용할 수 있도록 합니다. 이후 쿼리만 생성하여 추가하면 손쉽게 새로운 데이터 전처리 과정을 추가할 수 있습니다.
    1. S3 데이터를 Snowflake 외부 테이블로 생성합니다.
    2. 외부 테이블 데이터를 전처리하여 데이터 마트 스키마로 삽입하는 프로시저를 생성합니다.
    3. Airflow 배치 작업 스케줄을 생성하여 주기적으로 프로시저를 호출합니다.

단계 2: AWS Athena와 Amazon SageMaker를 활용한 AI/ML 플랫폼 구성

플랫폼의 접근 권한 제어를 위해 AWS IAM Identity Center를 활용하였습니다. IAM Identity Center를 구성한 후 해당 권한 체계를 SageMaker Studio에 반영하였습니다.

플랫폼 구성을 진행하는 개발자의 관점과 플랫폼을 사용하게 되는 사용자의 관점에서의 워크플로는 아래와 같습니다.

플랫폼을 구성하는 개발자 관점에서의 아키텍처

  1. IAM Identity Center를 활성화한 후 그룹에 SageMaker 관련 권한을 부여합니다.
  2. Amazon SageMaker Studio 도메인을 생성하는 과정에서나 생성한 후 IAM Identity Center에서 생성한 그룹을 통해 사용자 프로필을 연결합니다.
  3. Dockerfile을 사용하여 커스텀 컨테이너 이미지를 생성하고 Amazon Elastic Container Registry (Amazon ECR)의 프라이빗 레지스트리에 이미지를 저장합니다.
  4. SageMaker Studio JupyterLab과 SageMaker에서 사용하기 위해 ECR에 저장된 컨테이너 이미지를 SageMaker에 등록한 후 SageMaker Studio에 연결합니다.

플랫폼을 사용하는 사용자 관점의 아키텍처

  1. 사용자는 IAM Identity Center에서 제공하는 AWS 액세스 포털에서 로그인을 진행합니다.
  2. 사용자는 SageMaker Studio에서 플랫폼 개발자가 생성한 커스텀 컨테이너 이미지나 SageMaker에서 기본으로 제공하는 커널 이미지를 사용하여 JupyterLab에 연결하여 분석, 모델생성, 학습, 배포를 진행할 수 있습니다.
    from sagemaker.pytorch import PyTorchModel
    
    # PyTorch Model 생성
    model = PyTorchModel(model_data='s3://your-s3-buckeet/your-model/model.tar.gz',
                         role='your-sagemaker-role',
                         entry_point='inference_script.py', # 추론을 위한 스크립트
                         framework_version='1.8.1',
                         py_version='py3',
                         sagemaker_session=sagemaker.Session())
    
    # 모델 배포
    predictor = model.deploy(instance_type='ml.p3.2xlarge',
                             endpoint_name='your-endpoint-name',
                             environment={'SAGEMAKER_TFS_ENABLE_LARGET_BATCH':
    ....
    Python
  3. S3에서 데이터를 읽은 후 SageMaker에서 실행한 분석 결과나 모델 아티팩트 등의 결과를 S3에 저장하고 검색할 수 있습니다.

단계 3: AWS Lambda와 Amazon API Gateway를 활용한 데이터 마트 활용 및 시각화

데이터 기반의 전략적 의사결정을 지원하기 위한 시각화 대시보드 제작을 위해 데이터 마트를 구축하고, 해당 데이터 마트 기반으로 시각화 대시보드를 제작하였습니다. 이때 AWS Lambda와 Amazon API Gateway를 사용하여 웹에서도 데이터 마트 분석과 해당 분석 결과를 시각화 솔루션과 연동하여 대시보드를 제작할 수 있습니다.

AWS Lambda를 사용하여 데이터를 처리하고 가공하는 일련의 작업들을 자동화하고, 이를 통해 정형 및 비정형 데이터를 효과적으로 처리하고, 데이터의 분석을 진행하였습니다.

API Gateway는 AWS Lambda와 고객의 웹 서비스 간의 연결을 원활하게 하는 역할을 합니다. 이를 통해 웹 인터페이스를 구축하여 데이터를 사용자에게 명확하게 전달할 수 있습니다.

웹 서비스에서 데이터 마트의 분석과 해당 분석 결과의 시각화를 개발자와 사용자 관점으로 아래의 절차를 걸쳐 진행됩니다.

웹 인터페이스를 구축하는 개발자 관점의 아키텍처

  1. 웹 인터페이스 구성을 할 수 있는 권한이 있는 계정으로 로그인합니다.
  2. AWS Lambda에서 함수를 생성한 후 함수 내부 로직에서 데이터 조회를 하려는 데이터 마트에 연결을 하고 데이터를 쿼리 후 분석하는 로직을 개발합니다.
  3. 데이터 마트에서 가져온 데이터를 기반으로 데이터 가공을 합니다.
  4. AWS Lambda 함수 생성이 완료되었으면 API Gateway를 구성합니다.
  5. 생성한 API에서 통합 연결을 선택하여 생성한 AWS Lambda 함수를 연결합니다.

웹 인터페이스를 사용하는 사용자 관점 아키텍처

  1. 사용자는 API Gateway를 통해 제공되는 API를 호출합니다.
  2. API Gateway가 API에 연결된 AWS Lambda 함수를 호출합니다.
  3. AWS Lambda 함수는 데이터 마트에서 가져온 데이터를 분석합니다.
  4. 분석이 완료된 데이터를 API Gateway로 반환합니다.
  5. API Gateway는 Lambda 함수에서 반환한 데이터를 사용자에게 반환합니다.

결론

파이프라인 플랫폼 구축을 위해서는 작업 도중 발생하는 다양한 문제들에 대해 많은 고민이 필요합니다. 이를 해결하기 위해 다양한 전략과 서비스에 대한 논의가 이뤄졌습니다. 위와 같은 문제의 방향성 수립에 도움이 될 수 있도록 AWS의 체계적이고 다양한 서비스를 사용하게 되었습니다. 이를 통해 AWS Glue와 Snowflake를 사용하여 데이터 적재 및 변환, Amazon MWAA서비스를 이용한 워크플로우 구축, Amazon SageMaker를 활용한 AI/ML작업에서의 데이터 활용할 수 있었습니다. 또한 데이터 분석 진행 후 Amazon API Gateway와 AWS Lambda를 사용하여 시각화까지 진행되는 파이프라인 플랫폼을 구축하게 되었습니다. 이와 같은 시스템 구축을 통해 데이터 관리를 편리하게 작업할 수 있을 뿐 아니라 유지보수에 대한 부담을 줄이고 효율적으로 운영할 수 있게 되었습니다.

추가적으로 데이터 레이크에 대한 정보는 AWS 기반 데이터 레이크, AWS에서의 Snowflake에 대한 자료를 참고하시면 도움이 될 것 같습니다.

이정석

이정석

CORNERSTONE42의 CEO 이정석은 CJ제일제당에서 디지털 혁신과 AI 개발을 이끌었으며, 국내 대기업과 외국계 기업에서 다양한 시스템 구축과 개발을 성공적으로 수행해왔습니다. 현재는 CORNERSTONE42를 설립하여 AX/DX 사업의 본질과 산업 구조에 대한 깊은 이해와 풍부한 경험을 바탕으로 기업 경영 및 AI 개발, 시스템 구축, 그리고 관련 컨설팅을 제공하며, 기업의 디지털 전환과 지속 가능한 성장을 지원하고 있습니다.

이근영

이근영

이근영 Software Engineer는 Cornerstone42에서 클라우드 기반 AI 및 DX 전환 프로젝트를 성공적으로 수행했습니다. 현재는 클라우드 인프라와 데이터 플랫폼 구축 경험을 기반으로, 고객에게 최적화된 기술 아키텍처 설계와 신기술 도입을 제안하며 비즈니스 혁신을 지원하고 있습니다. 특히, AWS 클라우드 환경에서 데이터 파이프라인 설계와 분석 플랫폼 구축을 통해 데이터 기반 의사결정을 지원하는 데 주력하고 있으며, 데이터 분석 플랫폼 운영을 통해 안정적이고 효율적인 데이터 활용 환경을 제공하고 있습니다.

하승우

하승우

Cornerstone42의 하승우 Solutions Architect는 Cornerstone42에 입사하여 Data Engineer 직무로 고객의 클라우드 기반 AI/DX 전환 프로젝트를 진행하였고, 현재는 Solutions Architect로 직무를 전환하여 고객들에게 최적화된 아키텍처와 신기술 도입 지원을 진행하여 여러 기술적인 도움과 업무를 지원하고 있습니다.

심재용

심재용

Cornerstone42의 심재용 Data Scientist는 소프트웨어 및 AI/ML 개발 경험을 바탕으로, 엔터프라이즈 기업이 최신 AI/ML 기술을 활용해 원하는 비즈니스 결과를 얻을 수 있도록 다양한 기술적 지원을 제공합니다. 또한, 여러 AI/ML 분야에서 연구개발을 통해 기술 경쟁력 강화, 신사업 영역 개척, 지식 재산(IP) 확보 등을 목표로 기업의 지속 가능한 성장을 이끌고자 노력하고 있습니다.

정영훈

정영훈

정영훈 Partner Sales Engineer는 Snowflake Korea 에서 Solutions Architect 역할을 수행하면서 Snowflake를 통한 클라우드 기반 데이터 플랫폼 구축 관련 컨설팅을 수행하였습니다. 현재는 Sales Engineering 팀의 일원으로 Snowflake 파트너분들께 Snowflake 플랫폼에 대한 기본적인 교육 / 아키텍처 구성 가이드 제공 및 PoC 참여를 통하여 파트너분들이 효율적으로 Snowflake를 기반으로 데이터 플랫폼 구축 하실 수 있도록 도움을 드리고 있습니다.

Kiwon Yoon

Kiwon Yoon

윤기원 파트너 솔루션즈 아키텍트는 제조 산업 고객들이 AWS로 데이터베이스와 데이터 분석 워크로드를 성공적으로 이전하고 최적화할 수 있도록 돕고 있습니다. 또한, 생성형 AI를 활용하여 시스템 현대화를 지원하고, 운영 자동화 솔루션 구축을 통해 고객의 디지털 전환을 가속화를 돕고 있습니다.

Kihyeon Myung

Kihyeon Myung

명기현 솔루션즈 아키텍트는 다양한 분야의 엔지니어 경험을 바탕으로, 고객이 AWS 클라우드에서 효율적 아키텍처를 구성하고, 원하는 비즈니스 목표를 달성할 수 있도록 지원하고 있습니다.