페이지

2024년 10월 3일 목요일

3. 이렇게 관리하는 게 안정적이다

이건 어디까지나 내 생각이다. 이론이 아닌 경험에서 배운 것이라 허술할 수 있다. 만약 내가 한 기업의 데이터 분석 사업을 담당한다면, 체계를 이렇게 가져가고 싶다.

먼저, 기간계 데이터를 이용해 만드는 소스 데이터를 정의한다. 필요에 따라 추가할 수 있다. 이 데이터의 목적은 범용성이다. 원본 정보를 최대한 있는 그대로 녹이는 게 목적이다. 당연히 사이즈가 클 것이다(파이션이나 인덱스 등을 잘 관리하는 게 중요할 듯).

소스가 정의되었다면, 리포트나 캠페인 등을 목적으로하는 마트 데이터 영역을 따로 정의한다. 마트는 마트를 바라보지 않는다. 이게 기본 원칙이다. 만약, 다양한 시스템을 구축하며, 공통으로 필요하다고 생각되는 데이터가 있다면, 이런 데이터는 소스에 추가한다. 프로젝트 효율을 높이기 위해서다. 소스로 관리되는 월배치 데이터는 월초(1~5일) 사이에 배치를 끝낸다. 그래야 업무 목적의 마트들이 밀리지 않는다.

핵심은 마트들이 서로 얽히는 것을 정책적으로 막는 것이다. 그리고 정책적으로 원천을 갱신하는 거다. 이렇게 하면, 개발 효율성과 운영 효율성을 모두 가져갈 수 있을 것 같다. 그리고 불필요한 시스템은 그때그때 폐기한다. 그리고 비슷한 성격을 가진 시스템은 고도화를 통해 통합한다. 마트 간 영향도가 0이기 때문에, 고도화 프로젝트에 대한 추가 개발 리소스는 크지 않다.

2. 마트성 데이터를 활용하면, 발생할 수 있는 네 가지 문제

그러나 마트성 데이터를 활용할 경우 몇 가지 문제가 발생할 수 있다. 이들 문제 대부분은 개발 시작 시점에는 표면으로 드러나지 않는다. 배포(운영에 시스템을 반영하는 작업) 시점이나, 이후 운영 시점 그리고 향후 고도화 시점에 문제 가 붉어진다. 그 때문에 장기적인 관점에서 시스템을 운영하는 운영자라면, 앞으로 얘기할 4가지 포인트에 대해 고민해 볼 필요가 있다.

2.1. 배치일자 문제

배치는 보통 월, 주, 일 등을 주기로 시스템 결과를 갱신하는 걸 말한다. 통상 운영 리스크를 줄이기 위해, 월배치가 많이 선호된다. 월배치는 보통 당월 초에 전월까지 기록된 데이터를 활용한다. 보통은 소스 데이터가 만들어지는 것을 감안해 매월 2~15일을 기준으로 만든다.

원천이 아닌, 마트를 바라보는 경우 여기서 문제가 생긴다. 만약 마트성 데이터가 매월 15일에 만들어진다면 어떨까? 어쩔 수 없이 새로 구축하는 시스템은 16일 이후에 배치를 일정을 잡아야 할 것이다. 이런 식으로 마트가 마트를 바라보는 일이 자주 발생하면 어떨까? 배치 일자가 끊임없이 밀리게 된다.

일정이 밀리는 게 큰 문제처럼 안 보일지 모른다. 하지만 시기가 중요한 과제라면, 배치일정이 밀리는 건 큰 문제가 될 수 있다. 보험사기 적발 시기가 늦을 수 있다. 이미 가입이 끝난 고객에게 상품 가입을 권유하라고 할 수도 있다. 이런 시스템은 제 기능을 하지 못한다.

<사례> A 금융사에서 있었던 일

어떤 금융사 프로젝트에서 있었던 일이다. 고객 요청으로 소스 데이터가 아닌, 마트 데이터의 집계 결과를 이용해 분석 마트를 만들었다. 마감년월 기준으로 변수를 가져다 썼다. 그리고 배포가 임박해, 현재 시점을 기준으로 테스트를 진행했다. 그런데 데이터가 모두 비어있었다. 바라보던 데이터가 당월 기준 15일이 지나야 전전월 데이터가 적재되는 것이었다. 결국, 전전월 데이터를 가져오도록 코드를 수정하고, 모형도 다시 만들었다. 덕분에 신나게 야근했다.

2.2. 소스 마트가 고도화되거나 폐기되는 문제

