AI를 뺄래야 뺄수가 없다
요즘 링크드인, 뉴스, SNS 등 뭘 틀어도 AI를 안볼래야 안볼수가 없을 정도로 모두의 화두가 되고 있는데 현실인데요. 솔직히 말하면 너무 많은 이야기가 오가고 하루 아침에 바뀌는것도 많아 약간은 어지러운 것도 사실입니다.
약간의 여담을 덧붙히자면… 개인적으로 약간의 마이너 감성이 있어서 아바타 & 오징어 게임도 안보고, 스타트업(?)에서 일하고 있는데, 몇년 전부터 음지에서 몰래몰래 사람들과 공부하던 Attention, GPT, RL 등이 너무 메이저가 되버려서, 갑자기 유명해진 나만의 인디가수를 바라보는 심경이 약간 들기도 합니다,,,
본론으로 돌아와서… 이번에 새롭게 딜라이트룸 내부의 DARO 서비스를 위한 분석계를 구축하고, 분석 환경을 운영하는 과정에서 클로드 코드와 함께 고민하고 협업하며 많은 부분 생산성을 올릴수 있었고, 그 과정에서 얻은 것들을 공유해보려 합니다. 좋은 건 알겠는데 사용처를 고민하고 있다면 도움이 되지 않을까하는 바램입니다.
다들 바쁘고, 난 계속 운영 데이터를 찌르고 있고,,,
딜라이트룸의 광고 솔루션 BM인 DARO는 25년 런칭 이후 가파른 매출 성장세를 보이고 있는데요. 빠르게 성장하는 제품인만큼 안정적인 데이터 환경 구축의 대한 우선순위가 밀리는게 현실이였고, 데이터를 담당하는 사람으로써도 ‘일단 시장에서 가치를 만들어 내는것이 먼저다’ 라는 생각으로 지표 성장에 많은 집중을 했었습니다.
그러다보니, 많은 제품 초기 단계의 분석가들이 그렇듯, 자연스럽게 운영 DB에 쿼리를 날리면서 데이터 분석을 하게 되고, 결국엔 한계에 다다르게 됬었는데요.
- 운영 DB에 쿼리를 잘못 날려서 이슈가 생길수 있는 리스크를 항상 갖게 되고
- 유연한 데이터 파이프라인 및 오케스트레이션이 불가능해, 데이터 마트 구성이 어려울 뿐만 아니라 데이터가 클수록 빠른 쿼리 결과를 얻기도 어렵게 되었습니다.
결론적으로 데이터와 거리가 점점 생기면서 이곳저곳 데이터를 살펴보기 힘든 상황이 되버렸었는데요.
데이터 소스가 많아지고, 고객사들도 많아지면서 일별 TB 단위의 데이터를 다루게 되면서 DARO 도메인 또한 이런 이슈들을 무시할수 없게 되어, 분석 환경 구축을 시작하게 되었습니다.
기본적인 MDW 구성
DARO는 SDK, SSP, CPS 등 굉장히 방대한 여러 데이터를 자체 Kafka & 3rd party Report API 등을 통해 수집 중이었기 때문에 기본적으로 S3를 기반으로 한 Data Lake를 구성하여 그 위에 Athena를 활용하는 구조를 가져갔습니다.
그에 더해, 기존에 사용 중인 Airflow와 DBT를 통해 Orchestration을 가져오도록 엔지니어분이 1차적인 기반 작업을 해주셨는데요.
리소스는 항상 적고, 목이 마른자가 우물을 파기 때문에 이후 실질적인 Data Pipelining & Modeling 과 운영 작업은 직접 진행하게 되었고, 클로드 코드와 함께 많은 부분 효율화 해볼수 있었습니다.
데이터 Pipelining & Modeling
핵심적으로는 클로드 코드의 skill 기능을 통해 파이프라인 생성과 모델링에서의 반복적인 부분을 자동화 시킬수 있었는데요. 직접 생성/사용한 skill들은 두가지로, source를 연결하는 부분과 그 후 데이터 테이블들을 생성하는 부분을 분리했습니다.
/add-dbt-daro-source
- S3 데이터를 Athena 외부 테이블로 등록하는 커맨드
- S3 경로 탐색 → 샘플 파일 다운로드 → 스키마(컬럼/타입) 자동 추출
- dbt_project.yml에 partition projection 설정 추가 (dt 파티션 기반)
- AWS Glue에 외부 테이블 생성 (create_external_table 매크로 실행)
- daro_s3.yml에 source 정의 등록 (컬럼 설명 포함)
- Athena 쿼리 + dbt show로 데이터 접근 검증
분석 환경 구축의 첫 번째 단계는 S3에 있는 source 파일들을 Athena와 연결해 주는 작업이었는데요. 50개가 넘는 source들에 대한 yaml을 각각 생성해서 연결해 주는 것을 역부족이었습니다.
일단 첫 연결 프로세스를 skill로 만들어 달라는 주문과 함께 자동화를 시작해 볼 수 있었고, 아래 튜닝을 통해 안정성 및 활용도를 높여 볼 수 있었습니다.
- schema 탐색을 위해 data sample을 받는 경우 json 형태이기 때문에 누락되는 컬럼이 생길수 있어 여러 데이터 샘플을 탐색하도록 설정
- 테이블명은 자동 생성이 아닌 유저가 정해주는 테이블 명으로 사용
- dev 환경과 동시에 prod 환경에도 소스 테이블이 연결되도록 설정
/add-dbt-daro-model
- dbt 모델 생성 커맨드 (staging / mart / dimension)
- 인터랙티브하게 모델 타입, materialization 전략, 소스 테이블, grain, unique key 등을 질문하며 진행
- 답변 기반으로 SQL 파일 + YAML 문서(컬럼 설명, 테스트)를 자동 생성
- 생성 후 dbt compile → dbt run → dbt test까지 검증
- DARO OLAP 원칙 적용: single-partition, partition pruning, on_schema_change='fail'
두번째 단계인 테이블 설계 단계에서는 실제 비지니스 로직들의 모호함을 포함해야하는 현실을 반영해 클로드의 단독 결정이 아닌 최대한 유저와의 소통을 통해 스펙을 결정하는 방식으로 구성했습니다.
staging / mart / dimension 중 생성하려는 데이터 모델을 정하고, 필요한 컬럼들을 같이 정한 이후에 기존 아키텍처들의 기반 모델링을 실시하게 되며, 이후 compile과 테스트를 실시합니다.
- 이 단계에서는 staging 테이블의 특이성(중복 제거, null 컬럼 설정 등)을 따로 주입시켜 주는 것이 필요했고
- 기존 사용 중인 쿼리들을 참고해서 스타일을 유지할 수 있도록 하는 것이 주요했습니다.
데이터 거버넌스 / 카탈로깅
추가적으로 이번 작업을 진행하며 AI의 소중함을 한번 더 느낀 부분은 문서화 부분 이였습니다.
딜라이트룸의 데이터 그룹 내부에서는 데이터 마트를 구축할때 거버넌스를 챙길수 있도록 미리 정책을 정해두고, 데이터 마트에 대한 설계 문서들을 아카이빙해두어 그룹 내부에서 논의하고 공유하는 프로세스를 가지고 있는데요.
든든한 프로세스 덕에 보다 정돈된 데이터 환경이 구축되는 것은 맞지만, 마트의 비즈니스 로직, 컬럼 하나하나 모두 문서화하기는 항상 많은 노력이 들어가는 작업이었습니다.
설계된 또는 설계하려는 마트의 구성을 SQL 로직과 함께 정해진 템플릿의 노션 페이지를 생성하는 작업이었기 때문에, 이 또한 AI의 자동화를 통해 80% 이상의 완성도를 가지는 초안을 생성할 수 있도록 Notion mcp를 활용해 skill을 구성했습니다.
- 많은 요구사항이 들어간 템플릿인 만큼 기존 문서들을 참고할 수 있는 별도의 reference 파일과
- 각 요구사항의 정합성을 확인하는 부분에 중점을 두고 skill을 개선해 나갔습니다.
/update-notion-mart-template
- dbt mart 모델을 Notion "Data Modeling" DB에 문서화하는 스킬
- SQL 파일에서 자동 추출: 모델명, 소스 테이블(ref/source), materialization, partition key, unique key, 컬럼 목록
- YAML 파일에서 테스트 케이스, manifest에서 DAG 스케줄도 자동 추출
- GROUP BY 절 분석으로 grain, dimension/fact 컬럼 자동 분류
- 코드에서 추출 불가능한 비즈니스 컨텍스트만 사용자에게 질문 (현 상황, 어려움, 모니터링 지표)
- 마트 모델링 템플릿 구조로 Notion 페이지 생성/업데이트 (5개 섹션: Business Process → Grain → Dimensions → Facts → Batch Process)
- 기존 페이지 있으면 업데이트, 없으면 새로 생성 (Status = "In Progress")
결과적으로 sql 파일과 몇번의 질의를 거치면 복잡한 노션을 한번에 생성해주는 워크플로우를 만들어볼수 있었습니다.
처음부터 ‘딸깍'은 아니다,,,
많은 부분 AI와 협업하면서 여러 부분 효율화를 통해 홀로 진행한 작업임에도 불구하고 높은 퀄리티와 속도를 가져가 볼 수 있었는데요.
이번 작업을 통해 AI의 효율성 이외에도 실무자의 역할에 대해서도 고민을 해볼 수 있는 기회였는데요. 단순히 정해진 일만 하는 사람과 계속된 부가가치를 만들어내는 사람 사이에서 존재했던 괴리가 더더욱 벌어지겠다는 생각이 들었습니다.
그리고, 내 입맛에 맞는 활용처를 만들기 위해서는 어느 정도의 방망이 깍기가 꼭 필요하다고 생각합니다. 이번 공유가 의미 있는 사례 공유가 되었으면 하는 바람이고, 데이터 분야에서도 더 재밌고 신박한 사례들이 더 많이 나오길 기대합니다.
⏰ 딜라이트룸에서 알라미와 함께 아침을 바꿀 분들을 모십니다 🙌