분류 전체보기45 [Data Engineering Lab] #10. Redash를 사용하여 실시간 분석 Dashboard 만들기 (BI) 0. 서론우리는 지금까지 꽤 먼길을 달려왔습니다. MacBook의 리소스 한계를 극복하기 위해 Vagrant를 버리고 Docker로 전환했고,실제 서버환경 처럼 사용하기 위해 컨테이너마다 고정 IP를 부여했습니다.그리고 MariaDB의 변화를 감지해 StarRocks까지 0.1초 단위로 데이터를 밀어 넣는 실시간 CDC 파이프라인을 설계했습니다. 하지만 데이터 엔지니어링의 끝은 '적재'가 아닙니다. 아무리 정교한 파이프라인이라도 숫자가 담긴 테이블에 머물러 있다면 의사결정자에게는 데이터 조각일 뿐입니다.이번 시리즈의 마지막 포스팅에서는 StarRocks에 쌓이는 실시간 데이터를 Redash BI와 연동하여, 주문 즉시 지표가 요동치는 운영 대시보드를 만들어 보겠습니다.1. Redash 선택 이유대시보드 .. 2026. 1. 26. [Data Engineering Lab] #9. Routine Load를 사용하여 Kafka 데이터를 StarRocks에 실시간으로 적재하기 안녕하세요. 지난 포스팅(https://tedi.tistory.com/61)에서 Debeziun 커넥터를 띄우고 이를 사용하여 "MariaDB (source) -> Debezium -> Kafka" 형태의 CDC 파이프라인 구축해 보았습니다. 이번에는 이 파이프라인의 핵심인 분석(Analytics) 단계입니다. Kafka에 쌓이고 있는 이커머스 주문 이벤트 데이터를 StarRock가 실시간으로 읽어들여(Consume), 분석용 테이블에 적재(Upsert)하는 과정을 다뤄보겠습니다.1. 구현 목표상황: 이커머스 쇼핑몰에서 주문이 발생하면 MariaDB에 데이터가 생성됩니다.흐름: Debezium이 이 변경사항(CDC)을 감지하여 Kafka Topic(orders_topic)에 JSON 포맷으로 발행합니다... 2026. 1. 16. [Data Engineering Lab] #8. Debezium 커넥터 등록하기: MariaDB와 Kafka CDC 구현하기 지난 포스팅에서 Binlog가 활성화된 MariaDB에 실시간 이커머스 트래픽 데이터를 생성 및 저장하는 과정을 구현하였습니다.이번 시간에는 Debezium MariaDB Connecto 통해 MariaDB에 저장된 데이터를 실시간으로 Kafka에 전송하는 과정을 구현해보겠습니다.1. 구현 목표소스데이터인 MariaDB(Mysql)에서 발생하는 Create, Update, Delete 로그를 debezium connector가 읽어 Kafka Topic을 생성하여 메세지를 전달하는 것까지가 목표입니다.2. Debezium 이란?Debezium은 데이터베이스의 변경 사항(INSERT, UPDATE, DELETE)을 실시간으로 감지(Capture)하여, 이를 이벤트 스트리 형태로 Kafka에 전송해 주는 오.. 2026. 1. 13. [Data Engineering Lab] #7. 실시간 이커머스 트래픽 생성기 실제 이커머스 서비스 환경을 재현하기 위한 데이터 스키마 설계와 트래픽 생성기 파이썬 코드를 구현하도록 하겠습니다.1. 데이터 설계users: 서비스를 이용하는 고객 정보products: 판매되는 상품정보orders: 고객이 상품을 구매할 때 발생하는 핵심 트랜잭션 데이터DDLUSE demo_db;-- 1. 유저 테이블CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), email VARCHAR(100), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);-- 2. 상품 테이블 (기초 데이터)CREATE TABLE IF NOT EXISTS pr.. 2026. 1. 2. [Data Engineering Lab] #6. 실시간 이커머스 CDC 파이프라인 설계 그동안 Kafka, StarRocks, MariaDB 등 데이터 엔지니어링을 위한 인프라 구축을 완료하였습니다.이번 포스팅 부터는 실제 상황과 비슷한 시나리오를 만들어 데이터 파이프라인 프로토타입을 구축해볼 예정입니다.1. 시나리오 목표 : "주문 즉시 업데이트되는 대시보드"첫 번째 시나리오로 실시간 이커머스 CDC 파이프라인을 구축해보고자 하는데요.전통적인 Batch 방식이라면 매일 밤 12시 그날의 매출을 집계하지만,우리의 목표는 "고객이 주문 버튼을 누른 지 1초 안에 운영자 대시보드이 매출 지표가 바뀌는 것" 입니다. 단순히 데이터를 옮기는 것을 넘어, 다음과 같은 엔지니어링 난제 도 살펴보고자 합니다. Data Integrity : 소스 DB에소 주문이 취소(Delete)되거나 상태가 변경(Up.. 2025. 12. 28. [Data Engineering Lab] #5. CDC의 시작: Binlog 활성화된 MariaDB 띄우기 (docker) 안녕하세요. 이번 포스팅은 OLTP DB인 MariaDB를 도커로 띄워볼건데요,CDC(capture data capture)활용을 고려하여 Binlog를 활성화하여 구축해보도록 하겠습니다.1. CDC와 Binlog는 무엇인가?먼저 CDC는 Capture Data Capture의 약자로 데이터베이스 에서 발생하는 삽입(Insert), 수정(Update), 삭제(Delete)와 같은 변경을 실시간으로 감지하여 다른 시스템으로 전달하는 기술 입니다. Binlog는 Binary Log의 약자로 데이터베이스에서 일어나는 모든 변경 사항(Insert, Update, Delete)을 기록하는 로그파일 입니다. 기본설정은 비활성화 되어있기 때문에 MariaDB를 띄울 때 설정을 활성화 하겠습니다. MariaDB의 변경.. 2025. 12. 27. [Data Engineering Lab] #4. StarRocks Cluster 구축하기 (Shared Nothing) [Data Engineering Lab] #3. KRaft 모드로 Kafka Cluster 로컬에 구축하기안녕하세요 지난 포스팅(https://tedi.tistory.com/55)에 이어 Kafka Cluster를 로컬 제 맥북에 구축해보도록 하겠습니다. [Data Engineering Lab] #2. Docker Container에 고정 IP 할당하기보통 Docker를 쓸 때는 localhost:909tedi.tistory.com 지난 포스팅 Kafka Cluster 구축기 (https://tedi.tistory.com/56)에 이어 차세대 OLAP 엔진으로 부상하고 있는 StarRocks 클러스터를 구축해보겠습니다. 1. StarRocks Architecture 선정StarRocks는 Shared-D.. 2025. 12. 27. [Data Engineering Lab] #3. KRaft 모드로 Kafka Cluster 로컬에 구축하기 안녕하세요 지난 포스팅(https://tedi.tistory.com/55)에 이어 Kafka Cluster를 로컬 제 맥북에 구축해보도록 하겠습니다.[[Data Engineering Lab] #2. Docker Container에 고정 IP 할당하기보통 Docker를 쓸 때는 localhost:9092 localhost:9093 처럼 포트 번호로 서비스를 구분하곤 합니다. 하지만 저는 이 방식이 마음에 들지 않았습니다. 실제 운영 환경에서는 서버마다 각자의 IP가 있고, 그 Itedi.tistory.com](https://tedi.tistory.com/55)1. 클러스터 아키텍처분산 서버 코디네이터인 Zookeeper 를 사용하지 않고 카프카 스스로 메티데이터를 관리하는 KRaft모드를 사용하였으며,특히.. 2025. 12. 26. [Data Engineering Lab] #2. Docker Container에 고정 IP 할당하기 보통 Docker를 쓸 때는 localhost:9092 localhost:9093 처럼 포트 번호로 서비스를 구분하곤 합니다. 하지만 저는 이 방식이 마음에 들지 않았습니다. 실제 운영 환경에서는 서버마다 각자의 IP가 있고, 그 IP를 기반으로 통신하기 때문입니다.1. 물리적으로 분리된 서버제가 굳이 고정 IP를 할당하려는 이유는 단순합니다. 진짜 클러스터답게 만들고 싶었기 때문입니다.현실감 있는 아키텍처: localhost에 포트만 바꿔서 접속하는 건 가짜처럼 느껴졌습니다. 10.100.0.4x 대역은 kafka, 10.100.0.2x대역은 Starrocks FE 식으로 물리적 주소 를 부여하고 싶었습니다.설정 파일의 명확성: Docker 포트 포워딩이 꼬이기 시작하면 설정 파일이 저저분해집니다. 고.. 2025. 12. 20. [Data Engineering Lab] #1. Ansible, Vagrant 환경을 Docker로 변경한 이유 1. 나는 데이터 엔지니어인가, 서버 관리자인가?지난 포스팅들에서는 Vagrant, Ansible을 사용한 이유는 실제 베어메탈 서버와 가장 유사한 환경에서 데이터 엔지니어링 플랫폼을 구축하고 싶었기 때문입니다. 그러나 생각지 못한 변수들로 인해 데이터 엔지니어링 연구에 집중하기 보다 인프라 구축에 시간을 많이 쓰게 되었습니다. 맥북의 리소스한계: 24GB 맥북에서 가상서버 5대에 빅데이터를 위한 클러스터를 띄우는데 리소스 부담이 컸습니다.무한 반복되는 '삽질': 네트워크 인터페이스가 꼬이거나 SSH 연결 오류 등으로 vagrant를 다시 올렸다 내리는데 시간을 많이 버렸습니다.주객전도: 데이터 파이프라인에 대한 연구를 하고 싶었으나, 하루종일 인프라 코드 설정에 시간을 많이 쓰고 있었습니다. 결국 "이.. 2025. 12. 20. Docker Container IP로 직접 접근하는 방법 - (docker-mac-net-connect) 맥북(macOS)환경에서 도커를 사용할 때 컨테이너 IP(172.17.0.x) 로는 직접 접근하지 못합니다. 그래서 매번 -p 옵션으로 포트 포워딩을 통해 localhost(127.0.0.1)로 접속해야만 했습니다. docker-mac-net-connect 을 사용하면 macOS에서도 컨테이너 IP에 직접 접근할 수 있습니다. `docker-mac-net-connect`는 macOS 호스트에서 실행되어 `Mac`과 `Docker Desktop Linux VM` 간의 링크 역할을 하는 가상 네트워크 인터페이스( utun )를 생성합니다.어디에 쓰일까?1. kafka, zookeeper 등 클러스터 통시을 하는 서비스를 띄울 때2. 마이크로서비스(MSA) 여러 개를 띄웠는데 포트 번호 충돌나서 매번 바꿔야할.. 2025. 12. 18. Apache Kafka [1] - 카프카의 배경과 근본 1. 카프카의 배경과 근본: 데이터 배관공(Plumbers)에서 벗어나기Apache Kafka를 단순히 "데이터를 주고받는 큐(Queue)" 정도로 이해한다면, 카프카의 진정한 가치를 놓치게 됩니다. 카프카는 링크드인(LinkedIn) 엔지니어들이 겪었던 두 가지의 치명적인 문제를 해결하기 위해 탄생한 '이벤트 스트리밍 플랫폼'입니다.1-1. 탄생 배경: 링크드인(LinkedIn)의 스파게티 아키텍처 2010년경, 링크드인 개발팀은 심각한 아키텍처적 한계에 부딪혔습니다. 당시 그들이 직면한 문제는 크게 두 가지 였습니다. 문제 1: 실시간 비동기 애플리케이션의 갈 곳 없는 데이터당시 시스템은 대부분 REST 기반의 요청/응답(Request/Reponse)방식이었습니다. 하지만 뉴스피드(Newsfeed).. 2025. 12. 17. 이전 1 2 3 4 다음