두 번째 문제는 소스로 사용한 마트가 수정되거나 폐기되는 경우다. 마트는 목적을 가지고 만든다. 그렇기 때문에 상황이 바뀌면 폐기되거나 업그레이드될 수 있다. 데이터 레이아웃이 바뀌면, 변수의 자료형이나 구조, 기준 등 많은 요소가 다양하게 바뀐다.

먼저, 마트가 수정되는 경우다. 고도화 프로젝트로 기존 마트의 구조나 내용이 바뀔 수 있다. 이 경우, 운영되고 있을 내가 만든 시스템에 어떤 영향이 미칠지 알 수 없다. 보통 고도화 프로젝트에서는 영향도 분석이 선행된다. 하지만, 운영 책임자가 빈번하게 바뀌는 경우도 있다. 이 경우 히스토리 관리가 제대로 되지 않는 경우도 있다. 그러면 운영이 시작되자마자 기존 데이터를 바라보던 사업부에서 항의가 빗발친다.

두 번째는 폐기되는 경우다. 사용하지 않는 시스템은 그때그때 폐기해 주는 것이 좋다. 그런데 쓰지 않아 폐기하려던 시스템의 결과를 다른 시스템에서 사용하고 있다고 하면, 어떨까? 결론부터 말하면, 폐기할 수 없다. 정말 단순한 결과 하나만 가져다 써도 쉽게, 폐기할 수 없다. 해당 시스템을 직접 개발한 사람이 와서 정리하지 않는 한 말이다. 왜냐고? 어떤 문제가 생길지 나도 너도 모두 모르기 때문이다.

2.3. 내부로직을 정확히 알기 어려운 문제

세 번째 문제는 '내부로직'이다. 만들어진 결과를 가져와 쓰는 것은 참 편리하다. 내가 굳이 만들 필요가 없기 때문이다. 하지만, 세부적인 로직을 알 수 없다면, 설명할 수 없다. 가져다 쓴 수치에 대한 정확한 의미를 알기도 어렵다.

예를 들어, '평균 구매 금액'이란 변수가 있다고 하자. 직관적으로 이해하기 쉽다. '아 어떤 고객이 구매한 금액의 평균이구나'라고 생각할 수 있다. 하지만, 조금만 더 생각해 보면, 월평균인지, 주 평균인지, 그냥 평균인 지도 의문이다. 그리고 기간을 얼마나 고려했는지도 의문이다. 단위는 어떠한가? 지점인가? 고객인가? 상품인가? 저 문구만 보아서는 알기 어렵다. 변수 이름은 대부분은 '함축적' 으로 관리한다.

보통은 메타 관리 시스템에 변수에 대한 설명이 있다. 하지만, 내가 경험한 10개 이상의 대기업 어디에도 세부 정의를 적어놓은 시스템은 없었다. 메타 관리 시스템에 저 변수는 분명 이렇게 설명되어 있을 것이다. '평균적으로 구매한 금액을 집계한 값' 이 정도만 되어도 관리자가 엄청 성실한 거다. 설명이 없는 경우가 대부분이다.

그렇다면, 결국은 해당 변수를 만드는 로직을 받아서 확인해야 한다. 그리고 어떤 소스를 이용해 만들었는지도 알아야 한다. 코드를 직접 검토하는 게 제일 정확하지만, 제일 오래 걸린다. 로직이 간단하면 모를까 여러 데이터를 봐야 하는 경우라면 난감하기 짝이 없다. 이런 경우에는 그냥 새롭게 정의하는 편이 훨씬 낫다. 시간 절약을 위해 가져다 쓰려다가 시간이 10배는 더 들 수도 있기 때문이다. 그리고 새로 정의하는 마음이 편하다.

'대응이 되기 때문'이다.

2.4. 영향도 분석이 어려움

마지막 네 번째는 영향도 분석이 어렵다는 점이다. 마트가 마트를 바라보는 일이 많아지면, 나중에 무엇 하나 건드리기 어려워진다. 정말이다. 한 시스템을 고도화하려고 보면, 기존 시스템이 여러 개 엮이게 된다. 결과적으로 이 모든 시스템을 다 고쳐야 하는 상황이 발생할 수도 있다. 이게 왜 문제가 될까?

고도화 수행 시간이 늘어난다. 기존 시스템을 고도화하기 위해서는 복잡하게 얽힌 시스템들으 분석해야 한다. 초기에는 해볼만 하지만, 시간이 지나면, 불가능한 수준이 된다. 시스템이 늘어나면, 늘어날수록 도무지 관리가 안 되게 된다. 그리고 쉽게 시스템을 폐기하지도 못 한다. 이는 마치 뚱뚱해지는 거랑 같다. 불필요한 지방이 쌓이고, 빼기도 힘들다.

