본문으로 건너뛰기

카카오클라우드 MySQL과 태블로 연동

카카오클라우드의 데이터베이스 서비스 MySQL태블로(Tableau) 의 연동 방법을 설명합니다.

기본 정보
  • 예상 소요 시간: 30분
  • 사용자 환경
    • 권장 운영 체제: MacOS, Ubuntu
    • Region: kr-central-2
  • 사전 준비 사항

시나리오 소개

이 시나리오에서는 카카오클라우드의 MySQL 서비스를 생성하고, 태블로에서 데이터베이스를 조회하는 방법을 소개합니다. 주요 내용은 아래와 같습니다.

  • 카카오클라우드 MySQL 데이터베이스 서비스 환경 구성
  • 태블로 환경 구성 및 카카오클라우드 MySQL와의 연동
태블로 소개

태블로(Tableau) 는 강력한 데이터 시각화 및 분석 도구로, 사용자가 대시보드를 생성하고 다양한 데이터를 직관적으로 탐색할 수 있도록 지원합니다. 태블로는 설치형 또는 클라우드 기반으로 제공되며, 조직의 요구 사항에 따라 유연하게 활용할 수 있습니다.

자세한 내용은 태블로 공식 사이트를 참고하세요.

시작하기 전에

태블로를 사용하기 전에, 카카오클라우드에서 네트워크 및 MySQL 설정을 포함한 환경을 구성해야 합니다.

1. 네트워크 환경 구축

카카오클라우드 MySQL 데이터베이스에 접근하기 위한 네트워크 환경 설정이 필요합니다. 아래 표의 항목과 값을 참조하여 VPC과 퍼블릭 및 프라이빗 서브넷을 생성합니다.

VPC 및 서브넷: tutorial
  1. 카카오클라우드 콘솔 > Beyond Networking Service > VPC 메뉴로 이동합니다.

  2. 우측의 [+ VPC 생성] 버튼을 클릭한 후, 다음과 같이 VPC 및 서브넷을 생성합니다.

    구분항목설정/입력값
    VPC 정보VPC 이름tutorial
    VPC IP CIDR 블록10.0.0.0/16
    Availability Zone가용 영역 개수1
    첫 번째 AZkr-central-2-a
    서브넷 설정가용 영역당 퍼블릭 서브넷 개수2
    kr-central-2-a

    퍼블릭 서브넷 IPv4 CIDR 블록: 10.0.0.0/20
    프라이빗 서브넷 IPv4 CIDR 블록: 10.0.16.0/20

  3. 하단에 생성되는 토폴로지를 확인 후, 이상이 없다면 [생성] 버튼을 클릭합니다.

    • 서브넷의 상태는 Pending Create > Pending Update > Active 순서로 변경됩니다. Active 상태가 되어야 다음 단계를 진행할 수 있습니다.

2. 보안 그룹 설정

보안 그룹을 설정하면 외부 접근을 차단하고 필요한 트래픽만 허용하여 데이터베이스의 보안을 강화할 수 있습니다. 보안 그룹을 생성하여 Bastion 호스트를 통해 MySQL과 태블로 간 안전한 통신을 설정합니다.

보안 그룹: tutorial-bastion-sg
  1. 카카오클라우드 콘솔 > VPC > 보안 그룹 메뉴로 이동합니다. 아래 표를 참조하여 보안 그룹을 생성합니다.

    이름설명(선택)
    tutorial-bastion-sgBastion 호스트의 보안정책
  2. 하단의 [+ 추가하기] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [적용] 버튼을 클릭합니다.

    추가할 인바운드 규칙항목설정값
    bastion inbound policy 1프로토콜TCP
    패킷 출발지{사용자 공인 IP}/32
    포트 번호22
    정책 설명(선택)SSH 접속 허용
    bastion inbound policy 2프로토콜TCP
    패킷 출발지사용하는 태블로 환경에 따라 {사용중인 태블로 서비스 리전의 IP}/32 또는 {사용자 공인 IP}/32
    ※ SaaS형 태블로 서비스 사용 시 태블로 서비스 IP는 태블로 공식 사이트에서 확인하세요.
    포트 번호3306
    정책 설명(선택)MySQL 접속 허용

3. MySQL 데이터베이스 인스턴스 생성

