월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
maven이 아니라 gradle로 진행중이신 분들
```// maven 기준 > mvn spring-boot:run \ -Dspring-boot.run.jvmArguments='-Dserver-port=9003' // gradle 기준 (4.9 이상)> ./gradlew bootRun --args='--server.port=9003' // java jar 기준 > java -jar "-Dserver.port=9003" ./user-service.jar // 참고: gradle로 jar 만들려면.. > ./gradlew build //실행후 project의 최상단 디렉토리/build/libs에서 jar확인// gradle로 boot 실행하기> ./gradlew bootRun```알아서 잘 하시리라 생각되지만 조금이라도 시간절약이 되실까하여 올려봅니다
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Spring API Gateway 에서 feign client
API Gateway 에 AuthorizationHeaderFilter를 구현중에 있습니다. 1. token을 parsing 해서 나온 subject가 user service에 있는 username 이라서 gateway service에서 user service를 호출하기 위한 feign client를 구현하고, 이를 AuthorizationheaderFilter에서 주입하려고 했는데요. circular reference에러가 발생합니다. 구글에 찾아보니 spring bug로 gateway filter에서는 feign client를 사용할 수 없다는 얘기가 있던데, 실제로 사용할 수 없는건가요? 2. ApiGateway에 application.yaml를 만들어놓고, 특정 method에 filter 항목에 AuthorizationHeaderFilter를 지정해서 그 method 요청이 오면 filter가 걸리는 것을 확인했습니다. 그런데, 제가 구상하는 시스템에서는 실제로 Front end에서 gateway로 요청이 오는 것에는 filter를 걸고, 내부적으로 service 간 통신할 때 gateway로 들어오는 request에 대해서는 token이 필요하지 않기 때문에 filter를 걸고싶지 않은데요. 이를 구현하기 위한 아이디어를 얻고 싶습니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
API Gateway와 웹 서버 차이
안녕하세요. API Gateway 공부하면서 간단한 질문이 있어 이렇게 올립니다. 라우팅 처리나 필터 처리하는 것이 웹서버의 역할과 크게 다르지 않아 보이는데 API Gateway와 웹서버(apache, nginx... ) 차이점이 어떻게 되는지 궁금합니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
zuul 은 부하분산 기능은 없는지 궁금합니다.
안녕하세요. 강의 내용 중 리본, 줄 모두 더 이상 지원하지 않는 상태라고 하셨는데요. 리본은 스프링 로드밸런서로 대체할 수 있다면 zuul 은 기본적으로 게이트웨이 역할이고 부하분산 기능은 미미하거나 거의 없다고 이해하면 될까요:?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요 터미널로 spring-boot를 실행할 때 문제가 있어 질문드립니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강사님 무료강의 보고 따라하려 하였으나, 맥 os에 대한 방법이 나와있지 않은 것같아 구글링하여 환경변수 설정을 하였습니다. 그런데 maven의 버전이 문제인지, 2.6.4와 같은 형태로 나와있는것 같아 여러 방면으로 오류를 해결하고자 하였으나 해결에 어려움을 겪어 질문드립니다. mvn --version은 3,.8.4(최신버전)입니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
AWS RDS 사용시에도 이처럼 Kafka Connect 를 통해 동기화를 시켜줘야하나요?
한가지 궁금한 점이 있어 질문올려요. 혹시 AWS RDS 사용시에도 포트만 다른르고, 같은 애플리케이션인 2개의 서버를 띄웠을때 이처럼 Kafka Connect 를 통해 동기화 작업을 해줘야나요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
actuator 적용 시 shutdown 문제
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 강의 잘 보고 있습니다. 다름이 아니라 actuator를 사용하여 환경 변수를 적용하는 과정에서 서비스가 shutdown 후 재등록 되는데 정상적인 건가요? actuator/refresh 호출 시 서비스 로그 -> DiscoveryClient - Shutting down DiscoveryClient ... TimedSupervisorTask - task supervisor shutting down, can't accept the task DiscoveryClient - Unregistering ... DiscoveryClient - DiscoveryClient_서비스명 deregister status: 200 DiscoveryClient - Completed shut down of DiscoveryClient 실제 유레카서버 확인 시 해당 서비스 인스턴스아이디도 변경됩니다. 데이터 유실 없이 graceful shutdown 보장 되는 건가요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
리버스 프록시와 차이점이 뭘까요?
아직 이것저것 공부중인 학생입니다. 오늘 어쩌다 리버스 프록시란 단어를 듣게되어 찾아보았는데 이곳에서 설명하는 gateway service가 리버스 프록시의 역할을 하는 거 같은데 맞는건가요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료
안녕하세요~ 강의자료 어디서 다운 받아볼 수 있을까요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
혹시 강의중에 나온 이미지 파일을 사용해도 될까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 강의를 보면서 공부한것을 기록으로 남기고 싶어서 블로그에 글을 작성하려고 하는데 혹시 강의중에 나온 이미지들을 사용해도 될까요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
sink connect 생성시 fail 발생문제
WorkerSinkTask{id=my-sink-connect3-0} Task threw an uncaught and unrecoverable exception (org.apache.kafka.connect.runtime.WorkerTask) org.apache.kafka.connect.errors.ConnectException: Tolerance exceeded in error handler at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:178) at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execute(RetryWithToleranceOperator.java:104) at org.apache.kafka.connect.runtime.WorkerSinkTask.convertAndTransformRecord(WorkerSinkTask.java:495) at org.apache.kafka.connect.runtime.WorkerSinkTask.convertMessages(WorkerSinkTask.java:472) at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:328) at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:232) at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:204) at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:185) at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:235) 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) Caused by: org.apache.kafka.connect.errors.DataException: JsonConverter with schemas.enable requires "schema" and "payload" fields and may not contain additional fields. If you are trying to deserialize plain JSON data, set schemas.enable=false in your converter configuration. at org.apache.kafka.connect.json.JsonConverter.toConnectData(JsonConverter.java:370) at org.apache.kafka.connect.storage.Converter.toConnectData(Converter.java:87) at org.apache.kafka.connect.runtime.WorkerSinkTask.lambda$convertAndTransformRecord$1(WorkerSinkTask.java:495) at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndRetry(RetryWithToleranceOperator.java:128) at org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:162) ... 13 more [2022-03-06 11:22:24,134] ERROR WorkerSinkTask{id=my-sink-connect3-0} Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask) sink connect 생성시 위와 같은오류가 발생합니다. 구글링 하여 connect-standalone 파일의 설정을 false로 하여도 동일하게 오류 발생하고 해결을 못하고 있습니다. key.converter.schemas.enable=false value.converter.schemas.enable=false
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker로 db를 사용중에 만든 테이블이나 데이터들은 백업하는 방법이 따로 있을까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 제가 찾아본 방법으로는 docker 환경에서 db를 백업하고 만들어진 sql파일을 다른환경에서 컨테이너를 실행할때 같이 실행해주는 방법은 알고 있는데 docker hub에서 자체적으로 push 할 수 있을지 궁금합니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
apigateway-service에서 인증한 후 해당 인증 정보를 user-service에 전달하는 방법이 없을까요?
기존 MSA 방식이 아닌 설계에서는 JWT를 직접 검증하여 해당 JWT에 들어있는 정보를 가지고 유저정보를 가져와 SecurityContextHolder에 넣어서 사용했었습니다. 그러나 이번 강의에서처럼 apigateway-service에서 토큰의 유효성을 검증한다면 토큰에 들어있는 유저정보에 대한 값을 사용하기 위해서는 user-service에서 다시 한번 토큰에서 값을 추출하는 과정을 거쳐야 할 것 같습니다. 위와같은 상황에서는 gateway에서 1번, user-service에서 1번씩 총 두번의 JWT 검증을 하게 되는데, 이 방법 말고는 다른 방법이 없을까요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
successfulAuthentication과 AuthenticationSuccessHandler
항상 좋은 강의 잘 보고 있습니다. 저는 선생님 강의를 듣기 전 혼자 시큐리티로 JWT를 발급하는 것을 공부해보며, successfulAuthentication가 아닌 AuthenticationSuccessHandler를 상속받아 구현하여, 이곳에서 JWT를 발급받게 해주었습니다. successfulAuthentication에서 발급해주는 것과 AuthenticationSuccessHandler에서 발급하여 주는것의 차이가 있을까요? 혹시 별 차이가 없다면 어떠한 방법을 더 선호하시나요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
datasource변경 후 sql문법 오류가 발생하면
다음 옵션으로 dialect를 추가하여 해결할 수 있습니다. jpa: database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
서버 실행시 RabbitMQ 관련 에러
강사님 공지 + 다른분들도 서버 실행시 에러나는 케이스가 많은 것 같아 저의 케이스를 공유드립니다. 결론 : 스프링 클라우드 버전 변경 <spring-cloud.version>2020.0.1</spring-cloud.version> 기타 TMI https://start.spring.io/ 에서는 스프링 부트 최신 버전만 있어서 일단 2.5.X 로 받으면 스프링 클라우드 버전도 자동으로 최신 버전(2020.0.5)으로 만들어집니다. 버전 이슈로 인한 실습에 문제가 없도록 강의 초반부 영상을 따라 모든 프로젝트를 스프링 부트 2.4.2 버전으로 다운그레이드 합니다. 이렇게하니 Spring Cloud Config 섹션 전까지는 문제가 없었네요. Config 섹션에서 ecommerce.yml 설정 파일을 못읽는 문제가 발생하더라구요. 거의 하루종일 삽질하면서 손을 놓으려할때... 스프링 클라우드 버전을 다운 그레이드하니 문제가 없었습니다. 그래서 이 부분은 해결 되었고... 이 강의까지 오면서 문제없다가 RabbitMQ 설정하고 서버 실행시키는데 공지와 다른 질문자들처럼 에러가 나더라구요. config-service는 잘 올라가는데 user-service, apigateway-service는 안올라가서 또 원인 파악하다가 스프링 클라우드 버전 2020.0.1로 바꾸니 잘 됩니다. 스프링 부트 버전보다는 스프링 클라우드 버전이 중요한것 같습니다. 강사님 git에 있는 소스도 참고해보니 2020.0.0 이더라구요. 모두 화이팅하세요~!
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
ConsumerConfig.GROUP_ID_CONFIG 에러
빈으로 등록하여 ConsumerConfig.GROUP_ID_CONFIG를 설정할때 다음과 같은 에러나 나타납니다. org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.kafka.config.internalKafkaListenerEndpointRegistry'; nested exception is java.lang.IllegalStateException: No group.id found in consumer config, container properties, or @KafkaListener annotation; a group.id is required when group management is used. at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:181) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.context.support.DefaultLifecycleProcessor.access$200(DefaultLifecycleProcessor.java:54) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.context.support.DefaultLifecycleProcessor$LifecycleGroup.start(DefaultLifecycleProcessor.java:356) ~[spring-context-5.3.15.jar:5.3.15] at java.base/java.lang.Iterable.forEach(Iterable.java:75) ~[na:na] at org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:155) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:123) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:935) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:586) ~[spring-context-5.3.15.jar:5.3.15] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:414) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:302) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303) ~[spring-boot-2.6.3.jar:2.6.3] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292) ~[spring-boot-2.6.3.jar:2.6.3] at com.example.catalogservice.CatalogServiceApplication.main(CatalogServiceApplication.java:10) ~[main/: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.6.3.jar:2.6.3] Caused by: java.lang.IllegalStateException: No group.id found in consumer config, container properties, or @KafkaListener annotation; a group.id is required when group management is used. at org.springframework.util.Assert.state(Assert.java:76) ~[spring-core-5.3.15.jar:5.3.15] at org.springframework.kafka.listener.AbstractMessageListenerContainer.checkGroupId(AbstractMessageListenerContainer.java:489) ~[spring-kafka-2.8.2.jar:2.8.2] at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:425) ~[spring-kafka-2.8.2.jar:2.8.2] at org.springframework.kafka.config.KafkaListenerEndpointRegistry.startIfNecessary(KafkaListenerEndpointRegistry.java:331) ~[spring-kafka-2.8.2.jar:2.8.2] at org.springframework.kafka.config.KafkaListenerEndpointRegistry.start(KafkaListenerEndpointRegistry.java:276) ~[spring-kafka-2.8.2.jar:2.8.2] at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:178) ~[spring-context-5.3.15.jar:5.3.15] ... 19 common frames omitted Process finished with exit code 0 application.yml에 다음과 같이 설정하여 일단 넘어가긴 하였는데... 이유를 모르겠습니다..ㅠㅠ spring: kafka: consumer: group-id: consumer-group-id
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
필터에서 reject되는 경우 공통처리
안녕하세요 강사님? 좋은강의 잘 듣고 있습니다. 강의 수강 중 질문이 있습니다 ! apigateway-service에서 인증된 사용자 요청과 같은 검증을 공통으로 처리할 때, 오류가발생한 경우 현재 강의에서는 setComplete()함수를 통해 request를 user-service까지전달하지 않고 종료하는것으로 이해했습니다. 에러페이지로 redirect를 보낸다거나, 클라이언트에 에러 응답을 json형식으로 반환할 수 는없을까요 ? 즉, apigateway-service의 filter에서 reject되었을 때 에러에 대한 결과 페이지를 어떻게 깔끔하게 처리할 수 있을까요 ?? * [공식문서]를 찾아보았지만 적당한 해결책을 찾지못해 질문드립니다 !
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
custom, global filter yaml파일이 아닌 자바 소스에 설정하는 방법 문의드립니다.
안녕하세요. 먼저 좋은 강의 만들어주셔서 감사합니다. 덕분에 MSA, Spring Cloud에 대한 기초를 잘 잡아가고 있습니다. 제가 질문드리고자 하는 내용은 이번 강의에서 만든 CustomFilter, Global Filter 를 application.yml파일이 아닌 사전에 만들었던 FilterConfig.java에서 설정하는 방법입니다. CustomFilter, , Global Filter를 빈으로 주입받은 후에 필터를 넣으려고 했는데 타입이 맞지 않는 메서드만 제공하고 있는 것 같아서요. 괜찮으시다면 소스 추가 부탁드립니다. 감사합니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
ecommerce.yml 파일을 변경할 때 commit을 이용하지 않으셨는데 원래는 필요없는 작업인가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 맨 처음에 eecommerce.yml 파일을 수정하실 때는 commit을 해주셨는데 마지막에는 안해주셨더라구요. 혹시 commit을 하신 이유를 알려주실 수 있을까요?