-
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 상에서 동작하기 위해서는 아래의 설정이 필요하다.
![Screenshot 2023-05-26 at 15 44 27](https://private-user-images.githubusercontent.com/22961251/241140066-89eeb058-43e5-4dae-9d15-051b408ee3ae.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwMzY2MDQsIm5iZiI6MTc0MDAzNjMwNCwicGF0aCI6Ii8yMjk2MTI1MS8yNDExNDAwNjYtODllZWIwNTgtNDNlNS00ZGFlLTlkMTUtMDUxYjQwOGVlM2FlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDA3MjUwNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTc0OThiNDUzNDc1MzgwZTY2MjI0Yjg3ODhkM2ZiMjJlNTgyMmJiZjU0NTgxNzIxNzE3ZDA4MGRiZDUxMTg5MTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.4jZU2ea2qcvLJjKeOEodZmFIr8OdxapB-Zhp5GIDkYA)
위와 같이 edit configuration
을 클릭한다.
![Screenshot 2023-05-26 at 15 51 59](https://private-user-images.githubusercontent.com/22961251/241141588-ff9a67bc-7a78-4fe9-9b51-3be2eb8279a7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwMzY2MDQsIm5iZiI6MTc0MDAzNjMwNCwicGF0aCI6Ii8yMjk2MTI1MS8yNDExNDE1ODgtZmY5YTY3YmMtN2E3OC00ZmU5LTliNTEtM2JlMmViODI3OWE3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDA3MjUwNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWFmMjhiY2QxYTdlM2RlMjE4N2JmMTdhNTQ0YTIxMWVjYWIwYWZhOTJiZjI3YWRiOTg4YmYwMjRlOWZjMTQyNzImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RsyaLzEllKJr5BaWn0mI5T8A3WQUmRhrbFNE77ZImm0)
그 이후에 Modify Options
를 선택한다.
![Screenshot 2023-05-26 at 15 52 40](https://private-user-images.githubusercontent.com/22961251/241141758-abb34fa3-beca-4f26-8413-2708bc63f796.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwMzY2MDQsIm5iZiI6MTc0MDAzNjMwNCwicGF0aCI6Ii8yMjk2MTI1MS8yNDExNDE3NTgtYWJiMzRmYTMtYmVjYS00ZjI2LTg0MTMtMjcwOGJjNjNmNzk2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDA3MjUwNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTJkMmRmZTQ5ZDQ5NTY5NDljMTBhOTI3ZDEwYzk5ODY5YmFmZmJmYmY1MWY4MjkzN2U2OGU3ZjYyMDExNWU2ZjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.gRkv08Kdh6BZ0jOjggz82D1ZYuwmnmC0co0o3zqrWaM)
이 후 add before launch task
를 클릭한다.
![Screenshot 2023-05-26 at 15 53 20](https://private-user-images.githubusercontent.com/22961251/241141831-b436d54d-27a9-4bc8-a01e-4eacde906335.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwMzY2MDQsIm5iZiI6MTc0MDAzNjMwNCwicGF0aCI6Ii8yMjk2MTI1MS8yNDExNDE4MzEtYjQzNmQ1NGQtMjdhOS00YmM4LWEwMWUtNGVhY2RlOTA2MzM1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDA3MjUwNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI5N2EyY2IwNzBiNmQ0MGM5ZmNkODQ3ZTQ2MGY4Mzg0Mjc2NGZhZGU2YWY3MWU3ZDA4OWE0MzgyNWJkNmY3NjAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.RnjSJIVMjM-90hqUFS5xY7fJYoMKzEgzd_5EwtECc-Y)
그 다음에 Run gradle task
를 클릭한다.
![Screenshot 2023-05-26 at 15 54 25](https://private-user-images.githubusercontent.com/22961251/241142045-7492ffbd-35e9-4d28-8fa3-3983767989e0.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwMzY2MDQsIm5iZiI6MTc0MDAzNjMwNCwicGF0aCI6Ii8yMjk2MTI1MS8yNDExNDIwNDUtNzQ5MmZmYmQtMzVlOS00ZDI4LThmYTMtMzk4Mzc2Nzk4OWUwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDA3MjUwNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA0NDdmZGYwMzg5NGZmOWE4ZDc4ZDIxMWRlMmUwMTg1MTNjOGQxYWViY2RlMTllZGI1NTkyZTNhOWMyODI3ODMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.nCkLEs3mzi-FK_cprkiOcelGc6jmoWglqXHGzXQns9U)
이 후에 위와 같이 각 서브모듈에서 동작할 dockerCompose
태스크를 추가한다.
주의할 점은 루트 모듈의 dockerComposeUp
을 가져오게 될 경우에 모든 서브 프로젝트에 반영되서 빌드 시간이 엄청 느려진다.
따라서, 각 어플리케이션 동작에 해당하는 서브모듈의 태스크로 등록한다.
![Screenshot 2023-05-26 at 15 56 21](https://private-user-images.githubusercontent.com/22961251/241142499-93c27ff8-fbea-4f69-ac58-de000e68a68b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDAwMzY2MDQsIm5iZiI6MTc0MDAzNjMwNCwicGF0aCI6Ii8yMjk2MTI1MS8yNDExNDI0OTktOTNjMjdmZjgtZmJlYS00ZjY5LWFjNTgtZGUwMDBlNjhhNjhiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMjAlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjIwVDA3MjUwNFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTRlNjg2NjU0OTVmMzRiOTUwMzZiY2QxNDkzM2E3NGU0YmIzZjZhNzNkNDRkNzFkZWI1ZjNlMmNhMDY1NWFlOTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.eTCL0RlSaZZw5QoySKz4lSda1s3W2slLZHfV4MT1B3c)
위와 같이 설정하면 IDE Run 시에 도커 컴포즈가 동작하고 어플리케이션이 구동되는 것을 확인할 수 있다.