포스트

[이제와서 시작하는 Metabase 마스터하기 #3] 첫 데이터베이스 연결과 데이터 탐색

[이제와서 시작하는 Metabase 마스터하기 #3] 첫 데이터베이스 연결과 데이터 탐색

⚡ 빠른 답변

Q: 처음부터 실제 데이터베이스를 연결해야 하나요? A: 아닙니다! Metabase에 샘플 데이터가 내장되어 있어요. 먼저 샘플로 연습하는 게 훨씬 안전합니다.

Q: 샘플 데이터에는 뭐가 있나요? A: Orders(주문), Products(상품), People(고객), Reviews(리뷰) 4개 테이블이 있습니다. 실제 쇼핑몰 데이터처럼 구성되어 있어요.

Q: 실제 DB 연결은 어렵나요? A: PostgreSQL, MySQL은 호스트, 포트, 계정만 입력하면 끝입니다. 5분이면 충분해요!


시리즈 소개

“이제와서 시작하는 Metabase 마스터하기” 세 번째 시간입니다!

지난 시간에 Metabase를 설치했으니, 이제 데이터를 둘러볼 차례입니다!

“어? 데이터베이스 연결해야 하는 거 아니에요?”

→ 걱정하지 마세요! Metabase에는 이미 샘플 데이터가 준비되어 있습니다. 실제 데이터베이스 연결은 나중에 해도 됩니다!

이 글에서 할 것:

  • ✅ 샘플 데이터베이스로 데이터 탐색하기 (지금 바로!)
  • ✅ 테이블 구조 이해하기 (쉽게!)
  • ✅ 다음 시간 차트 만들기 준비 완료!

나중에 필요하면:

  • 실제 데이터베이스 연결 방법 (PostgreSQL, MySQL 등)

💡 초보자 팁: 처음에는 샘플 데이터로 연습하세요! 실제 데이터베이스 연결은 Metabase가 익숙해진 다음에 해도 늦지 않아요.

1. 샘플 데이터베이스로 시작하기

좋은 소식! Metabase를 설치하면 샘플 데이터베이스가 자동으로 포함되어 있습니다!

1.1 샘플 데이터베이스란?

“Sample Database”는 연습용 데이터입니다.

마치 엑셀을 처음 배울 때 “샘플.xlsx” 파일로 연습하는 것처럼, Metabase도 연습용 데이터를 제공합니다.

어떤 데이터가 있나요?

샘플 데이터베이스에는 가상의 이커머스 회사 데이터가 들어있습니다:

  • 📦 Orders (주문): 고객들이 주문한 내역
  • 🛍️ Products (제품): 판매하는 제품 정보
  • 👤 People (사람들): 고객 정보
  • Reviews (리뷰): 제품 리뷰

왜 샘플 데이터로 시작하나요?

  1. 바로 연습 가능 - 데이터베이스 연결 없이 즉시 시작
  2. 안전함 - 실제 회사 데이터가 아니라 마음껏 실험 가능
  3. 완벽한 학습 도구 - Metabase 기능을 모두 배울 수 있음

💡 초보자 팁: 실제 데이터베이스 연결은 Metabase를 충분히 익힌 후에! 지금은 샘플 데이터로 편하게 연습하세요.

1.2 샘플 데이터베이스 찾기

Metabase에서 샘플 데이터베이스 찾는 방법:

  1. Metabase 메인 화면 열기 (http://localhost:3000)
  2. 왼쪽 메뉴에서 “Browse data” 클릭 (또는 홈 화면에서 데이터베이스 아이콘 클릭)
  3. “Sample Database” 보이나요? 바로 그겁니다! 🎉

못 찾겠어요… → 화면 오른쪽 위 “+ New” 버튼 옆에 데이터베이스 아이콘을 찾아보세요. → 또는 화면 중간에 “Our analytics” 섹션에서 “Sample Database” 찾기


2. 샘플 데이터 둘러보기 (실습)

이제 직접 데이터를 구경해봅시다! 클릭만으로 가능합니다.

2.1 첫 번째 테이블 열어보기: Orders (주문)

따라해보세요:

  1. “Sample Database” 클릭
  2. “Orders” 테이블 클릭
  3. 화면에 데이터가 주르륵! 🎉

보이는 것들:

표 형태로 데이터가 나타납니다:

1
2
3
4
ID | User ID | Product ID | Subtotal | Tax | Total | Created At | ...
1  | 1       | 1          | $37.88   | ... | ...   | 2025-01-15 | ...
2  | 1       | 2          | $44.22   | ... | ...   | 2025-01-16 | ...
...

이게 뭐죠?

  • 각 행 = 주문 하나
  • 각 열 = 주문 정보 (누가, 뭘, 얼마에, 언제)
  • ID = 주문 번호 (1, 2, 3…)
  • User ID = 고객 번호
  • Total = 총 금액

엑셀이랑 비슷하네요! → 맞습니다! 엑셀 스프레드시트랑 똑같다고 생각하면 됩니다.

2.2 다른 테이블들도 구경하기

이번엔 “Products” 테이블을 봅시다:

  1. 왼쪽에서 “Products” 클릭 (또는 뒤로 가서 다시 선택)
  2. 제품 목록이 나타납니다

보이는 정보:

1
2
3
4
ID | Title          | Category  | Price  | Rating | ...
1  | Rustic Paper   | Gadget    | $22.30 | 3.9    | ...
2  | Small Marble   | Gizmo     | $64.77 | 4.0    | ...
...

마찬가지로:

  • People = 고객 정보 (이름, 주소, 가입일 등)
  • Reviews = 제품 리뷰 (평점, 댓글 등)

💡 초보자 팁: 각 테이블을 클릭해서 어떤 데이터가 있는지 구경해보세요! 망가뜨릴 수 없으니 마음껏 클릭하세요.

2.3 테이블 이해하기: “무슨 데이터가 어디 있나요?”

4개 테이블의 역할:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
📦 Orders (주문)
   → 고객이 뭘 샀는지 기록
   → 예: "1번 고객이 1번 제품을 $37.88에 구매"

🛍️ Products (제품)
   → 판매하는 제품 정보
   → 예: "1번 제품 = Rustic Paper, 가격 $22.30"

👤 People (사람들)
   → 고객 정보
   → 예: "1번 고객 = Hudson Borer, 주소..."

⭐ Reviews (리뷰)
   → 고객이 남긴 제품 리뷰
   → 예: "3번 고객이 5번 제품에 4점 평가"

테이블끼리 연결되어 있어요:

  • Orders의 “User ID” → People의 “ID”와 연결
  • Orders의 “Product ID” → Products의 “ID”와 연결

이렇게 연결해서 “1번 주문은 Hudson Borer(고객)가 Rustic Paper(제품)를 산 거구나!” 알 수 있습니다.

💡 초보자 팁: 지금은 “아 테이블이 여러 개구나, 서로 연결되어 있구나” 정도만 이해하면 충분합니다! 나중에 차트 만들 때 자연스럽게 이해될 거예요.

2.4 데이터 필터링 해보기

“Orders 테이블에서 100달러 이상 주문만 보고 싶어요!”

간단합니다:

  1. Orders 테이블 열기
  2. “Total” 컬럼 헤더 클릭
  3. “Filter by this column” 선택
  4. “Greater than” 선택
  5. “100” 입력
  6. 완성! 100달러 이상 주문만 보입니다! 🎉

다른 필터도 해보세요:

  • 날짜 필터: “2025년 1월 주문만”
  • 카테고리 필터: “Gadget 제품만”
  • 정렬: “가격 높은 순”

💡 초보자 팁: 이게 바로 “데이터 탐색”입니다! 클릭 몇 번으로 원하는 데이터만 골라서 볼 수 있어요.


3. 다음 단계: 차트 만들 준비 완료!

축하합니다! 샘플 데이터를 성공적으로 둘러봤습니다!

지금까지 한 것: ✅ 샘플 데이터베이스 찾기 ✅ 4개 테이블 구경하기 ✅ 데이터 필터링 해보기 ✅ 테이블 구조 이해하기

다음 글에서 할 것:

  • 📊 첫 차트 만들기! (클릭만으로)
  • 🎨 예쁜 그래프로 변환하기
  • 📈 “지난 달 매출은?” 같은 질문에 답하기

준비 되셨나요? 다음 글이 진짜 재미있습니다! 🚀


부록: 실제 데이터베이스 연결 (고급)

💡 초보자는 건너뛰세요! 아래 내용은 실제 데이터베이스를 연결할 때 필요합니다. Metabase에 익숙해진 후에 다시 보세요!

클릭: PostgreSQL, MySQL 등 실제 DB 연결 방법

PostgreSQL 연결하기

가장 많이 사용되는 PostgreSQL 연결 방법:

  1. Admin 메뉴 → Databases → Add database 클릭

  2. 연결 정보 입력:

1
2
3
4
5
6
7
Display name: 프로덕션 DB
Database type: PostgreSQL
Host: localhost (또는 your-host.com)
Port: 5432
Database name: your_database
Username: metabase_user
Password: your_password
  1. 고급 옵션:
1
2
3
4
5
6
7
# SSL 설정
Use a secure connection (SSL): 활성화
SSL Mode: require

# 추가 연결 파라미터
Additional JDBC connection string options:
?currentSchema=public&ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory

2.2 MySQL/MariaDB 연결

1
2
3
4
5
6
7
8
9
10
11
Display name: MySQL 분석 DB
Database type: MySQL
Host: mysql.example.com
Port: 3306
Database name: analytics_db
Username: metabase_user
Password: your_password

# 추가 옵션
Additional JDBC connection string options:
?useSSL=false&serverTimezone=Asia/Seoul

2.3 MongoDB 연결

NoSQL 데이터베이스 연결:

1
2
3
4
5
6
7
8
9
10
11
12
Display name: MongoDB 로그 DB
Database type: MongoDB
Host: mongodb.example.com
Port: 27017
Database name: logs
Username: metabase_user
Password: your_password
Authentication database: admin

# Connection String 방식
Use connection string: 활성화
mongodb://user:password@host:27017/database?authSource=admin

2.4 BigQuery 연결

Google Cloud BigQuery 설정:

  1. 서비스 계정 생성:
    1
    2
    
    # GCP Console에서 서비스 계정 생성
    # JSON 키 다운로드
    
  2. Metabase 설정:
    1
    2
    3
    4
    5
    
    Display name: BigQuery DW
    Database type: BigQuery
    Project ID: your-project-id
    Dataset ID: your_dataset
    Service account JSON: [JSON 내용 붙여넣기]
    

2.5 Snowflake 연결

1
2
3
4
5
6
7
8
9
Display name: Snowflake DW
Database type: Snowflake
Account: your-account.snowflakecomputing.com
Username: metabase_user
Password: your_password
Database: ANALYTICS
Schema: PUBLIC
Warehouse: COMPUTE_WH
Role: METABASE_ROLE

3. 연결 테스트와 트러블슈팅

3.1 연결 테스트

sequenceDiagram
    participant M as Metabase
    participant D as Database
    M->>D: 연결 요청
    D->>D: 인증 확인
    D->>D: 권한 검증
    D->>M: 연결 성공/실패
    M->>M: 스키마 스캔

3.2 자주 발생하는 오류와 해결 방법

연결 시간 초과

1
2
3
4
5
6
문제: Couldn't connect to database
원인: 방화벽 또는 네트워크 문제
해결:
  1. 방화벽 규칙 확인
  2. Database 화이트리스트에 Metabase IP 추가
  3. VPN 또는 SSH 터널 사용

인증 실패

1
2
3
4
5
6
문제: Authentication failed
원인: 잘못된 자격 증명
해결:
  1. 사용자명/비밀번호 재확인
  2. 데이터베이스 사용자 권한 확인
  3. 비밀번호 특수문자 이스케이프

SSL 오류

1
2
3
4
5
6
문제: SSL connection required
원인: SSL 설정 누락
해결:
  1. SSL 옵션 활성화
  2. 인증서 파일 경로 지정
  3. JDBC URL에 SSL 파라미터 추가

4. 데이터 스키마 탐색

4.1 자동 스키마 스캔

Metabase는 연결 시 자동으로 스키마를 스캔합니다:

graph TD
    A[Database 연결] --> B[스키마 스캔]
    B --> C[테이블 목록]
    C --> D[컬럼 정보]
    D --> E[데이터 타입]
    E --> F[샘플 데이터]
    F --> G[메타데이터 생성]

4.2 Data Model 페이지

Admin → Data Model에서 확인 가능한 정보:

  • 테이블 목록: 모든 테이블과 뷰
  • 컬럼 정보: 이름, 타입, 설명
  • 관계: Foreign Key 관계
  • 가시성: 숨김/표시 설정

4.3 테이블 메타데이터 설정

각 테이블에 대해 설정 가능한 항목:

1
2
3
4
5
6
7
# 테이블 설정
Display name: 주문 내역
Description: 고객 주문 정보를 저장하는 테이블
Visibility:
  - Queryable: 쿼리 가능
  - Hidden: 숨김
  - Technical: 기술 테이블

5. 컬럼 메타데이터 최적화

5.1 Field Type 설정

올바른 Field Type 설정이 중요합니다:

Original Type Metabase Type 용도
VARCHAR Name 이름 필드
VARCHAR Email 이메일 주소
VARCHAR URL 웹 주소
INTEGER Foreign Key 관계 설정
TIMESTAMP Creation timestamp 생성 시간
DECIMAL Currency 통화
VARCHAR Category 카테고리
FLOAT Latitude/Longitude 위치 정보

5.2 Display Values 설정

Foreign Key 표시 방법 설정:

1
2
3
4
예시: orders 테이블의 customer_id
1. customer_id → customers 테이블 연결
2. Display value: customer_name 선택
3. 결과: 주문 목록에서 고객 ID 대신 이름 표시

5.3 필터링 옵션

1
2
3
4
5
Filtering on this field:
  - Plain input box: 일반 입력
  - Search box: 검색 박스
  - A list of all values: 전체 값 목록
  - Dropdown: 드롭다운

6. 테이블 관계 설정

6.1 Foreign Key 관계

erDiagram
    CUSTOMERS ||--o{ ORDERS : places
    ORDERS ||--|{ ORDER_ITEMS : contains
    PRODUCTS ||--o{ ORDER_ITEMS : includes

    CUSTOMERS {
        int customer_id PK
        string name
        string email
    }

    ORDERS {
        int order_id PK
        int customer_id FK
        date order_date
        decimal total
    }

    ORDER_ITEMS {
        int item_id PK
        int order_id FK
        int product_id FK
        int quantity
    }

    PRODUCTS {
        int product_id PK
        string name
        decimal price
    }

6.2 관계 설정 방법

  1. Admin → Data Model → 테이블 선택
  2. Foreign Keys 섹션
  3. 컬럼 선택 → Target 테이블 지정
1
2
3
Source: orders.customer_id
Target: customers.customer_id
Relationship: Many-to-One

6.3 Remapping 활용

ID 대신 의미있는 값 표시:

1
2
설정 전: Order #1234 - Customer: 567
설정 후: Order #1234 - Customer: 김철수

7. 성능 최적화

7.1 Sync와 Scan 스케줄

1
2
3
4
5
6
7
# Database Sync (스키마 정보)
Schedule: 매일 새벽 2시
Duration: ~5분

# Database Scan (필드 값)
Schedule: 매주 일요일 새벽 3시
Duration: ~30분 (데이터 크기에 따라)

7.2 캐싱 설정

1
2
3
4
5
6
7
# Query Results Cache
Duration: 1 hour (기본값)
Maximum Cache Size: 200 MB

# 테이블별 캐시 설정
High-traffic tables: 10분
Low-traffic tables: 24시간

7.3 인덱스 권장사항

Metabase 성능 향상을 위한 인덱스:

1
2
3
4
5
6
7
8
9
-- 자주 필터링되는 컬럼
CREATE INDEX idx_orders_date ON orders(order_date);
CREATE INDEX idx_orders_status ON orders(status);

-- JOIN에 사용되는 컬럼
CREATE INDEX idx_orders_customer ON orders(customer_id);

-- 복합 인덱스
CREATE INDEX idx_orders_date_status ON orders(order_date, status);

8. 멀티 데이터베이스 관리

8.1 데이터베이스 그룹화

1
2
3
4
5
6
7
8
9
10
11
Production:
  - PostgreSQL Main
  - PostgreSQL Replica

Analytics:
  - BigQuery DW
  - Redshift

Logs:
  - MongoDB Logs
  - Elasticsearch

8.2 Cross-Database 쿼리

Native SQL에서 여러 DB 조합:

1
2
3
4
5
6
7
-- 불가능: Direct JOIN
SELECT * FROM postgres.orders o
JOIN bigquery.customers c ON o.customer_id = c.id

-- 대안: Metabase Models 활용
1.  DB에서 Model 생성
2. Dashboard에서 조합

9. 보안 Best Practices

9.1 읽기 전용 사용자

1
2
3
4
5
-- PostgreSQL
CREATE USER metabase_readonly WITH PASSWORD 'secure_password';
GRANT CONNECT ON DATABASE production TO metabase_readonly;
GRANT USAGE ON SCHEMA public TO metabase_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO metabase_readonly;

9.2 민감한 데이터 보호

1
2
3
4
5
6
7
8
9
숨길 테이블/컬럼:
  - users.password_hash
  - users.ssn
  - payment_info.*

방법:
  1. Data Model에서 Hidden 설정
  2. View 생성하여 민감 컬럼 제외
  3. 별도 스키마 분리

9.3 SSL/TLS 필수 설정

1
2
3
4
5
PostgreSQL SSL:
  sslmode: require
  sslcert: /path/to/client-cert.pem
  sslkey: /path/to/client-key.pem
  sslrootcert: /path/to/ca-cert.pem

10. 실습 과제

  1. 샘플 데이터베이스 연결
    • PostgreSQL 샘플 DB 설치
    • Metabase에 연결
    • 스키마 확인
  2. 메타데이터 설정
    • Display Name 변경
    • Field Type 설정
    • 설명 추가
  3. 관계 설정
    • Foreign Key 관계 생성
    • Remapping 설정
    • 결과 확인

트러블슈팅 체크리스트

graph TD
    A[연결 실패] --> B{오류 타입}
    B --> |네트워크| C[방화벽/IP 확인]
    B --> |인증| D[계정/권한 확인]
    B --> |SSL| E[인증서/설정 확인]
    B --> |타임아웃| F[연결 파라미터 조정]

    C --> G[해결]
    D --> G
    E --> G
    F --> G

마무리

🎉 데이터 탐색 완료!

오늘 한 일: ✅ 샘플 데이터베이스 찾고 열기 ✅ 4개 테이블 구경하기 (Orders, Products, People, Reviews) ✅ 데이터 필터링 해보기 ✅ 테이블 구조 이해하기

“이제 뭘 할 수 있나요?”

  • Metabase에서 데이터가 어디 있는지 알게 되었어요
  • 테이블을 클릭해서 데이터를 볼 수 있어요
  • 필터링으로 원하는 데이터만 골라낼 수 있어요

다음 단계:

이제 진짜 재미있는 부분입니다 - 차트 만들기!

다음 글에서는:

  • 📊 “지난 달 총 매출은?” → 클릭 몇 번으로 차트 완성
  • 🎨 숫자를 예쁜 그래프로 변환
  • 📈 첫 대시보드 만들기

“기대되네요!” → 맞죠? 다음 글이 제일 재미있습니다. 드디어 시각화를 시작하니까요!


다음 시간 예고

[이제와서 시작하는 Metabase 마스터하기 #4] 첫 차트 만들기

다음 시간에는:

  • 📊 클릭만으로 첫 차트 만들기
  • 🎨 막대 그래프, 선 그래프, 원형 차트
  • 🎯 “지난 달 매출”, “인기 제품 TOP 10” 등 실전 예제
  • 💡 차트 저장하고 공유하기

“데이터베이스 연결은 언제 하나요?” → 차트 만드는 법을 먼저 배우고, 익숙해지면 그때 실제 DB를 연결하세요! → 샘플 데이터로도 모든 기능을 다 배울 수 있어요.

다음 글에서 뵙겠습니다! 🚀

📚 시리즈 전체 목차

🚀 기초편 (1-5화)

  1. Metabase 소개와 핵심 개념
  2. 설치와 초기 설정
  3. [첫 데이터베이스 연결] (현재 글)
  4. Question 만들기
  5. Dashboard 구성하기

💪 활용편 (6-10화)

  1. 필터와 파라미터
  2. SQL 네이티브 쿼리
  3. 데이터 모델링
  4. 자동화와 알림
  5. 권한과 보안

🎯 고급편 (11-16화)

  1. 임베딩과 공유
  2. 성능 최적화
  3. 멀티 데이터소스
  4. 커스터마이징
  5. 운영과 모니터링
  6. 실전 프로젝트
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.