원본 데이터를 구조화된 경로에 쌓는 설계

데이터 · 크롤링4분 읽기

데이터를 잘 수집하는 것만큼 중요한 것이 잘 쌓는 것입니다. 여러 채널에서 매일 들어오는 데이터를 아무렇게나 저장하면, 몇 달 뒤에는 어느 파일이 어느 채널의 며칠 치인지 아무도 모르는 창고가 됩니다. 이 파이프라인은 수집한 원본을 채널과 날짜로 나뉜 규칙적인 경로에 쌓아 사람도 프로그램도 원하는 데이터를 경로만 보고 찾을 수 있게 설계했습니다.

경로가 곧 색인이다

핵심 결정은 저장 경로에 의미를 담는 것이었습니다. 파일을 한 폴더에 몰아넣고 파일명으로 구분하는 대신, 원본 접두 경로 아래에 채널, 그 아래에 날짜로 계층을 나눴습니다. 이렇게 하면 특정 채널의 특정 날짜 데이터가 어디 있는지 경로만 조합하면 바로 나옵니다. 별도의 색인 테이블 없이 경로 구조 자체가 색인 역할을 합니다.

같은 날 같은 채널에서 여러 계정이나 여러 리포트가 들어올 수 있으므로, 파일명에는 계정 식별자나 리포트 종류, 실행 시각을 붙여 충돌을 막았습니다. 여러 계정을 같은 시각에 돌려도 파일이 서로 덮어쓰지 않고 나중에 파일명만 봐도 어느 계정의 무슨 리포트인지 알 수 있습니다. 경로는 채널과 날짜를, 파일명은 그 안의 세부를 담당하는 이 분업이 창고를 계속 정돈된 상태로 유지합니다.

원본은 원본대로 보존한다

이 저장소는 가공한 결과가 아니라 원본을 담는 곳으로 정했습니다. 채널에서 받은 데이터를 최소한으로만 손봐서 그대로 쌓고 무거운 가공이나 집계는 이 위에서 별도로 하도록 분리했습니다. 원본을 원본대로 남겨 두면, 나중에 가공 로직이 바뀌거나 새로운 분석이 필요해져도 이미 쌓인 원본에서 다시 시작할 수 있습니다. 원본을 덮어쓰며 가공하면 그 시점의 판단에 갇혀 나중에 다르게 보고 싶어도 되돌릴 수 없습니다.

원본 보존이라고 해서 받은 그대로 아무 정리 없이 쌓는다는 뜻은 아닙니다. 채널마다 다른 최소한의 표기 차이는 이 단계에서 흡수합니다. 예컨대 어떤 광고 플랫폼은 금액을 백만분의 일 단위로 돌려주는데, 이런 값은 원 단위로 환산해 저장합니다. 헤더 없는 표 형식 데이터도 컬럼 이름을 붙인 JSON으로 바꿔 둡니다. 이런 정규화는 데이터의 의미를 바꾸는 가공이 아니라, 이후 어떤 분석이든 공통으로 필요한 최소한의 정돈입니다.

단위와 형식을 여기서 통일한다

여러 채널을 한곳에 모으면 채널마다 다른 표기가 뒤섞입니다. 금액 단위가 다르고 날짜 형식이 다르고 성과를 직접과 간접으로 나누는 채널이 있는가 하면 합쳐 주는 채널도 있습니다. 이 차이를 다운스트림이 매번 감당하게 하면, 분석 코드마다 채널별 예외 처리가 번져 유지보수가 어려워집니다. 그래서 단위와 형식의 통일은 적재 단계에서 한 번만 하고 그 뒤로는 정돈된 데이터만 흐르게 했습니다.

수집한 값의 타입도 이때 정리합니다. 원본이 전부 문자열이더라도 노출 수나 금액처럼 숫자로 다뤄야 하는 값은 숫자로 바꿔 둡니다. 이렇게 이름과 단위와 타입까지 정돈된 데이터가 쌓이면, 분석과 BI는 채널의 사정을 몰라도 같은 방식으로 데이터를 읽을 수 있습니다. 이 정규화가 어디서 이뤄지는지는 비동기 리포트 API 수집 패턴에서 더 자세히 다룹니다.

다운스트림은 적재층만 바라본다

이 구조의 또 다른 이점은 수집과 활용을 깔끔하게 갈라놓는다는 점입니다. 분석 도구나 대시보드, BI는 채널에 직접 접속하지 않고 이 적재된 데이터만 바라봅니다. 채널의 로그인 방식이 바뀌거나 API 규격이 달라져도, 수집기만 고치면 되고 다운스트림은 영향을 받지 않습니다. 수집의 복잡함이 활용 단계로 새어 나가지 않도록 적재층이 경계 역할을 합니다.

이렇게 경로 규칙, 원본 보존, 단위 정규화, 다운스트림 분리를 한 적재층에 모아 두면, 채널이 늘어도 창고는 규칙적으로 확장되고 활용 쪽은 늘 같은 방식으로 데이터를 읽습니다. 이 적재층이 전체 파이프라인에서 어떤 자리에 있는지는 멀티채널 광고·정산 데이터 수집 파이프라인 사례에서 볼 수 있습니다.

자주 묻는 질문

왜 파일명이 아니라 경로로 데이터를 나누나요?

경로에 채널과 날짜를 담으면 별도의 색인 없이 경로 조합만으로 원하는 데이터를 찾을 수 있기 때문입니다. 모든 파일을 한 폴더에 두고 파일명으로만 구분하면, 파일이 쌓일수록 목록을 훑어 찾아야 해 느리고 관리도 어렵습니다. 경로는 큰 분류를, 파일명은 그 안의 세부를 맡는 분업이 가장 정돈된 구조입니다.

원본을 그대로 쌓으면 가공은 언제 하나요?

가공과 집계는 이 적재층 위에서 별도로 합니다. 원본을 원본대로 보존해 두면 가공 로직이 바뀌거나 새 분석이 필요할 때 다시 원본에서 시작할 수 있습니다. 원본을 덮어쓰며 가공하면 그 시점의 판단에 갇혀 나중에 되돌릴 수 없으므로, 원본 보존과 가공 분리를 원칙으로 삼았습니다.

채널마다 단위가 다른데 어떻게 맞추나요?

단위와 형식의 통일은 적재 단계에서 한 번만 합니다. 금액 단위가 다르면 공통 단위로 환산하고 형식이 제각각인 값도 정돈된 형태로 바꿔 저장합니다. 이렇게 하면 다운스트림은 채널별 예외를 신경 쓰지 않고 같은 방식으로 데이터를 읽을 수 있어 분석 코드가 단순해집니다.

#데이터레이크#데이터적재#클라우드스토리지#데이터파이프라인

업무자동화 구축이 필요하신가요?

무료 상담 신청