묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
### 강사님 꼭 좀 답변 부탁드립니다. ###
몇주전에 MSA 후속 강의에 대해 문의드렸습니다. 이벤트 소싱, 보상 트랜잭션 등 후속 강의 계획이 있으신건가요?계획이 있고, 로드맵을 알려주시면 기다릴텐데.. 아무 소식이 없이 계속 미루어지고 있습니다. 저와 같이 해당 강의를 이미 들으셨던 분, 새로 들으시는 분들 모두가 궁금해하고 듣고싶은 강의라고 생각됩니다.후속 강의가 없다면, 해당 강의의 내용만으로는 사실 실무에서는 사용하기 어렵다고 생각됩니다.axon framework 를 별도로 공부해서 어떻게 할지 감은 오지만, 그래도 강사님이 실무에서 사용했던 방법을 공유받고 싶은 마음입니다. 꼭 좀 계획을 공유부탁드립니다.혹시라도 후속 강의에 대한 계획이 없는거여도 말씀 좀 부탁드립니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka sink 설정 시 테이블 생성이 안됩니다
{ "name": "my-sink-connect", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mariadb://localhost:3306/mydb", "connection.user": "root", "connection.password": "test1234", "mode": "incrementing", "incrementing.column.name": "id", "auto.create": "true", "auto.evolve": "true", "delete.enabled": "false", "tasks.max": "1", "topic": "my_topic_users", "table.whitelist": "mydb.users" } }confluent-community-connect-7.5.0-zOS confluentinc-kafka-connect-jdbc-10.7.4이렇게 사용중이고 모드를 빼면 에러가 발생하네요커넨터 로그엔 에러가 없어요 [2023-12-14 00:57:25,395] INFO 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-sink-connect 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:369)[2023-12-14 00:57:25,396] INFO [my-sink-connect|task-0] Validating JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:171)[2023-12-14 00:57:25,396] INFO [my-sink-connect|task-0] Validated JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:174)[2023-12-14 00:57:25,396] INFO [my-sink-connect|task-0] Using JDBC dialect MySql (io.confluent.connect.jdbc.source.JdbcSourceTask:138)[2023-12-14 00:57:25,396] INFO 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-sink-connect 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:369)[2023-12-14 00:57:25,397] INFO [my-sink-connect|task-0] [Producer clientId=connector-producer-my-sink-connect-0] Cluster ID: 61ETmEcJQASp3yeJGdTmPw (org.apache.kafka.clients.Metadata:287)[2023-12-14 00:57:25,413] INFO [my-sink-connect|task-0] Found offset {{table=users}=null, {protocol=1, table=mydb.users}={incrementing=17}} for partition {protocol=1, table=mydb.users} (io.confluent.connect.jdbc.source.JdbcSourceTask:234)[2023-12-14 00:57:25,414] INFO [my-sink-connect|task-0] Started JDBC source task (io.confluent.connect.jdbc.source.JdbcSourceTask:307)[2023-12-14 00:57:25,414] INFO [my-sink-connect|task-0] WorkerSourceTask{id=my-sink-connect-0} Source task finished initialization and start (org.apache.kafka.connect.runtime.AbstractWorkerSourceTask:275)[2023-12-14 00:57:25,414] INFO [my-sink-connect|task-0] Begin using SQL query: SELECT * FROM mydb.`users` WHERE mydb.`users`.`id` > ? ORDER BY mydb.`users`.`id` ASC (io.confluent.connect.jdbc.source.TableQuerier:182)
-
미해결Java 마이크로서비스(MSA) 프로젝트 실습
/actuator/refresh 가 동작하지 않습니다.
안녕하세요~ 강의를 듣다가 제가 뭔가 잘못한건지 actuator에 refresh가 동작하지 않아 질문글을 남깁니다.강의 2-10번 DB 비밀번호 암호화까지 문제 없이 잘 진행하다재가동 없이 설정파일 갱신하는 부분을 진행하는데item-service에서 build.gradle에 의존성 추가하고 bootstrap.yml에 설정 옵션 추가했는데config-server 설정 파일 변경 후 postman 에서 refresh 요청을 날려도 response body 에는 []빈 배열만 찍히고 별다른 문구가 없고 변경된 설정이 적용되지 않더라고요강의를 봐도 크게 설정하는 부분이 많은건 아니어서 잘 적용된 것 같은데 작동하지 않는 원인이 콘솔에 찍히지 않아서 헤메고 있습니다. build.gradle 의존성과 bootstrap.yml 에 설정 추가하고config-server 실행시키고 item-service 실행시킨 후 설정 파일에 변경점을 주고 localhost:5000번으로 /actuator/refresh 요청을 날렸습니다. 그리고 물품등록 요청을 보내서 200코드 성공했는데 별도의 logs 폴더에 api-local2.log는 생기지 않았습니다. 강의와 다르게 한건 인텔리제이로 프로젝트 구성한 것과 스프링부트 마이너 버전만 달라서 크게 문제가 있지는 않을 것 같은데.. 2-10 강의까지 해본 깃 주소도 올려봅니다.https://github.com/doyoun8813/Microservice
-
미해결스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술
스프링부트와 jpa모두 듣고 msa구축 설계
스프링부트 강의를 듣고 김영한님 유투브와 jpa entity 설계를 보던중 만약 리소스서버와 인증서버를 분리할때 유저의 entity를 리소스서버와 인증서버 2곳 모두에 설계 해야되나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
source-connect 오라클 적용 오류
mariadb가 아닌 oracle로 진행을 해보고 있는데 mariadb의 auto_increment 대신 oracle로 seq를 만들어 자동 증가하게 했습니다. 이렇게 적용을 하니 connector 에서 이런 오류를 주는데 오라클로 할 때는 설정이 많이 다른지 질문드립니다!!! ERROR [my-oracle-connect|task-0] WorkerSourceTask{id=my-oracle-connect-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask:196) org.apache.kafka.connect.errors.ConnectException: Scale of Decimal value for incrementing column must be 0 at io.confluent.connect.jdbc.source.TimestampIncrementingCriteria.extractDecimalId(TimestampIncrementingCriteria.java:283) at io.confluent.connect.jdbc.source.TimestampIncrementingCriteria.extractOffsetIncrementedId(TimestampIncrementingCriteria.java:268) at io.confluent.connect.jdbc.source.TimestampIncrementingCriteria.extractValues(TimestampIncrementingCriteria.java:208) at io.confluent.connect.jdbc.source.TimestampIncrementingTableQuerier.extractRecord(TimestampIncrementingTableQuerier.java:230) at io.confluent.connect.jdbc.source.JdbcSourceTask.poll(JdbcSourceTask.java:418) at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.poll(AbstractWorkerSourceTask.java:452) at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.execute(AbstractWorkerSourceTask.java:346) at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:189) at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:244) at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.run(AbstractWorkerSourceTask.java:72) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) [2023-12-06 19:56:27,342] INFO [my-oracle-connect|task-0] Stopping JDBC source task (io.confluent.connect.jdbc.source.JdbcSourceTask:354) [2023-12-06 19:56:27,342] INFO [my-oracle-connect|task-0] Closing resources for JDBC source task (io.confluent.connect.jdbc.source.JdbcSourceTask:366) [2023-12-06 19:56:27,342] INFO [my-oracle-connect|task-0] [Producer clientId=connector-producer-my-oracle-connect-0] Closing the Kafka producer with timeoutMillis = 30000 ms. (org.apache.kafka.clients.producer.KafkaProducer:1297) [2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] Metrics scheduler closed (org.apache.kafka.common.metrics.Metrics:693) [2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] Closing reporter org.apache.kafka.common.metrics.JmxReporter (org.apache.kafka.common.metrics.Metrics:697) [2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] Metrics reporters closed (org.apache.kafka.common.metrics.Metrics:703) [2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] App info kafka.producer for connector-producer-my-oracle-connect-0 unregistered (org.apache.kafka.common.utils.AppInfoParser:83) { "name": "my-oracle-connect", "config" : { "connector.class" : "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url":"jdbc:oracle:thin:@localhost:1521:orcl", "connection.user":"test", "connection.password":"test", "mode": "incrementing", "incrementing.column.name":"ID", "table.whitelist":"USERS", "topic.prefix" : "my_oracle_", "tasks.max" : "1" } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의록 파일 열기 오류
안녕하세요? 수강신청한 후에 강의록을 다운로드했는데 PDF 파일이 열리지 않습니다.혹시 DRM이 걸려 있거나 다른 이슈가 있는 건 아닐지요?아니면 유사한 문의가 있었는지 확인해 주시면 감사하겠습니다.
-
미해결EDA 기반 Microservice 구현 (with Hexagonal, DDD)
수업에 사용한 소스코드 문의
안녕하세요.혹시 수업에 사용한 소스코드 받을수 있을까요?감사합니다..
-
해결됨Microservice 내부 아키텍처 와 EventStorming 설계
도메인, 바운디드 컨텍스트 관련해서 궁금합니다.
특정 비즈니스 문제를 설명하는 거대한 도메인에 서브 도메인으로 핵심, 지원, 범용이 있다는 것은 알겠는데요. 그럼 바운디드 컨텍스트는 각각의 서브 도메인과 1:1로 동등한 관계로 매칭이 되는걸까요?아니면 각각의 서브 도메인 안에 바운디드 컨텍스트가 있고 바운디드 컨텍스트의 갯수는 1개가 아니라 여러개가 될 수 있을까요?또 아니면 바운디드 컨텍스트 안에 서브 도메인이 들어가고 바운디드 컨텍스트 안에 여러개의 서브 도메인이 있을 수 있을까요?마지막으로 서브 도메인안에 또 작은 도메인들이 있을 수 있을까요??
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
섹션 1 Service Discovery Eureka Service Discovery 빌드 시 오류납니다.
IntelliJ Community 2021.2.3 버전으로 진행하고 있습니다.컴파일 오류는 나지는 않지만 빌드 시 오류가 납니다. 어떤 부분이 잘못 되었는지 모르겠습니다. 어떻게 해야 될까요? application.ymlserver: port: 8761 spring: application: name: discoveryservice eureka: client: register-with-eureka: false fetch-registry: false pom.xml<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.1.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>discoveryservice</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>discoveryservice</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> <spring-cloud.version>2022.0.4</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <image> <builder>paketobuildpacks/builder-jammy-base:latest</builder> </image> </configuration> </plugin> </plugins> </build> </project> DiscoveryserviceApplication.javapackage com.example.discoveryservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class DiscoveryserviceApplication { public static void main(String[] args) { SpringApplication.run(DiscoveryserviceApplication.class, args); } }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
스프링 시큐리티 최신버전 코드 있을까요?
제일 최근에 질문한 글 참고해도 적용이 안되네요...혹시 현재 버전에서 적용 가능한 코드가 있을까요?아니면 참고할 수 있는 자료라도 있을까요? https://start.spring.io/ 에서 gradle로 생성해서 사용중입니다. 스프링 3.2버전 사용하고있어요.
-
해결됨장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker
컨테이너 환경에서의 circuitbreaker 상태 전파 방식 질문
안녕하세요~ 여러 대의 서버가 컨테이너 환경에서 실행될 때, 모든 서버의 서킷 브레이커 상태를 실시간으로 자동 전파하려면 어떻게 해야 할까요?
-
해결됨Microservice 내부 아키텍처 와 EventStorming 설계
앱에서 DDD를 적용하는 것이 맞는걸까요?
앱에서 DDD를 적용해보려고하는데 어려움이 있어 질문드립니다.앱단에서 어플리케이션 레이어의 서비스는 어떻게든 식별해서 진행이되는데어그리게잇, 엔티티, 값 객체에서 막막하게 느껴집니다.막막하게 느껴지는 이유는 결국 데이터를 최종적으로 받아서 저장하는 로직들은 서버단에서 처리를 할 텐데요.이런 경우에 결국 앱에서는 임시로 데이터를 들고 있는 자료구조 혹은 vo라고 느껴지고 있습니다.아니면 앱이라는 환경속에서 어그리게잇, 엔티티, 값 객체를 뽑는 것도 생각을 했는데 아직 머리속으로 구조가 잡히지 않고 어떤 방향으로 가는게 좋은지 확신이 들지 않는데요.어떻게 나아가야할지 좋은 의견 부탁드립니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
보상 트랜잭션의 대한 후속 강의 2차 문의합니다.
보상 트랜잭션의 대한 후속 강의 문의합니다.8개월 전쯤 상반기에 출시 계획이 있다고 하셨는데, 언제쯤 강의를 출시할 계획이신가요?전체적인 로드맵을 공유해주시면 좋을 것 같습니다.후속 강의가 너무 궁금합니다.
-
해결됨장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker
Circuit Breaker의 적용처 판단
Foo님 안녕하세요.'섹션3 - 어떤 예외를 recordExceptions로 지정할까?'를 수강하던 중 궁금증이 생겨 질문드립니다.<서론>recordExceptions은 '실패라고 간주하여 시스템을 회복시키기 위해 트래픽을 차단할 필요가 있는 상황'에 던져지는 예외로 이해했습니다.그래서 어떤 상황에서 recordExceptions을 적용해야 할지가 매우 중요할 거라고 생각이 듭니다.즉 트래픽을 차단할 필요가 있다면 recordExceptions을 던져야 하고 그렇지 않다면 던지지 않아야 할 것입니다.보통은 트래픽이 많이 몰려서 예외가 발생될 때(ex OutOfMemoryError, RejectedExecutionException) recordExceptions를 적용할 거라고 생각됩니다.<본론>그런데 트래픽이 많이 몰리지 않을 때에도 recordExceptions를 적용해야 하는 경우가 있을 것 같습니다. 한번 오류가 발생한 api 호출은 그 이후에 여러 번 호출해도 똑같은 오류가 발생될 가능성이 매우 높을 것 같기 때문입니다. (트래픽이 별로 없는 상황에서도)그렇다면.. '모든' 외부 api 호출들에 recordExceptions를 다 적용해야 하는 건가? 라는 궁금증이 듭니다. 혹은, 생각을 반대로 전환해서, recordExceptions를 적용하지 않아도 되는 api 호출들을 구분해야 하고 나머지는 모두 recordExceptions를 적용하는 것이 맞는 건가? 라는 생각도 듭니다. 즉 어떤 기준으로 recordExceptions를 적용해야 가장 적절한 건지 궁금합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
my-order-sink-connect 변경 정보 문의
my-order-sink-connect로 DB 접속정보를 생성하고 connect를 생성한 후 orders 테이블의 정보(PK, unique 등)가 변경되면 my-order-sink-connect에서 변경된 DB 정보를 인지하고 있나요?아니면 connect가 바라보고 있는 테이블의 정보(PK, 컬럼, unique 등)가 변경되면 connect를 삭제 하고 다시 생성해 줘야 하나요? 감사합니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka sink pk에러
안녕하세요 my-ordser-sink-connect를 만들고 연계 테스트도 잘 진행하였습니다.테스트 진행시 데이터 설정값오류로 pk Exception이 발생하였는데 이 이후 부터 데이터 입력도 되지 않고 재기동하여도 topic를 참조하여 pk 에러가 나타나고 신규 데이터를 받지 못하고 있습니다.my-order-sink_connect 장애 발생시 예외 처리나 장에 처리 가이드가 따로 있을까요감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
@EnableKafka 인식안됨
다른 분들은 저와 같은 경우 없으신가요?ㅠㅠ아래와 같이 gradle 파일에 디펜던시 추가해줬습니다.그런데implementation 'org.springframework.kafka:spring-kafka'@EnableKafka 어노테이션을 인식하지 못하네요ㅠㅠ구글링해도 kafka 어노테이션 관련 글은 없어서 질문드립니다.ㅠㅠ <코드내용><오류 정보 >
-
해결됨장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker
IgnoreException 동작이 주석의 설명과 좀 다른것같습니다
IgnoreException으로 주석을 삭제하고 실행시켜볼 때 예외를 호출부로 던지는게 아니라 retry를 실행하지 않고 그냥 바로 fallback method를 실행하는데 혹시 제가 실행한 결과가 이상한걸까요? 공식문서상으로도 자세한 설명이 안보이는데 이러한 동작이 맞을까요?
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
postgresql 연동 문의
Postgresql DB 사용시 auto_increment 옵션이 업어서아래와 같이 작성하여 order등록 테스트 진행시 id 값이 null 이어서 에러가 나타납니다.create table orders ( id int primary key, user_id varchar(50) not null, product_id varchar(20) not null, order_id varchar(50) not null, qty int default 0, unit_price int default 0, total_price int default 0, created_at datetime default now())테이블을 직접 생성하지 않고 소스의 jpa의 create 옵션을 사용하여 orders 테이블을 생성하고 상품을 등록하면 id 값이 자동으로 등록이 되는되 내부적으로 id값이 맵핑되는 로직이 따로 존재 하는 건가요? 테이블을 수동으로 생성 후 id 값을 맵핑시킬수 있는 로직이 따론 존재 하는 걸까요?@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id;
-
해결됨Microservice 내부 아키텍처 와 EventStorming 설계
도메인 영역에 대한 질문
클린 아키텍처와 헥사고날 아키텍처 모두 개발자가 비즈니스에 집중할 수 있도록 하는 구조인데, 이때 도메인 모델을 풍부한 도메인 모델이 아닌 빈약한 도메인 모델로 가져가고, 트랜잭션 스크립트 패턴을 사용해도, 클린 아키텍처와 헥사고날 아키텍처라고 할 수 있는건가요?