티스토리 뷰

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
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함