3. Data Catalog와 Data Query를 이용한 Kafka 메시지 분석
🗒️ Object Storage에 저장된 Kafka 데이터를 Data Catalog로 등록하고 Data Query 서비스 통해 조회하는 방법을 안내합니다.
- 예상 소요 시간: 30분
- 권장 운영 체제: MacOS, Ubuntu
- IAM 권한: 프로젝트 관리자 역할 보유
시나리오 소개
이 튜토리얼은 전체 아키텍처에서 데이터 처리/분석(Processing/Analytics) 단계에 해당합니다. Kafka를 통해 Object Storage에 저장된 실시간 데이터를 Data Catalog에 등록하고, Data Query를 활용해 SQL 기반으로 조회·필터링·집계할 수 있는 환경을 구성합니다.
Data Catalog는 저장 데이터를 메타데이터로 관리하며, Data Query와 연계해 실시간 데이터 정합성 검증과 분석 작업을 지원합니다.
주요 내용은 다음과 같습니다.
- Data Catalog 및 데이터베이스 생성
- Data Query 서비스를 통해 테이블 생성
- 쿼리 작성 및 실행
- 결과 확인 및 CSV 다운로드
아키텍처
시작하기 전에
이 튜토리얼에서는 Object Storage에 저장된 Kafka 메시지를 테이블로 등록하여, 분석 가능한 형태로 전환하는 과정을 다룹니다. 실습을 원활하게 진행하기 위해, 먼저 Kafka 데이터의 Object Storage 적재 튜토리얼을 완료합니다. 이때 저장된 저장된 버킷 이름과 메시지 경로를 확인합니다.
Step 1. Object Storage 경로 확인
Kafka Connector가 메시지를 저장한 경로를 확인합니다. 이 경로는 Data Catalog 크롤러가 테이블을 구성하는 기준이 되므로 정확한 확인이 필요합니다.
Object Storage 경로를 명확히 파악해두면 이후 단계에서 자동화된 테이블 등록이 원활하게 진행되며, 잘못된 경로로 인한 테이블 생성 실패를 예방할 수 있습니다.
- 카카오클라우드 콘솔 > Object Storage > tutorial-kafka-bucket 으로 이동합니다.
- Kafka Connector를 통해 저장된 객체가 어떤 경로(
prefix
)에 있는지 확인합니다.
예:tutorial-kafka-bucket/tutorial-topic/topic/partition_0/year_2025/month_07/day_06/hour_22
- 테이블 생성에 필요한 최상위 경로(
tutorial-kafka-bucket/tutorial-topic/topic/partition_0
)까지 복사하여 메모장에 기록해둡니다.
Step 2. Data Catalog 설정
Data Catalog는 Object Storage에 저장된 데이터를 메타데이터로 관리하여, SQL 기반 분석이 가능하도록 지원합니다. 이 단계에서는 카탈로그와 데이터베이스를 생성해 저장 경로(Object Storage 버킷)를 Data Catalog에 연결합니다.
-
카카오클라우드 콘솔 > Analytics > Data Catalog 메뉴로 이동합니다.
-
카탈로그 메뉴에서 [카탈로그 생성] 버튼을 클릭합니다.
-
카탈로그 생성 팝업창에서 정보를 입력한 후, [생성] 버튼을 클릭합니다.
항목 설정값 이름 카탈로그 이름 / 예시 - kafka_catalog
VPC 카탈로그에 해당하는 네트워크 선택
- VPC:tutorial-amk-vpc
- 서브넷:main
-
생성한 카탈로그(
kafka_catalog
)를 클릭하여 데이터베이스 목록에서 [데이터베이스 생성] 버튼을 클릭합니다. -
데이터베이스 생성 팝업창에서 아래 정보를 입력한 후, [생성] 버튼을 클릭합니다.
항목 설정값 카탈로그 생성한 카탈로그 이름 / 예시 - kafka_catalog
이름 데이터베이스 이름 / 예시 - tutorial_kafka
경로 S3 연결 체크
- 버킷 이름:tutorial-kafka-bucket
- 디렉터리:tutorial-topic/topic
Step 3. 쿼리 결과 저장소 준비
Data Query는 쿼리 실행 결과를 Object Storage에 파일 형태로 저장합니다. 따라서 쿼리 실행 전에 반드시 결과 저장소를 설정해야 합니다.
설정 방법은 쿼리 결과 저장소 준비 가이드를 참고합니다.
Step 4. Data Query 조회
Data Catalog에서 생성한 데이터베이스를 통해 테이블을 만들고, 파티션을 추가한 뒤 실시간 데이터를 조회합니다.
-
카카오클라우드 콘솔 > Analytics > Data Query > 쿼리 편집기 메뉴로 이동합니다.
-
데이터 원본과 데이터베이스를 선택합니다.
구분 설정값 데이터 원본 Data Catalog에서 생성한 카탈로그, kafka_catalog
선택데이터베이스 Data Catalog에서 생성한 데이터베이스, tutorial_kafka
선택 -
우측의 쿼리 편집기에서 테이블을 생성합니다.
테이블 생성CREATE TABLE ${TABLE_NAME} (
data varchar,
year varchar,
month varchar,
day varchar,
hour varchar
)
WITH (
format = 'TEXTFILE',
external_location = 's3a://${BUCKET_NAME}/tutorial-topic/topic/partition_0',
partitioned_by = ARRAY['year','month','day','hour']
);환경변수 설명 TABLE_NAME🖌︎ 테이블 이름 / 예시 - kafka_table BUCKET_NAME🖌︎ 버킷 이름 / 예시 - tutorial-kafka-bucket -
원하는 로그 날짜에 대한 파티션을 수동으로 추가합니다.
파티션 추가CALL ${CATALOG_NAME}.system.register_partition(
schema_name => '${DATABASE_NAME}',
table_name => '${TABLE_NAME}',
partition_columns => ARRAY['year', 'month', 'day', 'hour'],
partition_values => ARRAY['${YYYY}', '${MM}', '${DD}', '${HH}'],
location => 's3a://${BUCKET_NAME}/tutorial-topic/topic/partition_0/${PATH}'
);환경변수 설명 CATALOG_NAME🖌︎ Data Catalog에서 생성한 카탈로그 이름 / 예시 - kafka_catalog DATABASE_NAME🖌︎ Data Catalog에서 생성한 데이터베이스 이름 / 예시 - tutorial_kafka TABLE_NAME🖌︎ 테이블 이름 / 예시 - kafka_table YYYY🖌︎ 조회연도 / 예시 - 2025 MM🖌︎ 조회 월 / 예시 - 07 DD🖌︎ 조회 일 / 예시 - 06 HH🖌︎ 조회 시간 / 예시 - 23 BUCKET_NAME🖌︎ 버킷 이름 / 예시 - tutorial-kafka-bucket PATH🖌︎ 데이터가 저장된 날짜 폴더 형식 / 예시 - year_2025/month_07/day_06/hour_23 안내현재 파티션 추가는 위와 같이 조회할 날짜 별로 Data Query 쿼리 편집기를 통해 수동 추가를 진행해야 합니다.
추후 Data Catalog 서비스 내 파티션 자동 추가 기능이 지원될 예정입니다. -
데이터 조회를 진행합니다.
데이터 조회 예시SELECT *
FROM ${TABLE_NAME}
WHERE year = '2025' AND month = '07' AND day = '06' AND hour = '23';환경변수 설명 TABLE_NAME🖌︎ 테이블 이름 / 예시 - .kafka_table -
쿼리 결과 예시는 아래와 같습니다.
raw_data year month day hour hello world! 2025 07 06 23 hello tester! 2025 07 06 23
마무리
Kafka 메시지를 Object Storage에 적재하고, Data Catalog에 등록한 뒤 Data Query로 SQL 기반 조회까지 수행했습니다. 이제 수집 → 저장 → 분석까지 이어지는 실시간 데이터 파이프라인의 전체 흐름을 완성했습니다.
실제 운영 환경에서 이 튜토리얼을 확장하여 이벤트 감지, 주기적 리포팅, 대시보드 시각화 등 다양한 분석 시나리오로 활용할 수 있기를 기대합니다.