MySQL 인스턴스를 생성하여 데이터베이스 환경을 설정합니다.

MySQL 데이터베이스 인스턴스: tutorial-tableau
  1. 카카오클라우드 콘솔 > Data Store > MySQL 메뉴로 이동합니다.

  2. 인스턴스 그룹 탭에서 [인스턴스 그룹 생성] 버튼을 클릭 후, 다음을 참고하여 인스턴스 그룹을 생성합니다.

    구분항목설정/입력값비고
    기본 설정인스턴스 그룹 이름tutorial-tableau
    인스턴스 가용성단일 (Primary 인스턴스)
    MySQL 설정엔진 버전지정된 값을 사용
    Primary 포트3306
    MySQL 사용자 이름admin
    MySQL 비밀번호root1234
    Parameter Group지정된 값을 사용엔진 버전에 맞는 파라미터 그룹만 선택
    인스턴스 유형m2a.large
    기본 스토리지100
    로그 스토리지 타입/크기100
    네트워크 설정VPCtutorial
    서브넷private-subnet(10.0.16.0/20)

4. Bastion 호스트 생성

MySQL 데이터베이스에 안전하게 접근하기 위하여 프록시 역할의 Bastion 호스트를 설정합니다.

Bastion 호스트: tutorial-bastion
  1. 카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.

  2. 아래 표의 항목과 값을 참조하여 Bastion 호스트의 역할을 할 VM 인스턴스를 생성합니다.

    구분항목설정/입력값비고
    기본 정보이름tutorial-bastion
    개수1
    이미지Ubuntu 20.04
    인스턴스 타입m2a.large
    볼륨루트 볼륨20
    키 페어{USER_KEYPAIR}⚠️ 키 페어는 최초 1회 안전하게 보관해야 합니다.
    잃어버린 키는 복구할 수 없으며, 재발급이 필요합니다.
    네트워크VPCtutorial
    보안 그룹tutorial-bastion-sg
    네트워크 인터페이스 1새 인터페이스
    서브넷main (10.0.0.0/20)
    IP 할당 방식자동
  3. 생성된 Bastion 인스턴스에 퍼블릭 IP를 연결합니다.

  4. 생성된 Bastion 인스턴스에 SSH 접속합니다.

5. 데이터베이스 생성

Bastion 호스트를 통해 MySQL 데이터베이스 인스턴스에 접속하여 데이터베이스와 테이블을 생성합니다.

MySQL 데이터베이스: tableau
  1. Bastion 호스트에 MySQL 클라이언트가 설치되어 있지 않다면, 다음 명령어로 설치합니다.

    sudo apt-get install mysql-client
  2. MySQL 클라이언트로 MySQL 인스턴스에 접속합니다. {MYSQL_ENDPOINT}는 MySQL 인스턴스의 엔드포인트, admin은 사용자 이름입니다.

    mysql -h ${MYSQL_ENDPOINT} -u admin -p

    명령어 입력 후 비밀번호를 묻는 프롬프트가 나타나면 root1234를 입력합니다.

  3. tableau라는 이름의 데이터베이스를 생성합니다.

    CREATE DATABASE tableau DEFAULT CHARACTER SET utf8;

    USE tableau;
  4. tableau_connection이라는 이름의 테이블을 생성합니다.

    CREATE TABLE tableau_connection (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100)
    );

    ALTER TABLE tableau_connection ADD COLUMN example_column VARCHAR(100);
  5. 데이터베이스 내의 테이블 목록을 확인하여 테이블이 정상적으로 생성되었는지 확인합니다. 아래 명령어 실행 시 tableau_connection 테이블이 목록에 나타나면 성공적으로 생성된 것입니다.

    SHOW TABLES;

6. Proxy 설정

Bastion 호스트에 접속하여 프록시로 설정합니다. Bastion 호스트를 프록시로 설정하면 MySQL이 퍼블릭 네트워크에 노출되지 않고 내부에서만 접근할 수 있습니다. 외부 클라이언트는 Bastion을 통해 접속해야 하며, 보안과 접근 제어가 강화됩니다.

