-
Notifications
You must be signed in to change notification settings - Fork 0
[Dev] 로컬 환경 구성 방법
- AVRO 스키마 사용 모듈 설정
Downloader 모듈쪽 build.gradle
을 보면 아래와 같은 태스크가 등록되어있음을 확인할 수 있다.
... (중략) ...
def configureJar = tasks.register("configureJar") {
it.doLast {
tasks.jar.exclude(
configurations.additionalSchema
.findAll { it.name.endsWith("jar") }
.collect { File file ->
new ZipFile(file).entries()
.findAll { it.name.endsWith(".class") }
.collect { it.name }
}
.flatten() as Iterable<String>
)
}
it.dependsOn(tasks.classes)
}
tasks.named("jar") {
it.dependsOn(configureJar)
}
... (중략) ...
먼저 이 태스크는 AVRO 스키마를 사용하는 모듈에서 사용할 수 있으며, 이 태스크를 통해서 AVRO 모듈에 존재하는 AVRO 스키마파일을 -> JAVA POJO로 변환해주는 역할을 한다.
그리고, 이 POJO 파일을 AVRO의 namespace
영역에 해당하는 패키지 구조에 떨어진다.
이를 통해서 카프카 AVRO 직렬화 & 역직렬화를 수행할 수 있다.
-
application.yml
설정
####################################################################################################
## local
####################################################################################################
spring:
config:
activate:
on-profile: local
kafka:
topic: test
bootstrap-servers: localhost:9092
properties:
schema:
registry:
url: http://localhost:8085
producer:
acks: -1
consumer:
group-id: reactive_consumer_group
enable-auto-commit: false
auto-commit-interval: 10
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: io.confluent.kafka.serializers.KafkaAvroDeserializer
다운로드 모듈 쪽에는 위와 같은 local
Profile 설정이 존재하는데 이를 통해서 카프카 프로듀서, 컨슈머 설정 등을 수행할 수 있다.
이때, 부트스트랩서버나 레지스트리는 도커 인프라를 활용한다 가정, 위와 같이 localhost
로 둔다.
위에서는 AVRO 태스크 정의 및 application.yml
에 관련해서 보았다.
현재, 빌드 시점에 도커 컴포즈 파일을 동작하게끔 태스크를 등록해둔 상태여서 이를 통해서 작업할 수 있다.
이 태스크는 루트 모듈에 정의되어있다.
... (중략) ...
dockerCompose {
kafkaStack {
executable = '/usr/local/bin/docker-compose-v1'
dockerExecutable = '/usr/local/bin/docker'
dockerComposeWorkingDirectory = project.file("$rootDir")
stopContainers = false
projectName = 'kafka_local_infra'
projectNamePrefix = 'kafka_stack_'
useComposeFiles = [
"$infraGithubCloneTargetDir/$kafkaStackPath"
]
systemProperty 'spring.profiles.active', findProperty('spring.profiles.active') ?: 'local'
isRequiredBy(bootRun)
}
mongoDBStack {
executable = '/usr/local/bin/docker-compose-v1'
dockerExecutable = '/usr/local/bin/docker'
dockerComposeWorkingDirectory = project.file("$rootDir")
stopContainers = false
projectName = 'mongo_local_infra'
projectNamePrefix = 'mongo_stack_'
useComposeFiles = [
"$infraGithubCloneTargetDir/$mongoStackPath"
]
systemProperty 'spring.profiles.active', findProperty('spring.profiles.active') ?: 'local'
isRequiredBy(bootRun)
}
}
task cloneInfraRepo {
doFirst {
def folderPath = "$infraGithubCloneTargetDir"
if (file(folderPath).exists()) {
delete(file(folderPath))
}
}
doLast {
def grgit = Grgit.clone(
dir: "$infraGithubCloneTargetDir",
uri: "$infraGithubRepoUrl"
)
}
}
... (중략) ...
이 태스크는 Infrastrucutre 레포에서 클론을 땡겨받고, 해당 인프라 폴더에서 실제 도커를 동작하는 작업을 수행한다. 이를 IDE 상에서 동작하기 위해서는 아래의 설정이 필요하다.
위와 같이 edit configuration
을 클릭한다.
그 이후에 Modify Options
를 선택한다.
이 후 add before launch task
를 클릭한다.
그 다음에 Run gradle task
를 클릭한다.
이 후에 위와 같이 각 서브모듈에서 동작할 dockerCompose
태스크를 추가한다.
주의할 점은 루트 모듈의 dockerComposeUp
을 가져오게 될 경우에 모든 서브 프로젝트에 반영되서 빌드 시간이 엄청 느려진다.
따라서, 각 어플리케이션 동작에 해당하는 서브모듈의 태스크로 등록한다.
위와 같이 설정하면 IDE Run 시에 도커 컴포즈가 동작하고 어플리케이션이 구동되는 것을 확인할 수 있다.