1. 소스와 마트

먼저 소스는 원장성 데이터를 말한다. 흔히 말하는 기간계 데이터를 직접 바라보고, 만든 2차 데이터다. 그리고 마트성 데이터는 이 2차 데이터를 어떤 목적을 가지고 집계하고 가공한 데이터를 말한다.

예를 들면, 월 단위로 집계되는 고객 거래 정보 데이터는 소스로 볼 수 있다. 그리고 상품추천을 위해 고객 거래 정보 등을 이용한 추천 마트는 마트성 데이터에 해당한다. 즉, 원천성 데이터는 범용성을 목적으로 구성되면, 마트성 데이터는 특수 목적을 위해 만들어진다는 차이가 있다.

하지만, 간혹 마트성 데이터에 집계된 결과가 신규 과제에서 필요한 변수와 유사한 경우가 있다. 이 경우 마트성 데이터를 잘 활용하면 좋을 수도 있다. 변수에 대한 업무정의나 검증을 하지 않아도 되기 때문이다. 그리고, 굳이 변수를 만들지 않아도 된다는 장점도 있다.

[더 알아보기] 기간계와 정보계

보통 기간계와 정보계로 나누어 데이터를 관리한다. 기간계는 운영에 사용되는 데이터를 말한다. 예를 들면, 실시간으로 쌓이는 계약이나 거래 정보를 기록하는 데이터다. 기간계 데이터베이스에 문제가 생기면, 기업 운영에 치명적인 피해가 발생한다. 반면, 정보계는 마케팅, CRM 등과 같은 업무를 목적으로 관리하는 데이터베이스다. 보통 일이나 월 단위로 기간계 데이터를 집계해 정보계에 쌓는다. 이때, 기간계에서 정보계로 직접 쌓는 데이터를 '소스'라고 정의했다.

분석 시스템 구축 시 주의할 점, 마트는 마트를 바라보지 않는다

분석 시스템 구축 프로젝트를 수행하다 보면, 다른 시스템의 결과 데이터를 사용하고 싶은 욕구가 가끔 생긴다. 만들어진 데이터를 가져다 쓰면, 굳이 로직을 새롭게 정의할 필요가 없다. 그리고 굳이 직접 코딩할 이유도 없다. 일이 줄어든다. 하지만 다른 시스템의 결과를 이용하는 경우 단기적으로는 좋지만, 중장기적으로 보았을 때 잠재적인 문제점들이 많다.

데이터 마트를 구현하는 단계는 무엇인가요?

클라우드 데이터 엔지니어는 다음을 수행하여 데이터 마트를 설정합니다.

  1. 클라우드 네이티브 데이터 플랫폼을 시작합니다.
  2. 비즈니스 데이터로 데이터 마트를 채웁니다. 데이터 형식이 올바르고 비즈니스 사용자와 관련이 있는지 확인합니다.
  3. 여러 사용자가 데이터에 액세스할 수 있도록 데이터 마트를 설정합니다. 예를 들어, 데이터 마트에 보고 대시보드를 설치합니다. 
  4. 데이터 마트가 실행될 때 계속해서 문제를 모니터링, 최적화 및 해결합니다.

데이터 마트의 구조는 무엇인가요?

데이터 마트는 이러한 구조를 사용하여 정보를 저장하고 표시합니다. 

스타

스타 구조의 중심에 팩트 테이블이 있고 여러 차원 테이블로 분기됩니다. 그 결과 스타 모양의 연결이 됩니다. 팩트 테이블은 분석 목적으로 사용할 수 있는 요약 데이터가 포함된 데이터 테이블입니다. 한편, 차원 테이블은 팩트 테이블에 설명 정보를 담고 있습니다. 각 차원 테이블은 외래 키를 사용하여 팩트 테이블에 연결됩니다. 외래 키는 제품 ID 또는 공급업체 ID와 같은 고유 식별자입니다. 

예를 들어, 판매 트랜잭션에 대한 팩트 테이블에는 다음과 같은 열이 있습니다.

  • 영업 ID
  • 제품 ID
  • 공급업체 ID
  • 판매 금액

제품의 차원 테이블에는 다음 정보가 저장됩니다.

  • 제품 ID
  • 제품 이름
  • 제품 비용

공급업체 차원 테이블에는 다음과 같은 열이 있습니다.

  • 공급업체 ID
  • 공급업체 이름
  • 구/군/시

장점

