월 15,840원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Resilience4J 강의를 들으며 질문이 있습니다.
이전의 Hystrix의 경우에는 route 설정해놓은 yml 또는 java 파일에서 각각의 route 마다 filter.hystrix 라고 하여 매핑을 해주는 것으로 이해하고있는데, Resilience4J의 경우에는 각각의 route에는 설정하는것이 아닌 global? 설정 인가요?영상에는 이미 라우팅 설정에 매핑하는게 아닌 fegin client 로 요청 시에 매핑하는것으로 보여서 개념적인 이해가 잘안되서 질문드립니다. 감사합니다!
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Environment 클래스의 스프링 빈 등록 시점
Environment 클래스의 스프링 빈 등록 시점은 언제되는 것인가요? 애노테이션을 사용해서 따로 스프링 빈으로 등록해주지 않은 것 같은데, 스프링이 자체적으로 등록해놓는 기본 빈인지 궁금해서 여쭤봅니다
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring Cloud Gateway - Global Filter Java 설정 방식 문의
문득 궁금해서 여쭤봅니다. Spring Cloud Gateway의 GlobalFilter를 강의에서는 yml로 설정하는 방식으로 보여주셨는데, 혹시 이걸 Java 코드로 설정하려면 어떻게 해야되나요? 제가 좀 찾아봤을때는 implement GlobalFilter?를 구현받아서 처리하는 것으로 보이는데 맞을까요...? GlobalFilter가 여러개 있을 경우의 우선순위 설정도 궁금합니다! 매번 감사드립니다!
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
nosuchfile
ERROR Stopping due to error (org.apache.kafka.connect.cli.ConnectDistributed:86)
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
127.0.0.1에서 연결을 거부했습니다 현상
안녕하세요, Spring Cloud Gateway 프로젝트 생성 파트 진행 도중 http://127.0.0.1:8081/first-service/welcome에 접속시 아래와 같은 현상으로 접속이 되지 않습니다.ecommerce 서버, apigateway서버, first-service 서버를 구동했음에도 제대로 접속되지 않는 이유가 무엇일까요?감사합니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Serializable을 사용하는 이유가 뭔가요?
엔티티나 dto를 만들 때 Serializable을 상속 받던데 그 이유가 뭔가요?찾아보니 직렬화를 하게 해준다고 하는데 DB와 직접적으로 연결되는 엔티티는 필요할 수 있다고 쳐도 dto는 애플리케이션에서 객체로 전달되니 안써도 되지 않나요? 더해서 response객체에는 적어주지 않는 이유가 궁금합니다db에 저장한다 해도 엔티티에 Serializable을 사용하지 않아도 잘 저장되는데, 그래도 사용한 이유는 직렬화가 잘 되지 않는 디비와 통신할 때는 문제가 발생할 여지가 있어서인가요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring-cloud-config 질문입니다.
Config 서버의 yml 파일에 파일 location 정보를 입력하고 8888 포트로 띄웠을때,127.0.0.1:8888/ecommerce/default를 쳐서 들어갔을때,yml 파일에는 해당 파일의 경로만 입력했고 파일명은 입력을 하지않았는데 url 주소의 ecommerce라는 값이 파일이름이 되는건가요? 저같은 경우에는 git에 파일을 연동하는것이 아닌 native local 경로의 파일을 참조해서 테스트 하고있는데 404 에러가 발생하여 여쭤봅니다. 강의 잘보고있습니다 감사합니다!
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
실제로 서버 구성을 할 경우
실제로 서버 구성을 할 경우, 강의에서 나온 서비스 기준으로 말씀드리면 user-service, catalog-service, order-service 마다 각각 다른 서버에 배치를 하는 구조로 가져가야 하는 부분일까요 아니면 한 자원에서 서비스는 여러개로 띄워 놓고 구성을 하는걸까요 마이크로서비스 적인 관점으로 어떻게 구조를 가져가야 하는지 궁금합니다~
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Users Microservice - AuthenticationFilter 추가 | 질문있습니다.
최신버전의 스프링부트에서 WebSecurityConfigurerAdapter가 더이상 지원하지 않는다고 하는데 WebSecurity클래스의 코드를 어떻게 작성해야 하나요? 빈 등록 하라고 하는데 정확히 어떤식으로 진행해야할지 몰라서 이렇게 남깁니다. 항상 좋은 강의 감사합니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring Cloud Gateway (Load Balancer) 방식 질문 입니다.
Spring Cloud Gateway - Load Balancer② 편에서 같은 마이크로 서비스가 동작 중일 떄, lb://MY-FIRST-SERVICE 로 등록하여 라운드로빈 형태로 로드밸런싱 되는 것을 보여주셨는데, 이 부분을 HASH 방식 또는 커스텀하게 로드밸런싱 알고리즘을 변경 할 수 있나요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
비대칭키 jwt 인증 문제
http://localhost:8888/ecommerce/default 에서는 {name: "ecommerce",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\ecommerce.yml",source: {token.expiration_time: 864000000,gateway.ip: "172.30.1.33",token.secret: "userToken_token"}}]}http://localhost:8888/user-service/default 에서는{name: "user-service",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\user-service.yml",source: {spring.datasource.url: "jdbc:h2:mem:testdb",spring.datasource.driver-class-name: "org.h2.Driver",spring.datasource.generate-unique-name: false,token.expiration_time: 864000000,gateway.ip: "172.30.1.33",order_service.url: "http://ORDER-SERVICE/order-service/%s/orders",spring.datasource.username: "sa",token.secret: "userToken_token"}}]} 이와 같이 token.secret이 같은데 왜 subject가 null값이 되는지 이유를 알 수 가 없습니다. login하고 나온 header값을 가지고 bearer에 넣어 인증하는 방식이 아닙니까?이유를 잘 모르겠습니다. JWT token is not valid이게 왜 뜨는지subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); 여기서 왜 null값으로 값을 반환하는지 이해를 할 수가 없습니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Entity와 dto
안녕하세요! jpa 지식이 얕아 질문드립니다. 유저의 주문 리스트를 뽑아올 때, 아래와 같이 서비스 클래스에서 userId를 이용해 먼저 레포 호출해서 엔티티를 만들고, 이 만든 엔티티를 모델매퍼로 다시 Dto로 바꾸지 않습니까?왜 엔티티를 먼저 만들었다가 Dto로 바꾸는지 이유가 궁금합니다.Dto와 Entity의 각각의 존재 의의와 목적은 무엇인가요?public UserDto getUserByUserId(String userId) { UserEntity userEntity = userRepository.findByUserId(userId); if (userEntity == null) throw new UsernameNotFoundException("User not found"); UserDto userDto = new ModelMapper().map(userEntity, UserDto.class); List<ResponseOrder> ordersList = orderServiceClient.getOrders(userId); userDto.setOrders(ordersList); return userDto; }
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Prometheus 질문입니다.
안녕하세요 강사님강의 따라서 프로메테우스 사용 중 아무리 찾아봐도 원인을 알 수 없어서 질문드립니다.환경>프로메테우스서버와 apigateway서버는 서로 ip가 다른 각각의 서버에서 실행했습니다.프로메테우스 버전: prometheus-2.40.0-rc.0.linux-amd64문제>프로메테우스(9090)서버 접근시 apigateway 상태가 down입니다.근데 apigateway는 살아있는 상태고, url에 접근하면 데이터는 정상적으로 나옵니다..406에러를 뱉는데 어떤 부분이 문제인지 모르겠습니다.. ㅠapigateway actuator에 보면 프로메테우스가 재접속 시도해서 이거만 계속 늘어나고 있습니다.http_server_requests_seconds_count{exception="NotAcceptableStatusException",method="GET",outcome="CLIENT_ERROR",status="406",uri="UNKNOWN",}
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
프로메테우스 관련 질문입니다.
sum(spring_cloud_gateway_requests_seconds_count{job=~"apigateway-service"}) 에서 spring_cloud_gateway_requests_seconds_count는users_welcome_seconds_max 처럼 /acutator/prometheus가 제공하지 않는것 같은데 이는 프로메테우스에서 자체적으로 제공하는 metric? 이라 생각하면 맞는건가요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
MSA 에서 연관관계
안녕하세요 강의를 보던 도중 질문이 생겼습니다. 보통 JPA 서비스 설계시 모놀로틱한 서비스에서 서로 다른 엔티티를 연관관계를 통해 데이터베이스 JOIN 을 이용하여 서비스 하는것으로 알고 있습니다. 그러나 MSA 환경에서는 데이터베이스 자체가 분리되어 있는 상태여서 해당 방식은 불가능 하다는 것을 이전 여러 질문들을 통해 알게 되었습니다.이러한 점을 해결할 방식을 찾는 도중 DDD를 이용하여 관점을 분리하고 연관된 엔티티들을 묶어 Aggregator 개념으로 묶어서 사용한다는 글들을 알게 되었습니다. 여기서 질문인 점은 Aggregator로 연관된 엔티티를 묶는 다는 의미가하나의 마이크로 서비스에 여러 엔티티를 두어 기존 사용하던 JPA 연관관계처럼 사용한다는 것인지아니면 분리된 두 서비스는 각자 두고 상위 서비스를 다시 선언하여 해당 서비스에서 연관된 두 엔티티를 조회하여 묶어서 사용하는 것인지 궁금합니다. 아니면 제가 아예 Aggregator 라는 개념을 잘못 이해한 것일까요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
JDBC source connector를 못찾는 문제
안녕하세요 선생님 수업 잘 듣고 있습니다 제 환경은 Windows 11이고 업로드 해주신 설치 파일을 다운로드 하여 수업을 진행해보고 있습니다. kafka jdbc connector를 plugin.path에 등록해 두어도 프로그램이 탐색을 못하고 있어 계속 처음부터 다시 해보다가 여쭤봅니다.아래는 plugin.path 이고 주소는 kafka-connect-jdbc-10.5.1 파일이 있는 폴더 경로를 복사하여 붙여넣은 것입니다.\etc\kafka\connect-distributed.propertiesplugin.path=\C:\Works\Kafka\kafka-connect-jdbc\lib 아래는 source connector 등록시 나오는 오류입니다."message": "Failed to find any class that implements Connector and which name matches io.confluent.connect.jdbc.JdbcSourceConnector, available connectors are: PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSinkConnector, name='org.apache.kafka.connect.file.FileStreamSinkConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=sink, typeName='sink', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.file.FileStreamSourceConnector, name='org.apache.kafka.connect.file.FileStreamSourceConnector', version='6.1.0-ccs', encodedVersion=6.1.0-ccs, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorCheckpointConnector, name='org.apache.kafka.connect.mirror.MirrorCheckpointConnector', version='1', encodedVersion=1, type=source, typeName='source', location='classpath'}, PluginDesc{klass=class org.apache.kafka.connect.mirror.MirrorHeartbeatConnector, name='org.apache.kafka.connect.mirror.MirrorHeartbeatConnector', localhost:8083/connector-plugins 에서도 jdbc connector가 보이지 않습니다.{ "class": "org.apache.kafka.connect.file.FileStreamSinkConnector", "type": "sink", "version": "6.1.0-ccs" }, { "class": "org.apache.kafka.connect.file.FileStreamSourceConnector", "type": "source", "version": "6.1.0-ccs" }, { "class": "org.apache.kafka.connect.mirror.MirrorCheckpointConnector", "type": "source", "version": "1" }, { "class": "org.apache.kafka.connect.mirror.MirrorHeartbeatConnector", "type": "source", "version": "1" }, { "class": "org.apache.kafka.connect.mirror.MirrorSourceConnector", "type": "source", "version": "1" } 그리고 .\share\java\kafka에서는 mysql 드라이버를 복사해두었습니다. 혹시나 해서 confluent랑 kafka의 모든 connect-distributed.properties 파일에는 다 plugin.path를 설정해 두었고.. 오류메시지가 나오는 곳에서 available connectors 목록이 있는 위치에 jdbc connector를 붙여넣어 보기도 했습니다.. 그런데도 조회가 안되어서 놓친 부분이 어디있을까 하여 여쭤봅니다. 확인 부탁드립니다~
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
FeignClient 적용 후 빈 생성 못함
안녕하세요, 강사님 FeignClient 강의를 수강하던 도중에 다 따라 적용하고 실행을 시켰으나 빈을 생성하지 못해서 에러가 발생합니다. 서칭을 해도 뭐가 문젠지 모르겠습니다.. 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>2.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>user-service</artifactId> <version>0.0.1-SNAPSHOT</version> <name>user-service</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> <spring-cloud.version>2021.0.3</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-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.6.12</version> </dependency> <!-- https://mvnrepository.com/artifact/com.h2database/h2 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.176</version> <scope>runtime</scope> </dependency> <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> </dependency> <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version>2.3.8</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>2.6.12</version> </dependency> <!-- https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>3.1.0</version> </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> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> 에러 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userController' defined in file [C:\study\msa\user-service\target\classes\com\example\userservice\controller\UserController.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl' defined in file [C:\study\msa\user-service\target\classes\com\example\userservice\service\UserServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'feignEncoderPageable' defined in org.springframework.cloud.openfeign.FeignClientsConfiguration: Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: feign/form/multipart/AbstractWriter at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.22.jar:5.3.22] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.22.jar:5.3.22] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:147) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:734) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:408) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-2.7.3.jar:2.7.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-2.7.3.jar:2.7.3] at com.example.userservice.UserServiceApplication.main(UserServiceApplication.java:18) ~[classes/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na] at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) ~[spring-boot-devtools-2.7.3.jar:2.7.3] Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userServiceImpl' defined in file [C:\study\msa\user-service\target\classes\com\example\userservice\service\UserServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 4; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'feignEncoderPageable' defined in org.springframework.cloud.openfeign.FeignClientsConfiguration: Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: feign/form/multipart/AbstractWriter at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.22.jar:5.3.22] ... 24 common frames omitted Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'feignEncoderPageable' defined in org.springframework.cloud.openfeign.FeignClientsConfiguration: Unexpected exception during bean creation; nested exception is java.lang.NoClassDefFoundError: feign/form/multipart/AbstractWriter at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.22.jar:5.3.22] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.22.jar:5.3.22] at org.springframework.cloud.context.named.NamedContextFactory.createContext(NamedContextFactory.java:155) ~[spring-cloud-context-3.1.3.jar:3.1.3] at org.springframework.cloud.context.named.NamedContextFactory.getContext(NamedContextFactory.java:108) ~[spring-cloud-context-3.1.3.jar:3.1.3] at org.springframework.cloud.context.named.NamedContextFactory.getInstance(NamedContextFactory.java:164) ~[spring-cloud-context-3.1.3.jar:3.1.3] at org.springframework.cloud.openfeign.FeignClientFactoryBean.get(FeignClientFactoryBean.java:344) ~[spring-cloud-openfeign-core-3.1.3.jar:3.1.3] at org.springframework.cloud.openfeign.FeignClientFactoryBean.feign(FeignClientFactoryBean.java:123) ~[spring-cloud-openfeign-core-3.1.3.jar:3.1.3] at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:413) ~[spring-cloud-openfeign-core-3.1.3.jar:3.1.3] at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:402) ~[spring-cloud-openfeign-core-3.1.3.jar:3.1.3] at org.springframework.cloud.openfeign.FeignClientsRegistrar.lambda$registerFeignClient$0(FeignClientsRegistrar.java:235) ~[spring-cloud-openfeign-core-3.1.3.jar:3.1.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1191) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.22.jar:5.3.22] ... 38 common frames omitted Caused by: java.lang.NoClassDefFoundError: feign/form/multipart/AbstractWriter at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na] at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016) ~[na:na] at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621) ~[na:na] at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] at java.base/java.lang.Class.forName0(Native Method) ~[na:na] at java.base/java.lang.Class.forName(Class.java:398) ~[na:na] at java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114) ~[na:na] at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:125) ~[na:na] at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] at java.base/sun.reflect.generics.visitor.Reifier.reifyTypeArguments(Reifier.java:68) ~[na:na] at java.base/sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:138) ~[na:na] at java.base/sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:49) ~[na:na] at java.base/sun.reflect.generics.repository.ConstructorRepository.computeParameterTypes(ConstructorRepository.java:111) ~[na:na] at java.base/sun.reflect.generics.repository.ConstructorRepository.getParameterTypes(ConstructorRepository.java:87) ~[na:na] at java.base/java.lang.reflect.Executable.getGenericParameterTypes(Executable.java:279) ~[na:na] at java.base/java.lang.reflect.Method.getGenericParameterTypes(Method.java:330) ~[na:na] at org.springframework.core.MethodParameter.getGenericParameterType(MethodParameter.java:513) ~[spring-core-5.3.22.jar:5.3.22] at org.springframework.core.MethodParameter.getNestedParameterType(MethodParameter.java:553) ~[spring-core-5.3.22.jar:5.3.22] at org.springframework.beans.factory.config.DependencyDescriptor.getDependencyType(DependencyDescriptor.java:411) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory$DependencyObjectProvider.<init>(DefaultListableBeanFactory.java:1980) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1302) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:541) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1352) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1195) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) ~[spring-beans-5.3.22.jar:5.3.22] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) ~[spring-beans-5.3.22.jar:5.3.22] ... 66 common frames omitted Caused by: java.lang.ClassNotFoundException: feign.form.multipart.AbstractWriter at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na] at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na] at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[na:na] ... 99 common frames omitted Process finished with exit code 0
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Circuit breaker와 ErrorDecoder 동시 사용
강사님 안녕하세요? 강의 너무 잘 듣고 있습니다. Feign Client 강의에서 ErrorDecoder를 추가하여 try-catch문을 사용하지 않고, HTTP 에러 코드 별 처리 방법을 별도로 분리했었는데요.이번 강의에서처럼 Circuit breaker를 사용하면 API 호출 시 발생하는 모든 오류 상황에 대해 fallback 값이 전달되기 때문에 ErrorDecoder는 별도로 필요하지 않을 것 같습니다. 외부 API 호출하는 모든 케이스에서 circuit breaker를 사용한다면 ErrorDecoder는 불필요한 것이 맞나요?circuit breaker와 error decoder가 둘 다 필요하다고 한다면, error decoder은 어떤 역할을 할 수 있나요? 항상 감사드립니다.
- 해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
@LoadBalanced 관련 질문입니다.
@LoadBalanced 를 사용할시에 apigateway를 거치지 않고 user -> order 로 가는것을 확인했는데 제가 궁금한것은 보통 client 단에서 첫 요청이 들어왔을 시에만 api gateway를 거치고 그 이후 비지니스 로직을 처리하기 위해서 ms간에 소통하는것은 api gateway를 거치지 않는것이 일반적인 건가요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
각 애플리케이션에 랜덤포트를 부여하는 이유
안녕하세요!!! 랜덤포트를 부여하는 이점에 대해서 아직도 이해가 잘 안갑니다.ㅜㅜ 마이크로서비스 애플리케이션의 확장성과 랜덤포트를 부여하는게 얼마나 깊은 관계가있나요?? 저는 정해두고 쓰는게 더 편하다고 생각했거든요. 그리고 실무에서도 정말 이렇게 랜덤포트로 사용하나요?