[아키텍처] 메달리온 아키텍처 Medalion Architecture 와 게임 데이터
데이터브릭스 세미나를 갔을 때 많이 들었던 말 중 하나가 메달리온 아키텍쳐였다.
나도 슬슬 적용을 해보고자 해서, 메달리온 아키텍처에 대해 정리해보는 글을 써보기루!!
1.Medalion 아키텍처란 ?
메달리온 ! 우리가 생각하는 금메달, 은메달, 동메달 메달 맞다.
이 금,은,동에서 착안해서 데이터가 아키텍처의 각 단계를 통과하는 동안 브론즈 => 실버 => 골드 단계로 데이터를 정제해나가는 것을 뜻한다.
그럼, 브론즈, 실버, 골드에 대해서 각각 알아보자 ! 아마 이 개념까지하면 메달리온 아키텍처에 대해 더 잘 이해할 수 있을 것이다.
2.Bronze / Silver / Gold
(1) 브론즈 데이터
우리가 흔히 "로그" 라고 부르는 서버나, API등을 통해 다이렉트로 수집하는 원본 raw 데이터를 뜻한다.
이 로그들은 중복이 있을 수도 있고, 시간대가 UTC로 들어오기도 하며 한 컬럼 내에 많은 정보가 json 형태로 들어오기도 할 것이다.
이렇게 되면, 우리가 데이터를 사용할 때마다 매번 정제를 해줘야하고, 쿼리도 복잡하게 짤 수 밖에 없으며 모든 데이터가 다 들어가있기 때문에 쿼리 비용또한 많이 잡아먹는 문제가 있다. 그래서 이 데이터는 실무단에서 사용하기가 굉장히 어렵다.
(2) 실버 데이터
실버 데이터는, 브론즈 데이터의 필터링, 클렌징, 변환 등을 통해 사용하기 편하게 정제한 데이터를 뜻한다.
중복 제거, 데이터 타입 변경 등을 적용하여 log 형식이지만 누가봐도 사용하기 편한 느낌의 데이터가 탄생하는 것이다.
얘를 들어 위 데이터 중 rewards라는 컬럼은 아래와 같이 STRING 형식으로 되어있어서 코인 보상을 몇개 받았는지 알기가 너무 힘들다. 그래서 실버 데이터로 만들면서 정규 표현식 쿼리 등을 통해 coins: 다음부터 ; 앞까지 등장하는 숫자만 추출해서 NUMERIC 타입의 rewards_coins라는 컬럼으로 만들면 나중에 SELECT만 하면 되기에 매우 편한 것이다!
rewards |
coins:1500; item:itm_2345-Potion of Power-rare |
rewards_coins | reward_item |
1500 | itm_2345-Potion of Power-rare |
(3) 골드 데이터
실버 데이터는 브론즈 데이터를 가공해서 이쁘게 만든 것이라 치면, 골드 데이터는 무엇일까?
골드 데이터는 예쁘게 정제된 실버 데이터를 활용해, 여러 집계함수를 사용해서 대시보드나 리포트 등에 바로 적용할 수 있게 통계값으로 계산한 데이터들을 보통 일컫는다. 즉 비즈니스 단에서 바로 사용할 수 있게 집계된 통계값 정도로 이해하면 될 것이다.
보통 유저 마트라고해서, 아래와 같이 유저 단위로 집계하는 값과
아래 처럼 국가별, 리전별 통계값을 제공해주는 타입 두가지 정도로 나뉜다.
때에 따라 유저 마트 단을 실버 데이터로 부르기도 한다.
이렇게 보면 메달리온 아키텍처에 대해 충분히 이해할 수 있을 것이라 생각함 !!
*메달리온 아키텍처를 조금 더 효율적으로 구성하기 위해서는 브실 데이터로 골드를 어떻게 구성할지 보단,
골드 데이터를 먼저 설계하고 이 골드 데이터를 만들기 위해 브실데이터를 어떻게 갖고가면 좋을지 역으로 고민하면 훨씬 수월하게 데이터를 설계할 수 있다. 라고 우리 킹갓임페럴충무공마제스티 대존잘 기술팀 팀장님께서 말씀해주셨다.
그럼 이 메달리온 데이터, 게임 회사에서 어떤식으로 적용되고 있을까?
3.게임 회사에서는 어떻게 사용하고 있을까?
1. 우선 로그 데이터를 수집해온다.
2. 이 데이터들을 정제하는 프로시저들을 작성하고, 매일 schedule을 돌려 실버 데이터를 만드는 job을 실행시켜준다.
3. 그렇게 생긴 실버 데이터를 집계하는 프로시저들을 작성하고, schedule을 돌려 최종적으로 대시보드, 리포트 등에 사용하는 통계형태의 데이터가 나오는 것이다. 그럼 우리는 이 통계 데이터들을 통해 사업/개발/경영진이 보는 대시보드나 리포트를 생성한다.
즉, 로그로 정제된 로그를 만드는 프로시저 생성 -> 정제된 로그로 통계 테이블을 만드는 프로시저 생성 (물론, 더 빨리 보려면 일단위로 돌리는 시간을 줄이면 된다.)
이런식으로 돌아가는 편이다. 이건 게임 데이터뿐만 아니라 수많은 IT회사에서도 사용하지 않을까 싶다.
4.메달리온 아키텍처를 사용하는 이유
브실골 데이터의 뜻을 보면 대충 유추가 가겠지만, raw 데이터로 대시보드를 만든다? 하면 정말 끔찍하다.... ㅋㅋㅋ ;;
1.log 데이터를 활용한 쿼리는 하루에 한번만 실행하고, 계속 빈번하게 실행하는 테이블은 이미 집계가 완료된 적은 양의 테이블을 사용함으로써 쿼리 속도를 높히고, 비용을 감소시킬 수 있다.
2.작업자의 편의가 증가한다. 매번 로그 데이터를 정제할 필요 없이 실버 데이터를 통해 데이터 분석을 하기도 하며
EDA 시 골드 데이터를 통해 바로바로 확인할 수 있기 때문에 분석에 들어가는 시간을 줄일 수 있다.
3.사내 데이터 접근성을 높혀준다. 로그 데이터로만 데이터 관리가 되면 , 쿼리를 모르는 사람들은 필요한 자료를 뽑기 위해 하루 종일 노가다를 해야한다. 하지만 이미 정제된 데이터를 사용하면 쿼리를 모르는 사람들일지라도 엑셀로 바로 불러와 이것저것 하기에 충분하다.
5.마무리
이렇게 메달리온 아키텍처에 대한 정리가 끝났다! 평소에 계속 사용하고 있었지만 메달리온 아키텍처라는 네이밍이 있는지는 이번에 데이터브릭스 세미나를 가면서 처음 알게되었다. 앞으로도 틈틈히 더 배워나가야겠다... !!!!!! 그럼 오늘의 글은 여기서 맘우리~
참고자료
https://www.databricks.com/kr/glossary/medallion-architecture
내 머리