스타 구조에서 차원 테이블은 추가 테이블로 확장되지 않도록 비정규화됩니다. 즉, 차원 테이블에 중복 데이터가 포함될 수 있지만 검색 및 검색 속도가 향상됩니다. 또한 차원 테이블을 저장하는 데 필요한 공간도 줄어듭니다.

비즈니스 분석가는 스타 구조의 데이터 마트를 사용하여 복잡한 쿼리를 간단하게 만들 수 있습니다. 특정 판매 레코드를 검색할 때 데이터 관리 시스템은 팩트 테이블을 검색합니다. 데이터 마트 시스템이 올바른 레코드를 찾으면 제품 ID와 공급업체 ID를 사용하여 각 차원 테이블에서 데이터를 쿼리합니다. 

비정규화됨

비정규화된 구조는 모든 관련 데이터를 단일 테이블에 저장합니다. 팩트 테이블과 차원 테이블 간에 복잡한 결합이 없습니다. 데이터 분석가는 쿼리 속도를 향상시키기 때문에 비정규화된 데이터 마트를 사용합니다. 예를 들어, 판매 레코드 검색은 다음과 같이 비정규화된 단일 테이블에서 수행됩니다.

  • 영업 ID
  • 제품 
  • 제품 이름
  • 제품 비용
  • 모델 이름
  • 무게 
  • 크기
  • 공급업체 
  • 공급업체 이름
  • 구/군/시
  • 판매 금액

비정규화된 데이터 마트는 단일 테이블 접근 방식 때문에 실시간 보고에 적합합니다. 그러나 데이터 마트를 비정규화하면 데이터가 중복됩니다. 예를 들어, 동일한 제품 이름이 여러 레코드에 나타날 수 있습니다. 이로 인해 스토리지 공간이 추가되고 구현 비용이 많이 듭니다.

데이터 마트 유형으로 무엇이 있나요?

다음은 다양한 유형의 데이터 마트입니다. 

종속 데이터 마트

종속 데이터 마트는 중앙 집중식 데이터 웨어하우스의 정보 하위 세트로 스토리지를 채웁니다. 데이터 웨어하우스는 데이터 소스에서 모든 정보를 수집합니다. 그런 다음 데이터 마트는 데이터 웨어하우스에서 주제별 정보를 쿼리하고 검색합니다. 

장점과 단점

대부분의 데이터 관리 작업은 데이터 웨어하우스에서 수행됩니다. 즉, 비즈니스 분석가가 데이터 마트의 정보를 사용하기 위해 데이터베이스 관리에 고도로 숙련되지 않아도 됩니다. 종속 데이터 마트는 정보를 훨씬 쉽게 검색할 수 있게 만들지만 단일 장애 지점을 나타냅니다. 데이터 웨어하우스에 장애가 발생하면 연결된 모든 데이터 마트도 실패합니다. 

독립 데이터 마트

독립 데이터 마트는 중앙 데이터 웨어하우스나 다른 데이터 마트에 의존하지 않습니다. 각 데이터 마트는 데이터 웨어하우스가 아닌 소스에서 정보를 수집합니다. 독립 데이터 마트는 소규모 회사에 적합하지만 특정 부서만 정보에 액세스하고 분석하면 됩니다.

장점과 단점

기업은 비교적 쉽게 독립적인 데이터 마트를 설정할 수 있습니다. 그러나 이를 관리하기는 어려울 수 있습니다. 비즈니스 분석가는 각 데이터 마트에서 데이터베이스 관리 작업을 수행해야 하기 때문입니다. 데이터 공유와 같은 전략을 사용하여 서로 다른 데이터 마트 간에 데이터를 공유하는 것은 간단합니다. 부서에서는 다른 부서의 데이터를 읽고 자체 데이터로 데이터를 보강할 수도 있습니다.  그러나 각 부서가 보고 있는 내용을 알 수 있도록 강력한 데이터 목록 작성 전략을 마련해야 합니다. 

하이브리드 데이터 마트

하이브리드 데이터 마트는 데이터 웨어하우스와 외부 소스에서 정보를 수집합니다. 이를 통해 기업은 데이터를 데이터 웨어하우스로 보내기 전에 독립적인 데이터 소스를 유연하게 테스트할 수 있습니다. 

예를 들어, 새 제품을 출시하고 초기 판매 데이터를 분석하려고 한다고 가정해 보겠습니다. 데이터 마트는 전자 상거래 소프트웨어에서 직접 가져온 판매 정보를 사용하고 데이터 마트에서 다른 제품의 판매 레코드를 검색합니다. 제품이 스토어의 영구적인 고정 제품이 된 후 거래 세부 정보를 데이터 웨어하우스로 보냅니다.