파이프라인 설명에 앞서 Data의 구성과 데이터 모델링에 이용할 방법에 대해 설명하고 넘어가고자 한다.
가상의 음원 사이트이자, 이벤트 로그를 생성하는 프로그램으로 Eventsim 이라는 오픈소스를 이용하였다. 이 프로그램은 Spotify와 같은 음악 플랫폼에서 발생하는 이벤트를 모방하여 로그를 생성한다. 생성된 데이터는 실제 사용자의 활동과 매우 유사하지만, 완전히 가상이며 실제 사용자 행동을 기반으로 하지 않는다.
다음은 해당 프로그램에서 생성하는 로그이다.
아래는 모든 이벤트에서 공통적으로 생성되는 데이터이다.
item | description |
---|---|
ts | 이벤트 발생 시간 |
level | 사용자의 구독 여부 (free, paid) |
city | 접속 도시 |
state | 접속 도시가 속한 주 |
userAgent | 사용자 소프트웨어의 식별 정보를 담고 있는 request header |
lon | 경도 |
lat | 위도 |
userId | 사용자 ID |
gender | 성별 |
registration | 회원가입 시간 |
sessionId | 세션 ID |
itemInSession | 현재 이벤트의 세션 내 발생 순서 |
zip | 우편번호 |
tag | 그 외 추가정보 |
firstName | 이름 |
lastName | 성 |
사용자 인증과 관련된 이벤트들이 저장된 로그이다. 로그인, 로그아웃등의 이벤트들이 기록되어 있다.
item | description |
---|---|
success | 성공 여부 |
음악 듣는 것과 관련한 이벤트들이 저장된 로그이다.
item | description |
---|---|
artist | 음악가 |
song | 음악 제목 |
duration | 음악 재생 시간 |
어플리케이션 내 페이지 방문 이벤트들이 저장된 로그이다.
item | description |
---|---|
page | 방문한 페이지 명 |
method | 요청한 HTTP method의 종류 |
status | 응답 상태 |
auth | 요청을 보낸 사용자가 유효한지 여부 (로그인, 로그아웃) |
사용자의 구독 및 구독 취소 이벤트들의 로그이다.
수집한 데이터들을 일관성 있는 형태로 저장하기 위해서는 기준이 될 방법을 설정할 필요가 있었다.
여기에서 Medallion Architecture가 데이터를 단계별로 작업을 수행해 Data Lake에 저장하기에 적합하다 판단하여 이용하게 되었다.
여러 장점이 있는데 일단 간단한 모델이라는 점과 데이터를 단계별로 논리적으로 처리할 수 있다는 점이 본 프로젝트에서 이용하기에 적합하다고 생각하였다.
같은 데이터를 여러 단계에 거쳐 여러번 저장하기에 용량이 커진다는 단점이 있긴하나, 대용량의 Semi 내지 Unstructured Data를 저장하기에는 정형화된 데이터를 저장하는 RDBMS나 Datawarehouse 보다는 Data Lake를 이용하는게 적합하다 생각해 이를 이용하였다.
Medallion Architecture에 대해 아래에 간단히 설명해 두었다.
Medallion Architecture는 Data Lakehouse에서 데이터를 논리적으로 구성하기 위해 사용되는 데이터 디자인 패턴이다. 데이터를 Bronze -> Silver -> Gold 세 단계로 나누어 각 단계를 거칠 때마다 데이터의 구조와 품질을 점진적으로 개선하는 것을 목표로 한다. 따라서 Multi-hop Architecture로 불리기도 한다.
해당 모델의 장점은 다음과 같다.
간단한 데이터 모델 : 복잡한 구조나 관계를 간소화하여 데이터를 효율적으로 처리
점진적인 ETL 가능 : ETL(추출, 변환, 적재) 작업을 점진적으로 수행할 수 있어서, 새로운 데이터를 추가하거나 수정할 때 기존 데이터와 효율적으로 통합 가능
원시 데이터에서 언제든지 테이블을 재생성 가능 : 원시 데이터에서부터 언제든지 테이블을 재생성하거나 업데이트할 수 있어, 데이터 손실 없이 데이터를 관리 가능
아래는 아키텍처의 각 단계 이다.
다음 편에서 어떻게 데이터를 추출하여 Bronze layer에 저장하였는지 다룰 예정이다.