메달리온 아키텍처의 Bronze·Silver·Gold 역할
메달리온 아키텍처는 데이터를 원본 보존, 공통 정제, 목적별 활용 단계로 나누는 설계 패턴이다. 보통 이 세 계층을 Bronze, Silver, Gold라고 부른다. 계층을 지날수록 데이터의 구조와 품질을 사용 목적에 맞게 다듬는다.
이렇게 나누면 원본을 다시 수집하지 않고 정제 로직을 수정하거나, 같은 정제 데이터를 여러 분석에 재사용할 수 있다. 수집과 정제, 최종 집계를 한 번에 처리할 때 생기는 책임의 혼합을 줄이는 방식이다.
중요한 것은 폴더 이름보다 각 계층에 어떤 데이터를 넣고 다음 단계에 무엇을 제공하는가다. 이름만 나눈다고 품질이 보장되는 것은 아니며, 실제 변환 규칙과 검증 절차가 계층의 역할을 뒷받침해야 한다.
원본을 보존한 뒤 공통 정제와 목적별 가공을 거쳐 사용하기 좋은 형태를 만든다
세 계층은 수집·정제·활용의 책임을 나눈다
주문 데이터를 분석하는 파이프라인을 예로 들어보자. 아래 주문 흐름은 계층의 역할을 설명하기 위한 가정이다.
외부 시스템에서 받은 주문 파일을 Bronze에 남긴다. Silver에서는 주문 번호의 중복을 정리하고 금액·시간 형식을 맞춘다. Gold에서는 정리된 주문을 바탕으로 일별 매출이나 상품별 판매량을 만든다.
같은 주문 데이터라도 세 계층이 답하는 질문은 다르다. Bronze는 “무엇을 받았는가”, Silver는 “공통 기준에 맞게 정리됐는가”, Gold는 “사용자가 어떤 결과를 필요로 하는가”를 담당한다.
이 구분은 특정 제품에만 적용되는 기능이 아니다. 파일이나 테이블 등 물리적인 저장 방식과 별개로 데이터의 책임을 나누는 패턴이다. 계층마다 다른 서버나 저장소가 반드시 필요한 것도 아니다.
Bronze는 원본을 남겨 재처리의 출발점을 만든다
원본 보존 — 정제 결과와 받은 기록을 분리한다
Bronze의 중심 역할은 소스에서 받은 상태를 최대한 보존하는 것이다. 일반적으로 새로 들어온 기록을 덧붙이는 방식으로 이력을 남기고, 정제 과정에서 원본을 덮어쓰지 않도록 구성한다.
주문 금액이 숫자가 아닌 문자열로 들어오거나 예상하지 못한 항목이 추가되더라도, 수집 단계에서 무조건 버리기보다 원형을 남겨 이후에 판단할 수 있게 한다. 어느 소스에서 언제 받았는지 같은 수집 정보도 함께 기록하면 문제의 출발점을 찾기 쉽다.
다만 “아무 검증도 하지 않고 영원히 보관한다”는 뜻은 아니다. 보관 기간과 삭제 요구, 수집에 필요한 최소 검증은 별도로 정해야 한다. append-only나 불변성은 원본 보존을 구현하는 방법이며 모든 Bronze에 자동으로 주어지는 성질은 아니다.
재처리 — 계산이 바뀌어도 원본에서 다시 시작한다
원본 영수증과 가계부를 나눠 두는 것과 비슷하다. 가계부의 계산이 틀려도 영수증이 남아 있으면 다시 정리할 수 있지만, 계산된 합계만 남았다면 어느 항목에서 틀렸는지 되짚기 어렵다.
주문 금액을 변환하는 규칙에 오류가 있었다면 Bronze의 원본으로 Silver를 다시 만들 수 있다. 이미 외부 시스템에서 사라진 과거 기록도 보존된 범위에서는 다시 사용할 수 있다는 점이 중요하다.
재처리가 가능하려면 원본이 남아 있어야 하고, 당시 데이터를 해석할 변환 규칙도 관리해야 한다. Bronze라는 이름 자체가 언제든 과거 상태를 복원할 수 있다는 보장은 아니다.
Silver는 여러 곳에서 재사용할 정제 데이터를 만든다
정제와 정합 — 같은 대상을 같은 기준으로 다룬다
Silver는 원본의 형식과 내용을 공통 기준에 맞춘다. 중복 주문을 정리하고 금액을 숫자로 변환하며, 소스마다 다른 시간 형식이나 컬럼 이름을 맞추는 작업이 여기에 해당한다.
여러 시스템에 흩어진 같은 대상을 연결하는 작업도 필요하다. 이때 어떤 키로 같은 주문을 식별할지, 수정된 값이 들어오면 무엇을 최신으로 볼지 같은 규칙을 정한다. 단순히 빈값을 지우는 것보다 넓은 의미의 정합 작업이다.
여러 분석이 같은 정제 결과를 사용하면 각자 중복 제거와 형식 변환을 반복하지 않아도 된다. 분석마다 서로 다른 주문 수를 내는 원인도 줄일 수 있다.
공통 검증 — 통과 기준과 예외 처리 방식을 정한다
주문 번호가 없는 행을 허용할지, 금액을 변환할 수 없는 행을 어떻게 처리할지처럼 공통 품질 기준을 Silver에 모을 수 있다. 규칙을 통과한 데이터를 다음 단계로 제공하고, 실패한 행은 별도로 남겨 확인하는 방식이다.
공통 품질 기준을 통과한 데이터와 확인이 필요한 데이터를 구분한다
Silver를 통과했다는 것은 정해 둔 검증을 통과했다는 뜻이다. 모든 오류가 없다는 뜻은 아니며, Gold의 업무 규칙처럼 이후 단계에서 확인할 조건도 남을 수 있다.
같은 입력을 다시 처리해도 중복이 생기지 않게 갱신하는 것도 중요하다. MERGE나 upsert를 사용할 수 있지만, 명령 자체가 멱등성을 보장하지는 않는다. 같은 데이터를 식별하는 키와 갱신 규칙이 함께 맞아야 한다.
Gold는 소비 목적에 맞는 결과를 만든다
목적별 가공 — 같은 정제 데이터에서 다른 결과를 만든다
Silver의 주문 데이터로 매출 대시보드와 예측 모델을 만든다고 가정해보자. 대시보드에는 날짜별 매출 합계가 필요하고, 모델에는 고객별 주문 이력에서 계산한 입력값이 필요할 수 있다.
Gold는 이처럼 소비처에 맞게 집계하거나 조회하기 편한 형태로 가공한 데이터를 제공한다. 자주 사용하는 결과를 미리 만들어 두면 매번 같은 계산을 반복하는 부담도 줄일 수 있다.
같은 정제 데이터를 대시보드와 분석 모델 등 소비 목적에 맞게 가공한다
Silver와의 경계 — 공통 정제와 업무 정의를 구분한다
Silver가 여러 곳에서 재사용할 주문 기록을 정리한다면, Gold는 그 기록으로 어떤 결과를 만들지 정한다. 일별 매출에 취소 주문을 포함할지, 결제일과 주문일 중 어느 날짜로 집계할지 같은 판단이 여기에 들어간다.
따라서 Gold의 정확성은 데이터 형식만 검사해서 판단하기 어렵다. 계산식이 업무에서 말하는 매출의 정의와 일치해야 한다. 소비 목적이 다르면 같은 Silver에서 여러 Gold 결과가 나올 수 있다.
계층을 나눌 때는 다음 단계에 제공할 조건을 정해야 한다
Bronze에는 원본과 수집 정보가 남아 있는지, Silver에는 어떤 정제·검증 규칙이 적용됐는지, Gold에는 어떤 업무 정의로 계산한 결과인지 설명할 수 있어야 한다. 이 조건이 계층 사이의 계약이다.
각 계층은 다음 단계가 기대할 데이터의 상태와 기준을 명확하게 한다
이렇게 책임을 나누면 문제의 위치도 좁힐 수 있다. 원본부터 누락됐는지, 정제 과정에서 제외됐는지, 최종 계산 기준이 달라졌는지를 나눠 확인한다. 최종 숫자를 원본까지 추적하려면 변환 로직과 실행 기록도 함께 남겨야 한다.
계층 이름이나 개수를 맞추는 일보다 이런 책임을 실제 흐름에 맞게 나누는 일이 먼저다. 단계가 추가되더라도 무엇을 입력받아 어떤 조건의 데이터를 내놓는지가 명확해야 한다. 단순한 파이프라인에 의미 없이 복사본만 늘리는 것이 목적은 아니다.
마무리
메달리온 아키텍처는 원본 보존, 공통 정제, 목적별 활용을 구분하는 패턴이다. Bronze를 재처리의 출발점으로 남기고, Silver를 여러 소비자가 공유할 정제 데이터로 만들며, Gold를 실제 사용 목적에 맞춘다.
계층의 이름이 품질을 대신 보장하지는 않는다. 원본 보관 정책, 중복 처리 기준, 검증 규칙, 업무 정의를 구체적으로 정해야 한다.
이 경계가 명확하면 정제 로직을 바꿀 때 원본부터 다시 처리하고, 새로운 분석을 만들 때 기존 정제 결과를 재사용할 수 있다. 계층 분리의 효과는 폴더 수보다 데이터의 책임과 처리 기준에서 나온다.
참고 자료
- Databricks — Medallion lakehouse architecture — 계층별 역할, Bronze의 최소 검증과 Silver·Gold의 책임