7가지 필수 데이터 엔지니어링 도커 컨테이너

7가지 필수 데이터 엔지니어링 도커 컨테이너

사실은 이렇습니다: 강력한 데이터 엔지니어링 환경을 구축하는 것은 생각보다 훨씬 번거롭습니다.

의존성 충돌, 구성 파일, 호환성 문제 등으로 인해 실제 데이터 문제를 해결하기 전에 인프라를 준비하는 데만 며칠을 소비할 수 있습니다. 이때 도커 컨테이너가 유용합니다. 도커는 미리 구성된 환경을 제공하여 몇 가지 명령어만으로 몇 분 안에 배포할 수 있습니다.

이 글에서는 거의 모든 데이터 엔지니어링 작업에 유용한 7가지 필수 도커 컨테이너를 소개합니다. 시작해 볼까요?

도커 허브 시작하기

특정 컨테이너를 살펴보기 전에, 도커 허브에서 (거의) 모든 이미지를 가져와 실행하는 간단한 패턴을 알아보겠습니다:

도커 허브에서 이미지 가져오기

$ docker pull image_name:tag

해당 이미지로 컨테이너 실행하기

$ docker run -d -p hostport:containerport --name containername imagename:tag

이제 데이터 엔지니어링 워크플로우에 도움이 될 컨테이너들을 살펴보겠습니다.

1. Prefect: 현대적인 워크플로우 오케스트레이션

Prefect는 개발자 친화적이고 파이썬 스타일의 접근 방식으로 데이터 워크플로우를 오케스트레이션하고 모니터링합니다.

Prefect는 Airflow보다 시작하기 쉽습니다. Prefect에서는 워크플로우가 기본적으로 성공하며 명시적으로 실패하라고 지시된 경우에만 실패합니다.

주요 기능:

  • XML/YAML 대신 Python 코드로 워크플로우 정의
  • 내장된 재시도, 알림 및 오류 처리 기능
  • 모든 파이프라인 실행을 모니터링하는 직관적인 UI
  • 최소한의 구성 변경으로 잘 확장됨

가져오고 실행하는 방법:

$ docker pull prefecthq/prefect

$ docker run -d -p 4200:4200 --name prefect prefecthq/prefect orion start

http://localhost:4200에서 UI에 접속하여 워크플로우 생성을 시작할 수 있습니다.

2. ClickHouse: 분석 데이터베이스

ClickHouse는 OLAP 워크로드와 실시간 분석을 위해 특별히 설계된 빠른 컬럼 기반 데이터베이스입니다.

수십억 개의 행을 밀리초 단위로 분석해야 할 때 ClickHouse는 훌륭한 선택이 될 수 있습니다. 컬럼 기반 스토리지 엔진은 집계 쿼리를 매우 빠르게 만들어 주며, 종종 전통적인 행 지향 데이터베이스보다 100-1000배 빠릅니다.

주요 기능:

  • 최적의 분석 쿼리 성능을 위한 컬럼 지향 스토리지
  • 빠른 실시간 데이터 수집
  • 여러 노드에 걸친 선형 확장성
  • 시계열 및 배열을 위한 확장 기능이 있는 SQL 인터페이스

가져오고 실행하는 방법:

$ docker pull clickhouse/clickhouse-server

$ docker run -d -p 8123:8123 -p 9000:9000 --name clickhouse clickhouse/clickhouse-server

http://localhost:8123을 통해 HTTP로 연결하거나 포트 9000에서 네이티브 프로토콜을 사용하여 연결할 수 있습니다.

3. Apache Kafka: 스트림 처리

Kafka는 하루에 엄청난 양의 이벤트를 처리할 수 있는 분산 이벤트 스트리밍 플랫폼입니다. 실시간 이벤트 기반 아키텍처를 가능하게 합니다.

주요 기능:

  • 실시간으로 레코드 스트림 저장 및 처리
  • 높은 처리량을 위해 여러 노드에 걸쳐 수평으로 확장
  • 파티션 내에서 메시지 순서 유지
  • 구성 가능한 보존 기간 동안 데이터 유지

가져오고 실행하는 방법:

$ docker pull bitnami/kafka

$ docker run -d --name kafka -p 9092:9092 -e KAFKACFGZOOKEEPER_CONNECT=zookeeper:2181 bitnami/kafka

참고: ZooKeeper도 실행 중이어야 하거나, 두 서비스를 모두 번들로 제공하는 컨테이너를 사용할 수 있습니다. 실행되면 토픽을 생성하고 최소한의 지연 시간으로 시스템을 통해 데이터 스트리밍을 시작할 수 있습니다.

4. NiFi: 데이터 흐름 자동화

Apache NiFi는 데이터 파이프라인을 설계, 제어 및 모니터링하기 위한 시각적 인터페이스가 있는 강력한 데이터 통합 및 흐름 자동화 시스템입니다.

