묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka connect 실행 시 질문
kafka topic 생성시에는 localhost:9092의 브로커 정보를 입력해서 붙였는데 kafka connect 실행 시에는 브로커 정보없이 실행해도 조회시에 topic과 connect가 함께 출력됩니다.connect는 타겟 브로커를 어떻게 알고 적용되는 것인가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring cloud 무중단 구성 방법
아래와 같은 spring cloud 환경에서 무중단 배포를 구현할려면 어떻게 진행해야하나요?맨 앞단에 L4 1대그 뒤에 spring cloud gateway 2대spring cloud eureka 2대api server 2대각 서버를 2대씩 구성한 이유는 HA구성을 위해서입니다.여기서 api server를 무중단 배포로 진행할려면 어떻게 해야되나요?api server를 down시키면 eureka의 registry에 반영된다 하더라도 gateway에서 반영되기까지는 시간걸려 down된 인스턴스로 라우팅 해주고, gateway에서 retry로직을 적용시켜도 배포순간에 많은 요청이오면 한 요청에 대해서 실패한 인스턴스로 모두 retry하여 결국 실패하는 경우도 생기더라고요 (ribbon의 avoid-previous-instance 적용시킬려고 하였으나 spring cloud gateway에서는 지원 안한다고합니다 ㅜㅜ) 현업에서는 보통 어떤 방식으로 무중단 배포를 구현하나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
대칭키 암호화 취약점
대칭키 암호화 내용을 보고 의문이 들었습니다.config server에서 관리하는 yml 파일이 git 에 올라갔을 때 적혀 있는 데이터를 평문으로 저장하지 않고 암호화 하여 보호하려는 것은 이해를 했습니다.그러나 config server 프로젝트를 내려받으면 config 설정 파일명은 알 수 있으니 실행 후 브라우저를 통해 접근하면 원본값 반환으로 바로 알 수 있는 것 아닌가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
2.6버전 이상만 있을때 어떻게 진행하나요
zuul은 지원이 안됩니다. 그러면 zuul 대신 다른 gateway를 사용해야하는건지 억지로 2.3대이하로 내려서 zuul을 사용해야하는건지 궁금합니다.혹시 zuul이외에 다른 게이트웨이를 사용해야한다면 어떤것을 사용해야하는지, 혹시 참고할 자료가 없는지 여쭙습니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
config name 기준
각 마이크로서비스에서 지정하는 config name이 파일 명으로 들어가는데요, 만약 다른 확장자의 동일이름인 파일인 경우 어떻게 되는건가요?ecommerce.yml, ecommerce.properties name을 ecommerce로만 지정해도 되는 이유가 무엇인지 궁금합니다. 단순 설정 파일의 확장자를 제외하는 이유인지 아님 yml 파일로만 config server에 등록될 수 있는지요
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
gateway route 순서
gateway에 작성하는 routes의 작성 순서가 의미가 있는건가요?Path=/user-service/** 를 먼저 작성하고Path=/user-service/actuater를 뒤에 작성하면 actuater에 대한 처리를 위의 path에서 가져가는 것 같았습니다.순서를 바꾸어서 작성하니 정상 동작하네요알아서 내부 로직으로 처리가 되지 않고 ,(ex) url에 actuater가 포함 시 해당 라우팅으로 수행)작성 순서에 따른 우선순위로 처리되는건지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
instanceId
instanceId 설정할때${spring.application.instanc_id:${random.value}}로 들여쓰는 이유가 뭔가요?그냥 ${random.value}로도 생성이 되는것은 확인을 했는데요.. 이유를 모르겠습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
SOA vs MSA
구분에 대해 명확히 이해가 되지 않는데요,SOA 경우도 서비스 단위 개발이고 Microservice도 그렇지 않나요? 그 규모의 차이가 둘을 구분 짓는 건가요?ex) SOA의 서비스 단위가 숙박 예약 기능이라고 하면Microservice는 숙박조회, 결제 ... 으로 더 세분화 그리고 SOA에서 직접 서비스간에 데이터 교환을 하는 것에서 발생하는 의존 문제로 인해 ESB를 도입했다고 봤는데요, Microservice에서는 API를 통해 서비스 간 통신 시 이런 의존문제가 없을 수 있는건가요? 뭔가 구체적인 예시로 비교해주시면 감사하겠습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
eureka에서 클라이언트 삭제
구동시킨 클라이언트를 모두 중지하였는데 유레카에서 삭제가 안되네요.. 캐시가 남는걸까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka jdbc source connector 설정시 db url을 찾을 수 없다고 하는데 질문드립니다.
마이크로서비스 양질의 내용을 수강중인 학생입니다.지금 kafka source connector와 mariadb를 연결하는 과정에서database url을 찾을 수 없다는 에러가 계속 발생중입니다.혹시 동일한 현상을 해결하신 선배님이 계시거나, 아시는분의 도움을 얻고자 글 올립니다. 일단 db는 정상 실행되고 있습니다.url/user/password/table name까지의 정보는 완전 일치합니다. 증상은 아래와 같습니다. data source 생성 과정 source connector 상태 정보url 정상 유무
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
h2 관련 질문사항이 있습니다
섹션 10 강의를 들으면서 설정값을 바꾼후 busrefresh를 통해 성공적으로 (204)를 반환 받아도 저런식으로 오류가 발생하여 항상 전부 재시작후 실습을 진행중입니다. 어떻게 해결해야할까요?해당 json부분에 이전과 다른 데이터 값을 넣어주면 정상작동합니다. 하지만 제가 알기로는 h2 db의 경우 재시작 할 때마다 데이터가 모두 날라가는걸로 알고 있습니다.spring: datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testdb username: sah2역시 인메모리 방식으로 잘 되어 있는데 왜 모든 서비스들을 전부 종료하고 재시작해야지만 h2내부의 값들이 사라지는지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka 실행이 안됩니다.
zookeeper의 경우D:\{home}\kafka_2.13-2.7.0>bin\windows\zookeeper-server-start.bat config\zookeeper.properties이대로 실행하면 아래 파바박 뜨면서 tmp에 zookeeper 폴더도 잘 만들어 지는데kafka는D:\{home}\kafka_2.13-2.7.0>bin\windows\kafka-server-start.bat config\server.properties아무것도 안뜨고 그냥 D:\{home}\kafka_2.13-2.7.0>으로 넘어갑니다 tmp에 폴더도 안 만들어지고요. 딱히 에러가 발생하지도 않습니다. java는 jdk 11.0.2사용 중이고 버전에 문제 없어 보이는데 왜 이러는 걸까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
native 와 file 의 다른점
이번 강의의 native 와 기존에 처음부터 보여주신 uri : file///~~~ 의 방법과 크게 다른점이 뭔가요? 다른점이 없는것 같은데요...
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
2023.08.10 기준 Spring Boot 3버전 대 Security Config 설정 파일 공유합니다.
@Configuration @EnableWebSecurity @RequiredArgsConstructor public class WebSecurity { private final UserService userService; private final BCryptPasswordEncoder bCryptPasswordEncoder; private final Environment environment; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(request ->{ request.requestMatchers(antMatcher("/actuator/**")).permitAll(); request.requestMatchers(antMatcher("/**")).permitAll();}) // .headers(header -> header.frameOptions( // frameOptionsConfig -> frameOptionsConfig.disable())) .apply(new MyCustomSecurity()); return http.build(); } public class MyCustomSecurity extends AbstractHttpConfigurer<MyCustomSecurity, HttpSecurity> { @Override public void configure(HttpSecurity http) throws Exception { AuthenticationManager authenticationManager = http.getSharedObject( AuthenticationManager.class); AuthenticationFilter authenticationFilter = new AuthenticationFilter(authenticationManager, userService, environment); http.addFilter(authenticationFilter); } protected void configure2(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userService).passwordEncoder(bCryptPasswordEncoder); } } }해당 코드는 앞 내용까지 포함하여 설정이 적용된 버전입니다. 저같은 경우는 처음부터 mysql로 진행하여서 h2 콘솔을 사용하지 않아 frameOptions를 주석처리 하였으나, 혹여나 h2 콘솔 사용하시는 분은 주석 해제 후 사용하시면 되고, 23.08.10 기준으로 hasIpAddress는 사용 불가능합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring boot 3버전대에서 metrics에서 정보 안나오는 문제 해결
@Configuration @EnableAspectJAutoProxy public class MetricsConfig { @Bean public TimedAspect timedAspect(MeterRegistry registry) { return new TimedAspect(registry); } }해당 config 파일을 추가해주세요.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
window11 / 23.08.09 기준 kafka connect 버전
window11 / 23.08.09 기준으로 kafka connect 버전을 7.1 버전으로 사용하시길 바랍니다.해당 강의의 6.1 버전에서 properties 경로를 못찾아서 버전업을 했더니 해결 했습니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker mysql or mariadb 실행 에러 참고하세요
mariadb 최신버전 사용시 Dockerfile 그대로 작성시 실행 에러가 발생합니다.저는 sql 을 백업해서 스키마랑 테이블 새로 만들도록 수정해서 해결했습니다.추가로 실행후 mysql 접속도 mysql 명령어가 아닌 mariadb 로 작성하셔야 됩니다.mariadb -h127.0.0.1 -uroot -pmysqldump -u root -p mydb > mydb.sqlFROM mariadb ENV MYSQL_ROOT_PASSWORD test1357 ENV MYSQL_DATABASE mydb COPY ./mydb.sql /docker-entrypoint-initdb.d/ EXPOSE 3306
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료 주소 좀 알려주세요.
강의자료를 볼 수 있는 github가 있었던 것 같은데아무리 찾아도 없네요.강의자료 다운 혹은 볼 수 있는 주소 좀 알려주세요.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
The request was rejected because the URL contained a potentially malicious String "%0A"
UserServiceImplString orderUrl = String.format(env.getProperty("order_service.url"), userId);user-service.ymlorder_service: url: http://127.0.0.1:8000/order-service/%s/orders The request was rejected because the URL contained a potentially malicious String "%0A"실행 중에 해당 에러가 발생했습니다.springSecurity가 버전업 되어 %s같은 것들을 사용하지 못하게 막은 것 같은데 해결 방안을 알고 싶습니다.정확한 에러는 아래와 같습니다.org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String "%0A"*spring Security 2.7.12
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka connectors 에러
안녕하세요 강의 잘 듣고 있습니다.!!127.0.0.1:8083/connectors로 POST 요청으로{ "name": "my-source-connect", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mariadb://localhost:3306/mydb", "connection.user": "root", "connection.password": "지정한 password", "mode": "incrementing", "incrementing.column.name": "id", "table.whitelist": "users", "topic.prefix": "my_topic_", "tasks.max": "1" } }201 응답으로 잘 왔습니다.{ "name": "my-source-connect2", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mariadb://localhost:3306/mydb", "connection.user": "root", "connection.password": "지정한 password", "mode": "incrementing", "incrementing.column.name": "id", "table.whitelist": "users", "topic.prefix": "my_topic_", "tasks.max": "1", "name": "my-source-connect2" }, "tasks": [], "type": "source" }127.0.0.1:8083/connectors/my-source-connect/status를 보니{ "name": "my-source-connect", "connector": { "state": "FAILED", "worker_id": "192.168.200.174:8083", "trace": "org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:62)\n\tat io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:95)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:190)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:215)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:360)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:343)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:143)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:121)\n\tat org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:181)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base/java.lang.Thread.run(Thread.java:833)\nCaused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706)\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190)\n\tat io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:84)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:54)\n\t... 13 more\n" }, "tasks": [], "type": "source" }터미널에서 확인해보니 127.0.0.1:8083/connectors로 POST 요청으로 보낼 때[2023-08-08 19:11:24,848] INFO JdbcSourceConnectorConfig values: batch.max.rows = 100 catalog.pattern = null connection.attempts = 3 connection.backoff.ms = 10000 connection.password = [hidden] connection.url = jdbc:mariadb://localhost:3306/mydb connection.user = root db.timezone = UTC dialect.name = incrementing.column.name = id mode = incrementing numeric.mapping = null numeric.precision.mapping = false poll.interval.ms = 5000 query = query.retry.attempts = -1 query.suffix = quote.sql.identifiers = ALWAYS schema.pattern = null table.blacklist = [] table.monitoring.startup.polling.limit.ms = 10000 table.poll.interval.ms = 60000 table.types = [TABLE] table.whitelist = [users] timestamp.column.name = [] timestamp.delay.interval.ms = 0 timestamp.granularity = connect_logical timestamp.initial = null topic.prefix = my_topic_ transaction.isolation.mode = DEFAULT validate.non.null = true (io.confluent.connect.jdbc.source.JdbcSourceConnectorConfig:376) [2023-08-08 19:11:24,850] INFO AbstractConfig values: (org.apache.kafka.common.config.AbstractConfig:376) [2023-08-08 19:11:24,856] INFO [Worker clientId=connect-1, groupId=connect-cluster] Connector my-source-connect2 config updated (org.apache.kafka.connect.runtime.distributed.DistributedHerder:2092) [2023-08-08 19:11:24,858] INFO [Worker clientId=connect-1, groupId=connect-cluster] Rebalance started (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:231) [2023-08-08 19:11:24,858] INFO [Worker clientId=connect-1, groupId=connect-cluster] (Re-)joining group (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:566) [2023-08-08 19:11:24,860] INFO 127.0.0.1 - - [08/8월/2023:10:11:24 +0000] "POST /connectors HTTP/1.1" 201 400 "-" "PostmanRuntime/7.32.3" 18 (org.apache.kafka.connect.runtime.rest.RestServer:62) [2023-08-08 19:11:24,861] INFO [Worker clientId=connect-1, groupId=connect-cluster] Successfully joined group with generation Generation{generationId=4, memberId='connect-1-a7b22fdb-774a-479a-9618-b4e9504e4e95', protocol='sessioned'} (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:627) [2023-08-08 19:11:24,866] INFO [Worker clientId=connect-1, groupId=connect-cluster] Successfully synced group in generation Generation{generationId=4, memberId='connect-1-a7b22fdb-774a-479a-9618-b4e9504e4e95', protocol='sessioned'} (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:802) [2023-08-08 19:11:24,866] INFO [Worker clientId=connect-1, groupId=connect-cluster] Joined group at generation 4 with protocol version 2 and got assignment: Assignment{error=0, leader='connect-1-a7b22fdb-774a-479a-9618-b4e9504e4e95', leaderUrl='http://192.168.200.174:8083/', offset=5, connectorIds=[my-source-connect2, my-source-connect1, my-source-connect], taskIds=[], revokedConnectorIds=[], revokedTaskIds=[], delay=0} with rebalance delay: 0 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:2282) [2023-08-08 19:11:24,866] INFO [Worker clientId=connect-1, groupId=connect-cluster] Starting connectors and tasks using config offset 5 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1676) [2023-08-08 19:11:24,867] INFO [Worker clientId=connect-1, groupId=connect-cluster] Starting connector my-source-connect2 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1793) [2023-08-08 19:11:24,867] INFO [my-source-connect2|worker] Creating connector my-source-connect2 of type io.confluent.connect.jdbc.JdbcSourceConnector (org.apache.kafka.connect.runtime.Worker:293) [2023-08-08 19:11:24,867] INFO [my-source-connect2|worker] SourceConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none exactly.once.support = requested header.converter = null key.converter = null name = my-source-connect2 offsets.storage.topic = null predicates = [] tasks.max = 1 topic.creation.groups = [] transaction.boundary = poll transaction.boundary.interval.ms = null transforms = [] value.converter = null (org.apache.kafka.connect.runtime.SourceConnectorConfig:376) [2023-08-08 19:11:24,867] INFO [my-source-connect2|worker] EnrichedConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none exactly.once.support = requested header.converter = null key.converter = null name = my-source-connect2 offsets.storage.topic = null predicates = [] tasks.max = 1 topic.creation.groups = [] transaction.boundary = poll transaction.boundary.interval.ms = null transforms = [] value.converter = null (org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig:376) [2023-08-08 19:11:24,868] INFO [my-source-connect2|worker] Instantiated connector my-source-connect2 with version 10.7.3 of type class io.confluent.connect.jdbc.JdbcSourceConnector (org.apache.kafka.connect.runtime.Worker:315) [2023-08-08 19:11:24,868] INFO [my-source-connect2|worker] Finished creating connector my-source-connect2 (org.apache.kafka.connect.runtime.Worker:336) [2023-08-08 19:11:24,868] INFO [Worker clientId=connect-1, groupId=connect-cluster] Finished starting connectors and tasks (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1704) [2023-08-08 19:11:24,868] INFO [my-source-connect2|worker] Starting JDBC Source Connector (io.confluent.connect.jdbc.JdbcSourceConnector:71) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] JdbcSourceConnectorConfig values: batch.max.rows = 100 catalog.pattern = null connection.attempts = 3 connection.backoff.ms = 10000 connection.password = [hidden] connection.url = jdbc:mariadb://localhost:3306/mydb connection.user = root db.timezone = UTC dialect.name = incrementing.column.name = id mode = incrementing numeric.mapping = null numeric.precision.mapping = false poll.interval.ms = 5000 query = query.retry.attempts = -1 query.suffix = quote.sql.identifiers = ALWAYS schema.pattern = null table.blacklist = [] table.monitoring.startup.polling.limit.ms = 10000 table.poll.interval.ms = 60000 table.types = [TABLE] table.whitelist = [users] timestamp.column.name = [] timestamp.delay.interval.ms = 0 timestamp.granularity = connect_logical timestamp.initial = null topic.prefix = my_topic_ transaction.isolation.mode = DEFAULT validate.non.null = true (io.confluent.connect.jdbc.source.JdbcSourceConnectorConfig:376) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validating JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:171) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validated JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:174) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validating JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:171) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validated JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:174) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Initial connection attempt with the database. (io.confluent.connect.jdbc.JdbcSourceConnector:94) [2023-08-08 19:11:24,871] INFO [my-source-connect2|worker] Unable to connect to database on attempt 1/3. Will retry in 10000 ms. (io.confluent.connect.jdbc.util.CachedConnectionProvider:90) java.sql.SQLException: No suitable driver found for jdbc:mariadb://localhost:3306/mydb at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190) at io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250) at io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:84) at io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:54) at io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:95) at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:190) at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:215) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:360) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:343) at org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:143) at org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:121) at org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:181) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) [2023-08-08 19:11:34,877] INFO [my-source-connect2|worker] Unable to connect to database on attempt 2/3. Will retry in 10000 ms. (io.confluent.connect.jdbc.util.CachedConnectionProvider:90) java.sql.SQLException: No suitable driver found for jdbc:mariadb://localhost:3306/mydb at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190) at io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250) at io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:84) at io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:54) at io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:95) at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:190) at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:215) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:360) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:343) at org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:143) at org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:121) at org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:181) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833)으로 발생합니다. 에러를 보니 java.sql.SQLException: No suitable driver found for jdbc:mariadb://localhost:3306/mydbKafka Connect 런타임에서 MariaDB의 JDBC 드라이버를 찾지 못한거 같았습니다.~/confluent-7.4.0/etc/kafka/connectdistributed.properties 경로에plugin.path=/Users/ryu/kafka/confluentinc-kafka-connect-jdbc-10.7.3/lib잘 지정해준거 같았고 문제가 예상되는 부분은 현재 gradle을 사용해서 예제를 따라하고 있었습니다. ...Maven Local Repository에 라이브러리 배포하는 식으로해서plugins { id 'java-library' id 'maven-publish' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.spring' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } ext { set('springCloudVersion', "2021.0.8") } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' implementation 'org.modelmapper:modelmapper:2.4.5' implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.2' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.h2database:h2:1.3.176' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } tasks.named('test') { useJUnitPlatform() } publishing { publications { maven(MavenPublication) { groupId = 'org.mariadb.jdbc' // groupId artifactId = 'mariadb-java-client' // artifactId version = '2.7.2' // version from components.java } } }publishMavenPublicationToMavenLocal 을 통해서 배포해버리고...maven의 기본 repository인 .m2에서 확인했을 때.jar 파일이 mariadb-java-client-3.1.4-plain.jar 밖에 없어 사용했는데 혹시 gradle을 이용하면서 해결할 수 있는 방법이 있을까요?