해결된 질문
작성
·
2.7K
·
수정됨
0
안녕하세요 카일님 :)
데이터베이스(DB)와 데이터 웨어하우스(DW)와 관련된 질문드려요.
DB와 DW 간의 차이는 무엇인가요? 평소 막연하게 DW가 더 큰 개념이라고만 알고 있었는데, 데이터 파이프라인 관점에서 어떤 차이가 있는지 궁금합니다!
DB: mysql, postgresql
DW: bigquery
위처럼 구분지을 수 있는 게 맞을까요?
서비스 관점에서 DB와 DW가 어떻게 사용되나요?
예를 들어 방문, 결제 등의 로그를 우선 DW에 저장해두고, DB에 관계형으로 이후 저장되는 것일까요?
presto, hive와 같은 쿼리 엔진은 데이터 파이프라인에서 어떤 역할을 하는지 궁금합니다!
+) 평소 기술 블로그에서 큰 도움을 받았는데, 이렇게 강의까지 열어주셔서 감사합니다!
답변 1
1
알렌님 안녕하세요! :)
3년차 PM, 이직 1일차 회사 적응기에 간단히 말씀드렸는데, 조금 더 자세히 말씀드릴게요!
DB : Database
- 서비스에서 사용하는 데이터베이스로 웹이나 앱에서 사용하기 위한 목적으로 사용됩니다. 대부분의 서비스가 Database가 꼭 필요하지요. User의 정보, 배달 서비스라고 하면 주문 정보, 가게 정보 등의 데이터가 저장될거에요. 이 데이터는 유저에게 노출되기도 합니다(내 주문 내역에 보면 있는 것들 = DB에 있어서 보여줄거에요)
- 대표적으로 MySQL, Oracle, PostgresQL 등이 있습니다
DW : Data Warehouse
- 데이터 웨어하우스로 데이터를 저장하는 공간입니다. DB도 데이터를 저장하는 공간인데 DW는 무슨 차이가 있는가?라고 생각하면 최근 데이터 인프라 관점에선 데이터 분석은 DW에서 많이 진행합니다.
- DB(MySQL, PostgresQL) 등은 Transaction(거래)에 최적화되어 있고, 분석용으론 적합하지 않습니다. 반면에 DW는 분석에 최적화가 되어 있어요.
- DB와 DW의 큰 차이는 DB는 대부분 Index라는 개념이 존재해요. 그래서 인덱스를 고려해서 쿼리를 작성해야 실행 시간이 빠르고 인덱스를 고려하지 않으면 쿼리가 느려집니다. 또한 Row 기반 데이터베이스로 특정 SELECT를 할 때 내부적으로 Row를 모두 가지고 옵니다. 반면 DW는 대부분 Index라는 개념이 없고, 컬럼 기반 데이터베이스입니다. 컬럼 데이터 기반이라 필요한 컬럼만 SELECT해서 속도가 더 빠릅니다
- 대표적으로 BigQuery, Snowflake, Redshift 등이 있습니다
다만 DB라는 단어가 혼용되어서 데이터를 저장하면 DB라고 부르기도 합니다. 용어가 꽤 여러 관점으로 쓰이기도 해요. 그래서 저는 서비스용 DB와 분석용 DW라고 나눠서 생각하는 것을 추천드리곤 합니다.
데이터 파이프라인 관점은 많은 회사들이 다음과 같은 패턴을 보입니다
- 서비스 DB -> DW로 데이터를 옮김
- GA나 Firebase의 데이터는 클릭 몇번만 하면 자동으로 DW(BigQuery)로 옮겨짐
- Amplitude는 BigQuery로 Export하는 기능이 제공(다른 저장소도 가능)
- 한 곳에서 데이터를 모아서 활용함
활용 기준으론
- 서비스 DB : 웹, 앱 등 서비스에서 사용하기 위한 목적
- DW : 데이터 분석을 위한 목적, 데이터 분석이나 머신러닝 알고리즘 만들 때 데이터를 저장
- 만약 서비스 DB에서 데이터 분석을 위한 쿼리를 실행하고 있다면 아직 데이터 인프라가 충분히 뒷받침되지 못해 일단 서비스 DB에서 쿼리를 실행하고 있을 확률이 큽니다(대부분 DW가 없으면 이런 환경일거에요)
- 데이터 인프라가 발전했으면 대부분 DW에서 데이터 분석을 하고(속도도 빠르고 지원하는 함수도 더 편리하므로) DB 접근 권한을 잘 주지 않을거에요(개발이나 PM, CS 정도에게만 주곤 합니다)
예를 들어 방문, 결제 등의 로그를 우선 DW에 저장해두고, DB에 관계형으로 이후 저장되는 것일까요?
위 관점은 회사에서 데이터를 어떻게 저장하느냐에 따라 다릅니다. 어떤 회사에선 서버에서 바로 DW로 저장할 수도 있고, 어떤 회사에선 서버에서 DB로 저장하고 DE가 그 데이터를 DW로 옮길 수도 있습니다. 그래서 어떤 것을 어디에 저장한다는 회사마다 다르다고 생각해주시면 좋을 것 같습니다
Presto는 SQL 쿼리 엔진으로 쿼리를 실행해주는 엔진이며 Hive는 하둡 생태계에서 사용하는 SQL 쿼리 엔진과 유사하다고 생각해주시면 됩니다(더 정확히는 HiveQL을 내부적으로 맵리듀스 코드로 변환해서 실행) 둘 다 데이터를 처리해주는 쿼리 엔진으로 생각해주시면 됩니다. Presto와 Hive도 데이터 웨어하우스인가?라는 헷갈림이 있을 수 있는데 어떤 곳에선 넓은 의미에선 DW가 맞다라고 하는 경우도 있고, 어떤 경우엔 아니라고 하기도 합니다(에코 시스템이라고 볼 수는 있으나 데이터 웨어하우스까진 아닌..!)
요즘 DW라고 부르는 것은 대부분 클라우드 시스템 위의 환경이 대부분이고 데이터를 이동시키는 것, 데이터 모델링 및 최적화, 그 외에 편리한 기능, 데이터 저장 등을 모두 망라하는 시스템이라고 보시면 됩니다
말씀해주신 내용은 제가 추후에(다다다음 정도) 만들 예정인 데이터 엔지니어링 강의에서 더 자세히 다루게 될 것 같아요! 나오기까진 시간이 걸릴 것 같아 일단 이렇게 답변을 드렸어요. 혹시 궁금하신 내용이 있으시면 언제든 댓글 달아주세요 :)
기술 블로그 잘 봐주셔서 감사합니다!
상세하게 답변 주셔서 감사합니다! 다다다음 강의도 기대하겠습니다 ㅎㅎ