변환, 라우팅 및 시스템 통합을 위한 내장 프로세서로 이질적인 시스템 간의 데이터 이동을 자동화하는 데 탁월합니다.

주요 기능:

  • 복잡한 데이터 흐름을 설계하기 위한 드래그 앤 드롭 UI
  • 백프레셔 처리 및 데이터 출처와 함께 보장된 전달
  • 연결성 및 변환을 위한 여러 내장 프로세서
  • 세분화된 보안 정책 및 데이터 거버넌스

가져오고 실행하는 방법:

$ docker pull apache/nifi:latest

$ docker run -d -p 8443:8443 --name nifi apache/nifi:latest

https://localhost:8443/nifi에서 안전하게 NiFi UI에 접속하고 엔터프라이즈 전체를 연결하는 시각적 데이터 흐름 구축을 시작할 수 있습니다. 강력한 프로세서 라이브러리는 간단한 파일 작업부터 복잡한 API 통합까지 모든 것을 처리합니다.

5. Trino (이전 Presto SQL): 분산 SQL 쿼리 엔진

Trino는 Hadoop, 객체 스토리지, 관계형 데이터베이스 및 NoSQL 시스템을 포함한 여러 소스에서 데이터를 쿼리하도록 설계된 분산 SQL 쿼리 엔진입니다.

데이터를 이동하지 않고도 여러 데이터 소스에서 동시에 빠른 분석 쿼리를 실행할 수 있도록 하여 데이터 페더레이션 문제를 해결하는 데 도움이 됩니다.

주요 기능:

  • 여러 데이터베이스와 데이터 저장소에서 동시에 데이터 쿼리
  • PostgreSQL, MySQL, MongoDB 등을 포함한 여러 데이터 소스에 연결
  • 분산 실행으로 대량의 데이터 처리
  • 가져오고 실행하는 방법:

    $ docker pull trinodb/trino:latest

    $ docker run -d -p 8080:8080 --name trino trinodb/trino:latest

    http://localhost:8080에서 Trino UI에 접속하고 단일 인터페이스를 통해 모든 데이터 소스에서 쿼리 실행을 시작할 수 있습니다.

    6. MinIO: 객체 스토리지

    MinIO는 데이터 레이크를 생성하거나 비정형 데이터를 저장하는 데 완벽한 S3 호환 객체 스토리지를 제공합니다.

    Amazon S3와 동일한 API를 사용하지만 사용자가 제어할 수 있는 클라우드와 같은 스토리지 기능을 로컬 또는 온프레미스에서 제공합니다.

    주요 기능:

    • 대량의 비정형 데이터를 효율적으로 저장
    • 쉬운 통합을 위한 Amazon S3 API와 호환
  • AI/ML 워크로드에 충분한 고성능
  • 가져오고 실행하는 방법:

    $ docker pull minio/minio

    $ docker run -d -p 9000:9000 -p 9001:9001 --name minio minio/minio server /data --console-address ":9001"

    기본 자격 증명 minioadmin/minioadmin으로 http://localhost:9001에서 MinIO 콘솔에 접속할 수 있습니다. 인터페이스를 통해 즉시 버킷을 생성하고 파일을 업로드할 수 있습니다.

    7. Metabase: 데이터 시각화

    Metabase는 데이터베이스에 연결되는 직관적인 비즈니스 인텔리전스 및 시각화 도구입니다.

    사용자 친화적인 인터페이스를 통해 조직의 누구나 데이터에 대해 질문하고 대시보드를 만들 수 있습니다.

    주요 기능:

    • 차트와 대시보드를 구축하기 위한 노코드 인터페이스
    • 사용자 정의 쿼리를 작성하려는 파워 유저를 위한 SQL 편집기
    • 예약된 보고서 및 이메일/Slack 알림
    • 다른 애플리케이션과 통합하기 위한 임베딩 가능한 대시보드

    가져오고 실행하는 방법:

    $ docker pull metabase/metabase

    $ docker run -d -p 3000:3000 --name metabase metabase/metabase

    이제 http://localhost:3000에서 Metabase에 접속할 수 있습니다. 데이터 소스를 연결하려면 설정 마법사를 따르세요. 몇 분 안에 데이터에서 인사이트를 도출하는 시각화를 만들기 시작할 수 있습니다.

    마무리

    네, 데이터 엔지니어링이 복잡할 필요는 없습니다. 이러한 필수 도커 컨테이너를 사용하면 지루한 설정 과정을 건너뛰고 조직에 가치를 제공하는 데이터 파이프라인 구축에 집중할 수 있습니다.

    각 구성 요소는 독립적으로 잘 작동하지만 종합적인 데이터 스택으로 결합할 때 더욱 유용해집니다.

    가장 좋은 점은 Docker Compose를 사용하여 10분 이내에 이 전체 스택을 설정할 수 있다는 것입니다. 커피가 식기도 전에 프로덕션 수준의 데이터 엔지니어링 환경을 구축할 수 있습니다. 😀