카카오클라우드 MySQL과 태블로 연동
카카오클라우드의 데이터베이스 서비스 MySQL 과 태블로(Tableau) 의 연동 방법을 설명합니다.
- 예상 소요 시간: 30분
- 사용자 환경
- 권장 운영 체제: MacOS, Ubuntu
- Region: kr-central-2
- 사전 준비 사항
시나리오 소개
이 시나리오에서는 카카오클라우드의 MySQL 서비스를 생성하고, 태블로에서 데이터베이스를 조회하는 방법을 소개합니다. 주요 내용은 아래와 같습니다.
- 카카오클라우드 MySQL 데이터베이스 서비스 환경 구성
- 태블로 환경 구성 및 카카오클라우드 MySQL와의 연동
태블로(Tableau) 는 강력한 데이터 시각화 및 분석 도구로, 사용자가 대시보드를 생성하고 다양한 데이터를 직관적으로 탐색할 수 있도록 지원합니다. 태블로는 설치형 또는 클라우드 기반으로 제공되며, 조직의 요구 사항에 따라 유연하게 활용할 수 있습니다.
자세한 내용은 태블로 공식 사이트를 참고하세요.
시작하기 전에
태블로를 사용하기 전에, 카카오클라우드에서 네트워크 및 MySQL 설정을 포함한 환경을 구성해야 합니다.
1. 네트워크 환경 구축
카카오클라우드 MySQL 데이터베이스에 접근하기 위한 네트워크 환경 설정이 필요합니다. 아래 표의 항목과 값을 참조하여 VPC과 퍼블릭 및 프라이빗 서브넷을 생성합니다.
VPC 및 서브넷: tutorial
-
카카오클라우드 콘솔 > Beyond Networking Service > VPC 메뉴로 이동합니다.
-
우측의 [+ VPC 생성] 버튼을 클릭한 후, 다음과 같이 VPC 및 서브넷을 생성합니다.
구분 항목 설정/입력값 VPC 정보 VPC 이름 tutorial VPC IP CIDR 블록 10.0.0.0/16 Availability Zone 가용 영역 개수 1 첫 번째 AZ kr-central-2-a 서브넷 설정 가용 영역당 퍼블릭 서브넷 개수 2 kr-central-2-a 퍼블릭 서브넷 IPv4 CIDR 블록: 10.0.0.0/20
프라이빗 서브넷 IPv4 CIDR 블록: 10.0.16.0/20 -
하단에 생성되는 토폴로지를 확인 후, 이상이 없다면 [생성] 버튼을 클릭합니다.
- 서브넷의 상태는
Pending Create
>Pending Update
>Active
순서로 변경됩니다.Active
상태가 되어야 다음 단계를 진행할 수 있습니다.
- 서브넷의 상태는
2. 보안 그룹 설정
보안 그룹을 설정하면 외부 접근을 차단하고 필요한 트래픽만 허용하여 데이터베이스의 보안을 강화할 수 있습니다. 보안 그룹을 생성하여 Bastion 호스트를 통해 MySQL과 태블로 간 안전한 통신을 설정합니다.
보안 그룹: tutorial-bastion-sg
-
카카오클라우드 콘솔 > VPC > 보안 그룹 메뉴로 이동합니다. 아래 표를 참조하여 보안 그룹을 생성합니다.
이름 설명(선택) tutorial-bastion-sg Bastion 호스트의 보안정책 -
하단의 [+ 추가하기] 버튼을 클릭 후, 인바운드 조건을 아래와 같이 설정하고 [적용] 버튼을 클릭합니다.
추가할 인바운드 규칙 항목 설정값 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
-
카카오클라우드 콘솔 > Data Store > MySQL 메뉴로 이동합니다.
-
인스턴스 그룹 탭에서 [인스턴스 그룹 생성] 버튼을 클릭 후, 다음을 참고하여 인스턴스 그룹을 생성합니다.
구분 항목 설정/입력값 비고 기본 설정 인스턴스 그룹 이름 tutorial-tableau 인스턴스 가용성 단일 (Primary 인스턴스) MySQL 설정 엔진 버전 지정된 값을 사용 Primary 포트 3306 MySQL 사용자 이름 admin MySQL 비밀번호 root1234 Parameter Group 지정된 값을 사용 엔진 버전에 맞는 파라미터 그룹만 선택 인스턴스 유형 m2a.large 기본 스토리지 100 로그 스토리지 타입/크기 100 네트워크 설정 VPC tutorial 서브넷 private-subnet(10.0.16.0/20)
4. Bastion 호스트 생성
MySQL 데이터베이스에 안전하게 접근하기 위하여 프록시 역할의 Bastion 호스트를 설정합니다.
Bastion 호스트: tutorial-bastion
-
카카오클라우드 콘솔 > Beyond Compute Service > Virtual Machine 메뉴로 이동합니다.
-
아래 표의 항목과 값을 참조하여 Bastion 호스트의 역할을 할 VM 인스턴스를 생성합니다.
구분 항목 설정/입력값 비고 기본 정보 이름 tutorial-bastion 개수 1 이미지 Ubuntu 20.04 인스턴스 타입 m2a.large 볼륨 루트 볼륨 20 키 페어 {USER_KEYPAIR}
⚠️ 키 페어는 최초 1회 안전하게 보관해야 합니다.
잃어버린 키는 복구할 수 없으며, 재발급이 필요합니다.네트워크 VPC tutorial 보안 그룹 tutorial-bastion-sg
네트워크 인터페이스 1 새 인터페이스 서브넷 main (10.0.0.0/20) IP 할당 방식 자동 -
생성된 Bastion 인스턴스에 퍼블릭 IP를 연결합니다.
-
생성된 Bastion 인스턴스에 SSH 접속합니다.
5. 데이터베이스 생성
Bastion 호스트를 통해 MySQL 데이터베이스 인스턴스에 접속하여 데이터베이스와 테이블을 생성합니다.
MySQL 데이터베이스: tableau
-
Bastion 호스트에 MySQL 클라이언트가 설치되어 있지 않다면, 다음 명령어로 설치합니다.
sudo apt-get install mysql-client
-
MySQL 클라이언트로 MySQL 인스턴스에 접속합니다.
{MYSQL_ENDPOINT}
는 MySQL 인스턴스의 엔드포인트,admin
은 사용자 이름입니다.mysql -h ${MYSQL_ENDPOINT} -u admin -p
명령어 입력 후 비밀번호를 묻는 프롬프트가 나타나면
root1234
를 입력합니다. -
tableau
라는 이름의 데이터베이스를 생성합니다.CREATE DATABASE tableau DEFAULT CHARACTER SET utf8;
USE tableau; -
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); -
데이터베이스 내의 테이블 목록을 확인하여 테이블이 정상적으로 생성되었는지 확인합니다. 아래 명령어 실행 시
tableau_connection
테이블이 목록에 나타나면 성공적으로 생성된 것입니다.SHOW TABLES;
6. Proxy 설정
Bastion 호스트에 접속하여 프록시로 설정합니다. Bastion 호스트를 프록시로 설정하면 MySQL이 퍼블릭 네트워크에 노출되지 않고 내부에서만 접근할 수 있습니다. 외부 클라이언트는 Bastion을 통해 접속해야 하며, 보안과 접근 제어가 강화됩니다.
Proxy 설정
-
먼저 생성한 MySQL 인스턴스의 Private Endpoint IP를 확인합니다.
nslookup ${MYSQL_ENDPOINT}
-
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 설정 적용 -
Proxy 설정이 정상적으로 적용되었는지 확인합니다.
sudo systemctl status nginx # nginx 서비스 정상 유무 확인
sudo ss -nlpt |grep 3306 # 3306 포트 리슨 확인
시작하기
앞에서 구성한 카카오클라우드 데이터베이스 환경을 태블로와 연동하고, 데이터를 시각화하는 작업을 시작합니다.
Step 1. 태블로 접속 및 데이터 원본 연결
-
태블로에 접속한 뒤 메인 화면에서 외부 자산 (External Assets) 메뉴 버튼을 클릭합니다.
-
좌측 상단의 새로 만들기 > 통합 문서 (Workbook) 버튼을 클릭합니다.
-
데이터 연결 팝업창을 확인합니다. 만약 확인이 되지 않는다면 새로고침 혹은 위 단계를 다시 실행하시기 바랍니다.
-
커넥터 탭을 클릭합니다.
-
커넥터 목록에서 사용할 MySQL에 해당하는 어댑터를 선택합니다.
Step 2. 데이터베이스 연결
-
선택한 데이터베이스 엔진에 따라, 카카오클라우드 데이터베이스의 설정 값을 입력합니다.
항목 설정/입력값 서버 {Bastion 호스트의 공인 IP}
포트 3306 데이터베이스 tutorial-tableau 사용자 이름 admin 비밀번호 root1234 -
로그인 버튼을 클릭합니다.
Step 3. 태블로 연동 확인
-
왼쪽 패널에서 연결된 데이터베이스 엔드포인트를 확인합니다.
-
데이터베이스 목록에서
tableau
데이터베이스와tableau_connection
테이블이 정상적으로 표시되는지 확인합니다. -
필요한 테이블을 선택하고 데이터 시각화를 시작합니다.
Step 4. 샘플 데이터 준비
-
태블로에 사용할 샘플 데이터 CSV 파일을 다운로드합니다.
-
Step 2 에서 연결한 DB 설정값을 기반으로 DB 관리 툴(DBeaver Community)을 이용하여 MySQL 데이터베이스에 접속합니다. [데이터베이스]-[새 데이터베이스 연결]-[MySQL] 을 선택한 후 아래 설정값을 입력해주세요.
항목 설정/입력값 서버 {Bastion 호스트의 공인 IP}
포트 3306 데이터베이스 tutorial-tableau 사용자 이름 admin 비밀번호 root1234 -
왼쪽 상단 트리에 접속한 MySQL 커넥션을 확인합니다. 그리고 기존에 생성된
tableau
데이터베이스를 확인합니다. 만약 보이지 않을 경우 연결을 끊고 재연결하거나 위의 과정을 다시 진행해주세요. -
[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; -
tableau_sample_data
를 우클릭한 뒤 데이터 가져오기를 선택합니다. 아래 표의 순서로 설정을 진행합니다. 표시되지 않은 항목은 기본값으로 진행합니다.구분 항목 설정/입력값 Import Source CSV CSV에서 가져오기 Input file(s) Source {1 단계에서 저장한 csv 파일}
Target tableau.tableau_sample_data Table mapping Source tableau_sample_data.csv Target tableau_sample_data -
[Table mapping] 단계에서 [Preview Data] 메뉴를 통해 데이터가 정상적으로 임포트되는지 확인합니다. 진행 을 눌러 데이터 임포트를 실행합니다. 데이터가 정상적으로 임포트 되었는지 확인합니다.
-
태블로 화면으로 돌아가 좌측 화면 상단의 업데이트를 클릭하고
tableau_sample_data
테이블을 선택한뒤 데이터가 정상적으로 업데이트되었는지 확인합니다. 왼쪽의 테이블 윈도우에서tableau_sample_data
를 드래그해서 가운데 메인 윈도우에 가져다 놓습니다. 정상적으로 동작한 경우 아래와 같은 화면을 확인할 수 있습니다. 테이블 윈도우의 지금 업데이트를 눌러서 데이터를 확인합니다.
Step 5. 태블로를 이용한 데이터 시각화
-
아래 탭에서 시트1 을 선택해서 차트 생성 워크 시트로 화면을 전환합니다. 왼쪽 윈도우에는 조금 전 확인한 데이터 컬럼과 데이터 항목을 확인할 수 있습니다.
-
이제 차트를 생성해보겠습니다. 왼쪽 목록에서
고객명
을 드래그해서 가운데 열 인풋창에 가져다 놓습니다. 마찬가지 방법으로합계(매출)
을 행 항목에 가져다 놓습니다. 이제 고객 당 매출에 해당하는 막대 그래프 차트가 자동으로 생성되었습니다. 만약 자동으로 생성되지 않았다면 왼쪽 윈도우의 마크 부분의 드롭다운 항목에서 막대를 선택합니다. -
이제 필요한 관련 데이터를 추가하겠습니다. 왼쪽 윈도우에서
합계(수량)
을 드래그하여 마크 메뉴의 레이블 위로 가져다 놓습니다. 그럼 막대그래프 상단에 수량이 표시 됩니다. -
이번에는
합계(할인율)
항목을 드래그해서 색상 부분에 가져다 놓습니다. 마크 메뉴의 색상 항목을 선택하고 색상 편집 선택합니다. 색상표의 드롭다운에서 온도 다중을 선택합니다. 이제 오른쪽 상단에 생상에 대한 범례가 표시되며 할인율에 따라 색이 다르게 보이게 됩니다. -
마지막으로 마크 메뉴의 드롭다운 메뉴에서 막대가 아닌 라인을 선택합니다. 그래프가 라인으로 변경된것을 확인할 수 있습니다.
이 튜토리얼을 활용하여 카카오클라우드와 태블로를 연동하여 다양한 데이터 시각화를 진행해보시기 바랍니다.