Proxy 설정
  1. 먼저 생성한 MySQL 인스턴스의 Private Endpoint IP를 확인합니다.

    nslookup ${MYSQL_ENDPOINT} 
  2. Bastion 인스턴스에 nginx를 설치하고 프록시 설정을 수행합니다.

    sudo apt update # nginx 설치
    sudo apt install nginx-full

    sudo vi /etc/nginx/nginx.conf
    ...

    # 아래 내용 추가
    stream {
    upstream mysql_backend {
    server ${MYSQL_ENDPOINT_IP}:3306;
    }
    server {
    listen 3306;
    proxy_pass mysql_backend;
    }
    }

    sudo systemctl reload nginx # nginx 설정 적용

  3. Proxy 설정이 정상적으로 적용되었는지 확인합니다.

    sudo systemctl status nginx # nginx 서비스 정상 유무 확인
    sudo ss -nlpt |grep 3306 # 3306 포트 리슨 확인

시작하기

앞에서 구성한 카카오클라우드 데이터베이스 환경을 태블로와 연동하고, 데이터를 시각화하는 작업을 시작합니다.

Step 1. 태블로 접속 및 데이터 원본 연결

  1. 태블로에 접속한 뒤 메인 화면에서 외부 자산 (External Assets) 메뉴 버튼을 클릭합니다.

  2. 좌측 상단의 새로 만들기 > 통합 문서 (Workbook) 버튼을 클릭합니다. tableau-outer-source.jpg

  3. 데이터 연결 팝업창을 확인합니다. 만약 확인이 되지 않는다면 새로고침 혹은 위 단계를 다시 실행하시기 바랍니다.

  4. 커넥터 탭을 클릭합니다.

  5. 커넥터 목록에서 사용할 MySQL에 해당하는 어댑터를 선택합니다.

Step 2. 데이터베이스 연결

  1. 선택한 데이터베이스 엔진에 따라, 카카오클라우드 데이터베이스의 설정 값을 입력합니다.

    항목설정/입력값
    서버{Bastion 호스트의 공인 IP}
    포트3306
    데이터베이스tutorial-tableau
    사용자 이름admin
    비밀번호root1234

    tableau-connector.jpg

  2. 로그인 버튼을 클릭합니다.

Step 3. 태블로 연동 확인

  1. 왼쪽 패널에서 연결된 데이터베이스 엔드포인트를 확인합니다.

  2. 데이터베이스 목록에서 tableau 데이터베이스와 tableau_connection 테이블이 정상적으로 표시되는지 확인합니다. tableau-dashboard.jpg

  3. 필요한 테이블을 선택하고 데이터 시각화를 시작합니다.

