데이터 웨어하우스(data warehouse)란
영어 그대로 데이터 창고를 말한다.
그러면 데이터 창고가 왜 필요할까?
창고는 대량의 물건을 쌓아두고 사용하기 위한 장소이다.
데이터 웨어하우스도 똑같다. 대규모의 데이터를 처리(사용)할 때
단일(작은) 데이터베이스로는 충분하지 않아 데이터 창고를 사용한다.
데이터를 쌓아두고 사용하는 장소는 데이터 웨어하우스 말고
데이터 레이크, 데이터 마트도 있지만 모두 사용목적이 다르다.
이 챕터에서는 데이터 웨어하우스를 알아보자!
데이터 웨어하우스의 가장 큰 사용목적은
비즈니스 관점에서 사용자(고객, 직원 등) 또는 부서(마케팅, HR 등)에
의사결정을 지원하기 위해 방대한 데이터를 효율적으로 통합하여
분석 및 보고하는 것이다.
무슨 말인지 아래 그림을 보면서 이해하자.
위 쇼핑몰의 데이터 웨어하우스에서는
각종 데이터 소스(판매관리, 재고관리 등)에서 데이터를 수집하여
사용자(고객, 직원 등) 또는 부서(마케팅, HR 등)가
사용하기 유용(의사결정 지원)하도록 데이터를 통합해준다.
데이터 소스와 분석 데이터 예시를 3개씩만 들었지만 사실 엄청 많을 것이다.
직원을 뽑기 위한 지원자 데이터 소스 그리고 그 데이터 소스를 통합해
인사과에서 사용할 수 있는 HR정보가 또 다른 예시이다.
그러면 데이터를 통합(재구조화)해야 하는 이유와 방법을 알아보자.
위 예시에서 각종 데이터 소스에서 데이터를 수집한다고 했다.
그 의미는 수집하는 데이터 소스와 그 데이터가 저장되어 있는 데이터베이스까지
유형과 구조가 천차만별일 수 있어 분석을 위해서는 통합해야 한다는 것이다.
그 통합(재구조화) 방법을 ETL이라고 한다.
먼저 여러 데이터베이스에서 필요한 데이터 소스를 추출(Extract)하고
통합 저장할 수 있도록 동일한 구조로 변환(Transform)한 다음
테이블(릴레이션)에 적재(Load)한다.
이러한 과정이 보통 데이터 웨어하우스 안에서 이뤄지지만
데이터 웨어하우스에 들어오기 전에 먼저 ETL이 이루어지고
데이터 웨어하우스로 들어오는 경우도 있다.
ETL은 데이터 웨어하우스 안팎의 데이터 이동 과정에서 정말 많이 사용된다.
그다음 과정은 차원모델링인데
ETL 이후 테이블(릴레이션)을 차원모델(Dimensional Model)로 저장하는 것이다.
왜 차원모델로 만들어 저장하는지 알아보자.
차원모델링의 목적은 사용자가 데이터를 분석할 때
빠르고 쉽게 데이터 검색을 할 수 있도록 데이터베이스를 최적화하는 것을 말한다.
일반적으로 데이터 소스에서 ETL을 통해 가공된 데이터는 정규화된 데이터베이스에 저장된다.
사용자가 분석을 하려면 숫자정보(수량, 가격, 등)의 집계가 필요한데 정규화챕터(링크)에서 배운 것처럼
정규화된 데이터베이스는 집계시 JOIN이 많이 발생해 속도가 느려진다.
따라서 차원모델링은 분석에 최적화되도록
숫자정보 중심으로 테이블을 비정규화시킨다.
이것을 스타 스키마라고 하는데 숫자중심인 팩트테이블과 그 주위에 차원테이블로 구성되어있다.
(스타 스키마 구성 방법은 나중에 다시 다룰예정이다)
다만 비정규화챕터(링크)에서 배운 것같이 비정규화된 데이터베이스는
트랜잭션처리를 못하니 스타 스키마도 트랜잭션처리에는 부적합하다.
이렇게 스타 스키마로 차원모델링을 하면 데이터베이스 전문가가 아닌
일반 사용자가 볼 때도 복잡합 정규형 테이블보다 훨씬 이해하기 쉽다.
요약하자면 데이터웨어하우스 사용은
각종 유형의 흩어져있는 데이터를 통합해서
사용자 의사결정 지원에 도움을 주며
사용자가 분석, 이해하기 쉽게 만들어준다.
데이터 웨어하우스가 꼭 위에서 설명한 프로세스로
이루어지는 것은 아니고 사용목적에 따라 다양한 아키텍처가 존재한다.
더 자세하게 공부하고 싶으면
Independent Data Marts,
Kimball's Bus Matrix,
Inmon's CIF(Corporate Information Factory)
아키텍처에 대해 알아보기 바란다.
'공부-Data Engineer > 데이터베이스' 카테고리의 다른 글
[쉽게 설명한] 데이터베이스 정규화 (5) | 2020.06.11 |
---|---|
[쉽게 설명한] 데이터베이스 비정규화, 역정규화 (1) | 2020.06.10 |
[쉽게 설명한] OLTP, OLAP (0) | 2020.06.09 |
[쉽게 설명한] NoSQL (0) | 2020.06.08 |
[쉽게 설명한] 관계형 데이터베이스 (0) | 2020.06.04 |