본문 바로가기
Developer area/Study

[Study]DB 설계 using PostgreSQL

by beeny-ds 2024. 9. 26.
버버두 플젝할 때 DB 를 통해 데이터를 관리하려고 잠깐 공부한적이 있다.
그때 공부한 바를 리마인드할 겸 포스팅한다.

당시 하려고 했던건 아래와 같다.
Superset 을 통해 대시보드를 만들고 데이터는 PostgreSQL 을 통해 관리한다.
DB 를 관리하기 위해 airflow 를 활용한다.

목차

1. PostgreSQL 이란?

2. DB 설계 시 참고 사항

3. 버버두 DB 설계

4. 버버두 DB 사용 Flow


 

1. PostgreSQL 이란?

PostgreSQL 은 MySQL, ORACLE 등과 같은 오픈 소스 데이터베이스로 속도 및 안정성 측면에서 우수하여 최근 많이 사용하고 있다고 한다.

 

특징: 다른 DB(ex. MySQL) 와 달리 대-중-소 분류가 있음 (중간에 스키마가 존재)

  • 대분류: DB
  • 중분류: Schema
  • 소분류: Table

중간에 스키마가 존재하는 이유

  1. 여러 사용자가 서로 충돌 없이 하나의 데이터베이스를 사용하는 것이 가능
  2. 데이터베이스를 여러 개의 논리적인 그룹으로 만들어 관리하기 쉬움
  3. Third-Party(?) 애플리케이션이 서로 충돌할 일 없게 다른 스키마를 사용

 

Superset 을 container 로 띄우면 Superset docker image 안에 postgresql 이 있어 데이터 마트에서 BI 로 바로 Superset 과 연동되기 때문에 Superset container 안에서 postgresql 을 사용하는게 좋다고 한다.


 

2. DB 설계 시 참고 사항

a. 데이터 웨어하우스의 3 기능

  • ① 스테이징
    • Staging 은 소스시스템으로부터 제공 받은 데이터를 아무런 변화 없이 그대로 로딩하는 저장공간 Temporary 성격의 공간으로 데이터 로딩의 첫 작업이 시작 DataStage를 사용하여 ETT 구현
    • 외부에서 보낸 데이터를 DB 에 이쁘게 적재하기 전 쌓아두는 저장 공간
  • ② ODS
    • Staging의 데이터를 데이터 정합성을 보장하는 형태로 변환하여 ODS에 적재 ODS 로딩 과정은 Staging 작업이 완료된 시점에서 Staging 테이블 안의 데이터를 대상으로 함 로딩 순서는 코드성 데이터, 마스터 데이터, 연동 데이터 순서 DataStage를 사용하여 ETT 구현
    • ODS 에는 2가지 종류의 Table 존재
      ⒜ Fact Table: 정량적인 값들이 들어오는 Table
      ⒝ Dimenstion Table: Fact Table 의 컬럼별 세부적인 정보를 담고 있는 Table
    • 스테이징에 쌓인 데이터를 DB 에 이쁘게 저장하여 관리하는 저장 공간
      Fact Table 과 Dim Table 을 분류하여 관리해야 확장성이 좋고 관리에 용이하다고 함.
  • ③ 데이터마트
    • ODS 데이터를 통해 분석용 통계정보의 생성 통계 스크립트를 사용하여 데이터 생성.
    • 데이터 분석을 위해 원하는 형태로 ODS 를 조합하여 데이터 분석가(or 다른 직무)에게 제공하기 위한 저장 공간

 

b. DB 설계를 돕는 Tool

DBeaver: 데이터베이스에 연결해서 쿼리를 보낼 수 있는 관리 툴

  • SSH 에서 직접 DB 구성하다보면 혈압오름…
    python jupyter notebook 처럼 DB 또한 DBeaver 를 사용하여 직관적이고 편하게 DB 구성할 수 있음
  • 특장점
    • 다양한 데이터베이스 지원
    • 직관적인 인터페이스
    • 오픈소스
  • 단점: 무거운 쿼리를 실행시킬 경우 다운될 수 있음

 

c. DB 쿼리를 자동으로 실행시켜주는 Tool

Airflow: 프로그래밍 방식으로 워크플로우를 작성, 예약 및 모니터링하는 오픈 소스 플랫폼

  • 유저가 DAG(대그)를 작성하여 개발한 작업을 순차적으로 실행함 (파이프라인 설계 및 개발 필요)
  • Trigger 를 통하여 파이프라인을 실행할 수 있음
  • 장점
    • Python 코드를 이용하여 파이프라인을 구현하기 때문에 확장성이 좋음
    • 데이터 인프라 관리, 데이터 웨어하우스 구축, 머신러닝/분석/실험에 데이터 환경 구성에 유용함
    • 에어플로우의 스케줄링 기능으로 DAG에 정의된 특정 시점에 트리거할 수 있을 뿐만 아니라 최종 시점과 예상되는 다음 스케줄 주기를 상세하게 알려줌
    • 백필 기능을 사용하면 과거 데이터를 손쉽게 재처리할 수 있기에 코드를 변경후 재생성이 필요한 데이터 재처리가 가능함
  • 단점
    • 파이썬 경험이 없는 경우 DAG 구성의 어려움이 있을 수 있음
    • 초기 설치는 간단해 보일지라도 작은 환경 변화에도 작동에 오류가 나는 경우가 있어 롤백하는 경우가 꽤 있음

 

3. 버버두 DB 설계

나중에 엔지니어들이 설계하는 것처럼 다시 그리려 했다가 아예 Drop 했던... 그때 그린 설계도(?)

 

버버두 개발할 때 DB 로 데이터를 관리하려고 완전 Low level 의 설계를 해봤다..

(근데 DB 설계 해봤다라고 어디서 말하고 다니진 않는다.... 이 정도하고 해봤다하는건 아니다 싶었기에..)

 

나름 Table 구성도 짜봤었다.... 이것도 해봤다하는건 아니다 싶긴 하지만...

 

스키마-①: staging

 

스키마-②: ods

 

 

스키마-③: datamart → 지출 분석계 Table


 

4. 버버두 DB 사용 Flow

이런 느낌으로 고객이 전송한 데이터를 처리하고 관리하고자 했었다... 허허


 

느낀점,,

데이터를 DB 로 관리하려다가 Drop 한 이유는 이거다.
카카오톡 플친 기능이 생각보다 너무 적었다.
우리가 생각했던건 사진을 보내주는 기능이었는데 Text 만 보내줄 수 있더라...
결국 카카오톡 기능의 한계로 인해 DB 를 구축하기 보다는 구글 스프레드 시트를 활용하는 걸 선택했다.

하지만 결국 이 업계에 오래 남기 위해서는 DB 도 잘 만져야 함을 알고 있다.

시간이 나면.... 다시 제대로 해보려한다.

 

진짜 간단하게 AWS 프리티어 EC2 > Linux 서버에서 Container 를 만들어 해보긴 했는데 너무 Low-level 인지라... 허허

대충 아래와 같이 진짜 심플하게만 해봤다. 나중에 좀 더 자세히 공부해보자.

trial 흔적.... 허허

 

반응형

'Developer area > Study' 카테고리의 다른 글

[쿠버네티스] kubectl 명령어 정리  (0) 2023.11.05
API 기초 이해하기  (0) 2023.10.29
[키워드] 개발자 용어 정리 2  (0) 2022.09.01
[키워드] 개발자 용어 정리  (0) 2022.08.04

댓글