티스토리 뷰
728x90
📖 용어 정리
항목 | 설명 |
APISIX Lua 변환 | API 요청이 APISIX에 도착했을 때 Lua 코드로 JSON/데이터를 변환 |
Kafka Connect SMT 변환 | Kafka Connect가 Kafka Topic에 적재할 때 (또는 읽을 때) 데이터 포맷을 변환하는 플러그인 기능 |
🧠 변환 위치 기준
위치 | 설명 |
APISIX (Ingress) | 요청(Request)이 Backend로 가기 전에 변환 |
Kafka Connect (ETL/Stream) | Kafka에 저장되거나 Kafka로부터 읽을 때 변환 (중간 처리) |
즉, APISIX는 앞단에서 처리, Kafka Connect는 뒷단에서 처리합니다.
✅ 장단점 비교
항목 | APISIX Lua 변환 | Kafka Connect SMT 변환 |
처리 시점 | 요청 수신 시 (HTTP 수신 시 즉시 변환) | Kafka 스트림에 들어올 때 변환 (또는 나갈 때 변환) |
처리 위치 | Gateway(L7) | Kafka Connect Layer |
장점 | - API 서버가 가벼워짐 (변환된 데이터만 전달) - 다양한 외부 API 호출이나 전처리 가능- 실시간으로 요청 흐름을 제어 가능 |
- API 서버는 신경 안 써도 됨 - Kafka 메시지를 나중에 여러 방식으로 재가공 가능 - Source/Sink Connector에만 적용하면 됨 (유연) |
단점 | - Lua 코드 직접 작성해야 함 - 변환 실패 시 요청 흐름에 영향 줄 수도 있음 - 관리 복잡 (플러그인/스크립트 관리 필요) |
- Kafka Connect 환경 필수 - Kafka 적재 전까지 변환 안 되므로 실시간 API 응답 제어 불가 - 복잡한 변환은 SMT Custom 개발 필요 |
운영 부담 | APISIX Lua 플러그인/스크립트 관리 | Kafka Connect SMT 설정/운영 관리 |
성능 | 빠르지만 Lua 스크립트 최적화 필요 | Kafka Connect가 대용량 스트림을 안정적으로 처리 가능 |
추천 상황 | - API 응답을 가볍게 만들고 싶다 - Kafka 외에도 외부 API로도 변환 결과 보내고 싶다 - 실시간 요청 흐름 수정이 필요하다 |
- 대량 데이터 스트림 변환 필요 - Kafka 내부 데이터 가공 및 일괄처리가 중요 - API 서버는 최소화, Kafka 쪽에서 변환 통합하고 싶다 |
🎯 요약
"APISIX Lua는 API Gateway에서 실시간으로 변환하고", |
"Kafka Connect SMT는 Kafka 데이터 스트림을 배치 또는 스트림 중에 변환한다." |
📈 실제 예시
📍 APISIX Lua 변환 예시
-- 요청 JSON에서 특정 필드 제거하고 Kafka로 전송
local cjson = require("cjson")
ngx.req.read_body()
local body_data = ngx.req.get_body_data()
local parsed = cjson.decode(body_data)
parsed["internalField"] = nil -- 내부 필드 제거
local body_json = cjson.encode(parsed)
-- Kafka Proxy로 전송
local httpc = require("resty.http").new()
httpc:request_uri("http://kafka-producer", {
method = "POST",
body = body_json,
headers = { ["Content-Type"] = "application/json" },
})
- 요청 본문 수정 (ex: 보안/정책적으로 필요)
- 외부 시스템에도 전송 가능 (ex: 알림 시스템 연동)
📍 Kafka Connect SMT 변환 예시
Kafka Connect Source Connector 설정:
{
"name": "http-source-connector",
"config": {
"connector.class": "io.confluent.connect.http.HttpSourceConnector",
"transforms": "InsertField",
"transforms.InsertField.type": "org.apache.kafka.connect.transforms.InsertField$Value",
"transforms.InsertField.static.field": "source",
"transforms.InsertField.static.value": "apisix-http",
"kafka.topic": "events-topic"
}
}
- Kafka로 들어오는 데이터에 "source": "apisix-http" 필드 자동 추가
- JSON 가공이나 필드 추가/제거 가능
- 변환 실패해도 Kafka Connect DLQ(Dead Letter Queue)로 넘길 수 있음
사용 상황 | 추천 방법 |
실시간 요청 수정 + 외부 서버 호출 필요 | APISIX Lua 변환 |
Kafka 데이터 후처리(적재 전 가공) | Kafka Connect SMT 변환 |
둘 다 필요 (API+Kafka 다 최적화) | APISIX + Kafka Connect 조합 |
🎯 결론
둘 다 역할이 다릅니다.
- APISIX Lua = "HTTP 레벨에서 제어" (API Gateway → 빠른 응답 제어, 다수 시스템 전송)
- Kafka Connect SMT = "Kafka 스트림 레벨에서 제어" (대량 데이터 후처리, 안정성 위주)
728x90
'기타' 카테고리의 다른 글
1년 이상 혁신 (0) | 2025.04.16 |
---|---|
Kafka REST API 종류별 비교 (0) | 2025.04.16 |
OpenFaaS로 MongoDB REST Proxy 통해 MongoDB 조회하는 예시 (1) | 2025.04.14 |
✅ Hook vs Trigger 차이 (0) | 2025.04.13 |
OpenResty란? (0) | 2025.04.12 |