티스토리 뷰
728x90
Kafka Connect SMT 멀티레포를 Git Submodule로 관리하면서,
각 모듈을 개별로 개발 및 빌드 가능하게 유지하고,
전체 통합(fat-jar) 빌드와 자동 배포까지 가능한 구조
📦 전체 구조 요약
📁 smt-core.git ← 공통 유틸 (JSON, logging 등)
📁 smt-mask-email.git ← SMT 기능 A (email 마스킹)
📁 smt-http-lookup.git ← SMT 기능 B (HTTP enrich)
📁 smt-all.git ← 통합 레포 (submodule로 모든 모듈 포함 + fat-jar 빌드)
🧱 1. 레포 연결 (Git Submodule 구성)
smt-all 레포에서 아래처럼 설정:
git submodule add https://gitlab.com/myorg/smt-core.git smt-core
git submodule add https://gitlab.com/myorg/smt-mask-email.git smt-mask-email
git submodule add https://gitlab.com/myorg/smt-http-lookup.git smt-http-lookup
.gitmodules 생성됨 → 커밋 & 푸시 필요
⚙️ 2. Gradle 구성
✅ settings.gradle (smt-all)
rootProject.name = 'smt-all'
include 'smt-core', 'smt-mask-email', 'smt-http-lookup'
✅ build.gradle (smt-all)
plugins {
id 'com.github.johnrengelman.shadow' version '8.1.1'
}
allprojects {
apply plugin: 'java'
group = 'com.mycompany.kafka.smt'
version = '1.0.0'
repositories {
mavenCentral()
}
java {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
dependencies {
implementation project(':smt-core')
implementation project(':smt-mask-email')
implementation project(':smt-http-lookup')
}
shadowJar {
archiveBaseName.set("kafka-smt-all")
archiveClassifier.set("")
archiveVersion.set("1.0.0")
}
🧪 3. 개별 모듈 단독 빌드
각 모듈은 단독으로 clone 받아도 독립적인 Gradle 프로젝트로 개별 빌드 가능하게 구성해야 합니다.
✅ 예: smt-mask-email/build.gradle
plugins {
id 'java'
}
group = 'com.mycompany.kafka.smt'
version = '1.0.0'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.apache.kafka:connect-api:3.8.0'
implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.0'
implementation 'org.slf4j:slf4j-api:1.7.36'
}
✅ 단독 빌드 명령 (개별 개발자가 수행)
git clone https://gitlab.com/myorg/smt-mask-email.git
cd smt-mask-email
./gradlew build
결과: build/libs/smt-mask-email-1.0.0.jar
이렇게 하면 단독 테스트/개발 환경에서 개별 기능 개발 가능
🎯 4. 통합 Fat-JAR 빌드 (from smt-all)
git clone --recurse-submodules https://gitlab.com/myorg/smt-all.git
cd smt-all
./gradlew shadowJar
결과: build/libs/kafka-smt-all-1.0.0.jar
Kafka Connect에 배포할 수 있는 단일 플러그인 JAR 생성됨
🚀 5. GitLab CI/CD 예시 (smt-all 기준)
.gitlab-ci.yml
stages:
- build
before_script:
- git submodule sync
- git submodule update --init --recursive
build_smt_fat_jar:
stage: build
image: gradle:8.6-jdk17
script:
- ./gradlew shadowJar
artifacts:
paths:
- build/libs/kafka-smt-all-1.0.0.jar
📁 6. .gitmodules 예시 (smt-all 내부)
[submodule "smt-core"]
path = smt-core
url = https://gitlab.com/myorg/smt-core.git
[submodule "smt-mask-email"]
path = smt-mask-email
url = https://gitlab.com/myorg/smt-mask-email.git
📦 7. Kafka Connect 적용 (JAR 반영 방법)
✅ 직접 복사:
scp build/libs/kafka-smt-all-1.0.0.jar kafka:/usr/share/java/kafka-connect-plugins/
✅ Docker 이미지에 포함:
FROM confluentinc/cp-kafka-connect:7.5.0
COPY build/libs/kafka-smt-all-1.0.0.jar /usr/share/java/kafka-connect-plugins/
✅ Helm 차트로 JAR 자동 배포 (ArgoCD 연동 가능)
initContainers:
- name: download-smt
image: curlimages/curl
command: ["curl", "-L", "https://gitlab.com/myorg/smt-all/-/jobs/artifacts/main/raw/build/libs/kafka-smt-all-1.0.0.jar?job=build_smt_fat_jar", "-o", "/plugins/kafka-smt-all.jar"]
🔄 8. 서브모듈 업데이트 방법 (개발시)
cd smt-core
git checkout main
git pull origin main
cd ..
git add smt-core
git commit -m "update smt-core to latest"
📌 9. 요약
항목 | 구성 및 방법 |
SMT 모듈 분리 | 각 기능별 GitLab 저장소 |
통합 프로젝트 | smt-all + Submodule |
개별 개발 가능 | 각 repo는 Gradle 단독 빌드 지원 |
통합 fat-jar 빌드 | shadowJar로 모든 SMT 포함 |
배포 방식 | 직접 복사, Docker, Helm 가능 |
CI/CD | GitLab CI에서 빌드 자동화 |
서브모듈 관리 | git submodule로 버전 통제 가능 |
📁 선택 구성 요약
항목 | 단일 JAR 구성 | 모듈별 JAR 구성 |
빌드 타깃 | kafka-smt-all.jar | smt-mask-email.jar, smt-http-lookup.jar |
Kafka Connect 적용 | 1개만 반영 | 여러 SMT 따로 반영 가능 |
추천 상황 | 통합 운영 환경 | 기능별 독립 사용 가능 환경 |
728x90
'CI_CD' 카테고리의 다른 글
Kafka Connect + 커스텀 SMT GitOps 통합 관리 전략 (PVC) (0) | 2025.04.18 |
---|---|
Kafka Connect + 커스텀 SMT GitOps 통합 관리 전략 (ConfigMap) (0) | 2025.04.18 |
CI/CD 자동화 다이어그램/시퀀스 다이어그램 (0) | 2025.04.06 |
containerD 란? (0) | 2025.03.29 |
Jenkins 설치 방법 (0) | 2025.03.29 |