Spark → Kafka → Postgres 파이프라인에서 UUID가 터트린 지뢰

Kafka와 Spark Structured Streaming을 이용해서 데이터 파이프라인을 구축하고 있었습니다. 완전히 컨테이너화된 시스템. 스택 구성은 이렇습니다: Kafka → 거래 데이터를 스트리밍으로 전송 Spark Structured Streaming → 실시간 처리 및 이상 거래 탐지 Postgres → 데이터 웨어하우스 모든 게 순조로웠습니다. 그런데 갑자기 등장한 한 놈. UUID 필드. 맞습니다 — UUID. 이제 어떤 일이 벌어졌는지 정확히 보여드릴게요. ✅ 원래 설계 Postgres 테이블을 이렇게 설계했죠: CREATE TABLE fact_transaction ( transaction_id UUID PRIMARY KEY, customer_id UUID REFERENCES dim_customer(customer_id), merchant_id UUID REFERENCES dim_merchant(merchant_id), ... ); Kafka는 UUID를 문자열로 직렬화해서 이벤트를 잘 뿌려주고 있었습니다 (JSON은 원래 UUID 타입이 없으니까요). ...

6월 7, 2025

🔧 Airflow Docker 스타트 문제 해결

Airflow를 Docker로 운영하면서 자주 마주치는 이슈를 정리 ❗ 문제 1 — .env 파일이 Airflow 컨테이너 안에서 안 보인다 🔍 증상 요약 .env 파일은 프로젝트 루트에 존재. 하지만 Airflow 컨테이너 안에서는 load_dotenv()가 읽지 못함. 이유: Docker는 .env 파일을 환경변수로 변환해 넘기긴 하지만, 파일 자체를 컨테이너 내부로 복사하거나 mount하지 않는다. 결국 load_dotenv()가 찾을 파일이 없음. ✅ 해결법 1️⃣ docker-compose.yml에 volume mount 추가 services: airflow: ... volumes: - ./dags:/opt/airflow/dags - ./.env:/opt/airflow/dags/.env # ✅ 이 줄 추가 이렇게 하면 .env 파일이 Airflow 컨테이너 안의 /opt/airflow/dags/.env 경로로 복사된다. ...

5월 30, 2025