Step 4. 샘플 데이터 준비

  1. 태블로에 사용할 샘플 데이터 CSV 파일을 다운로드합니다.

    샘플 데이터 다운로드

  2. Step 2 에서 연결한 DB 설정값을 기반으로 DB 관리 툴(DBeaver Community)을 이용하여 MySQL 데이터베이스에 접속합니다. [데이터베이스]-[새 데이터베이스 연결]-[MySQL] 을 선택한 후 아래 설정값을 입력해주세요.

    항목설정/입력값
    서버{Bastion 호스트의 공인 IP}
    포트3306
    데이터베이스tutorial-tableau
    사용자 이름admin
    비밀번호root1234

    dbeaver_db_연결화면.jpg

  3. 왼쪽 상단 트리에 접속한 MySQL 커넥션을 확인합니다. 그리고 기존에 생성된 tableau 데이터베이스를 확인합니다. 만약 보이지 않을 경우 연결을 끊고 재연결하거나 위의 과정을 다시 진행해주세요.

  4. [SQL 편집기]-[SQL 편집기] 메뉴를 선택합니다. 빈 SQL 편집기 화면에서 아래 SQL 명령어를 이용해 테이블을 생성합니다. 새로고침하여 테이블이 정상적으로 생성되었는지 확인합니다. 정상적으로 생성된 경우 [tableau]-[Tables] 하위 항목으로 tableau_sample_data 가 생성되어 있습니다.

    CREATE TABLE tableau.tableau_sample_data (
    `고유 ID` INTEGER NOT NULL,
    `주문 Id` VARCHAR(50) NULL,
    `주문 일자` VARCHAR(50) NULL,
    `배송 일자` VARCHAR(50) NULL,
    `배송 기간` INTEGER NULL,
    `배송 방법` VARCHAR(50) NULL,
    고객번호 VARCHAR(50) NULL,
    고객명 VARCHAR(50) NULL,
    `고객 세그먼트` VARCHAR(50) NULL,
    국가 VARCHAR(50) NULL,
    지역 VARCHAR(50) NULL,
    시도 VARCHAR(50) NULL,
    시군구 VARCHAR(50) NULL,
    `제품 코드` VARCHAR(50) NULL,
    `제품 대분류` VARCHAR(50) NULL,
    `제품 중분류` VARCHAR(50) NULL,
    제품명 VARCHAR(64) NULL,
    매출 REAL NULL,
    수량 INTEGER NULL,
    수익 REAL NULL,
    할인율 REAL NULL,
    PRIMARY KEY (`고유 ID`)
    )
    ENGINE=InnoDB
    DEFAULT CHARSET=utf8mb4
    COLLATE=utf8mb4_unicode_ci;
  5. tableau_sample_data를 우클릭한 뒤 데이터 가져오기를 선택합니다. 아래 표의 순서로 설정을 진행합니다. 표시되지 않은 항목은 기본값으로 진행합니다.

    구분항목설정/입력값
    Import SourceCSVCSV에서 가져오기
    Input file(s)Source{1 단계에서 저장한 csv 파일}
    Targettableau.tableau_sample_data
    Table mappingSourcetableau_sample_data.csv
    Targettableau_sample_data
  6. [Table mapping] 단계에서 [Preview Data] 메뉴를 통해 데이터가 정상적으로 임포트되는지 확인합니다. 진행 을 눌러 데이터 임포트를 실행합니다. 데이터가 정상적으로 임포트 되었는지 확인합니다.

    csv_import_화면.jpg

  7. 태블로 화면으로 돌아가 좌측 화면 상단의 업데이트를 클릭하고 tableau_sample_data 테이블을 선택한뒤 데이터가 정상적으로 업데이트되었는지 확인합니다. 왼쪽의 테이블 윈도우에서 tableau_sample_data 를 드래그해서 가운데 메인 윈도우에 가져다 놓습니다. 정상적으로 동작한 경우 아래와 같은 화면을 확인할 수 있습니다. 테이블 윈도우의 지금 업데이트를 눌러서 데이터를 확인합니다.

    mysql_태블로_업데이트_화면.jpg

Step 5. 태블로를 이용한 데이터 시각화

  1. 아래 탭에서 시트1 을 선택해서 차트 생성 워크 시트로 화면을 전환합니다. 왼쪽 윈도우에는 조금 전 확인한 데이터 컬럼과 데이터 항목을 확인할 수 있습니다.

  2. 이제 차트를 생성해보겠습니다. 왼쪽 목록에서 고객명을 드래그해서 가운데 인풋창에 가져다 놓습니다. 마찬가지 방법으로 합계(매출) 항목에 가져다 놓습니다. 이제 고객 당 매출에 해당하는 막대 그래프 차트가 자동으로 생성되었습니다. 만약 자동으로 생성되지 않았다면 왼쪽 윈도우의 마크 부분의 드롭다운 항목에서 막대를 선택합니다.

    차트_생성.jpg

  3. 이제 필요한 관련 데이터를 추가하겠습니다. 왼쪽 윈도우에서 합계(수량)을 드래그하여 마크 메뉴의 레이블 위로 가져다 놓습니다. 그럼 막대그래프 상단에 수량이 표시 됩니다.

  4. 이번에는 합계(할인율) 항목을 드래그해서 색상 부분에 가져다 놓습니다. 마크 메뉴의 색상 항목을 선택하고 색상 편집 선택합니다. 색상표의 드롭다운에서 온도 다중을 선택합니다. 이제 오른쪽 상단에 생상에 대한 범례가 표시되며 할인율에 따라 색이 다르게 보이게 됩니다.

    레이블_색상_추가.jpg

  5. 마지막으로 마크 메뉴의 드롭다운 메뉴에서 막대가 아닌 라인을 선택합니다. 그래프가 라인으로 변경된것을 확인할 수 있습니다.

    라인_그래프.jpg

이 튜토리얼을 활용하여 카카오클라우드와 태블로를 연동하여 다양한 데이터 시각화를 진행해보시기 바랍니다.