25%
66,000원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
2개 이상의 마이크로 서비스가 결합됐을 때는 테스트코드는 어떻게 작성하는지 궁금합니다.
UserService API 를 호출할때 RestTemplate 를 통해 OrderService 의 API 를 추가로 호출하는 방법을 보고 각 마이크로 서비스들이 엔티티 단위로 모듈화 되어 설계되어있다면 이런식으로 하는구나~ 배울 수 있었습니다. 그런데 이렇게 두개 이상의 마이크로서비스가 호출되는 API 는 테스트 코드를 어떻게 작성해야 하는지 감이 잡히지 않습니다. Web Layer(Controller) 를 테스트할때는 Service 객체를 Mocking 해서 해결할 수 있을것 같은데, Service layer(Service 클래스) 를 테스트할때는 어떻게 해야할까요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
mvn, jar
docker image로 푸쉬하는 과정에서 mvn이 필요한데https://www.inflearn.com/questions/337921 해당 글 내용을 보면 mvn 설치강좌가 있다고 하는데 어떤 곳인지 알 수 있을까요?? 그리고 꼭 mvn으로 컴파일을 해야 jar파일이 생성되는 것인가요??
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
source-connect 등록 시 에러 질문이요
안녕하세요 강사님 강의 잘 듣고 있습니다.제가 기존에 윈도우에서 mariadb를 설치하고 3307포트를 사용하고 있었습니다.그런데 윈도우에서 진행하면 여러가지 오류로 때문에docker에다 mariadb를 pull 받고 run 해서 3308포트를 포트바인딩으로 3306포트를 사용하게 했습니다.docker run --name mariadb -d -p 3308:3306 --restart=always -e MYSQL_ROOT_PASSWORD=비민번호 mariad포트바인딩한 이유는도커로 실행한 mariadb 에서 port가 3306을 사용중이어서 그랬습니다.(도커로 받은 이미지는 안 건드는게 좋을 것 같아서 포트바인딩을 했습니다.) 결국 주키퍼, 카프카, 카프카커넥트를 모두 켜고 my-source-connect를 아래와 같이 등록했습니다.{ "name" : "my-source-connect", "config" : { "connector.class" : "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url":"jdbc:mysql://localhost:3306/mydb", "connection.user":"root", "connection.password":"비민번호입력함", "mode": "incrementing", "incrementing.column.name" : "id", "table.whitelist":"users", "topic.prefix" : "my_topic_", "tasks.max" : "1" } }그러면 response body에 my-source-connect가 성공한 response가 201로 응답되고127.0.0.1:8083/connectors 로 get 요청해도my-source-connect가 잘 뜹니다. 하지만 문제는127.0.0.1:8083/connectors/my-source-connect/status 으로 get 요청하면 다음과같이FAILD가 뜹니다.{ "name": "my-source-connect", "connector": { "state": "FAILED", "worker_id": "192.168.56.1:8083", "trace": "org.apache.kafka.connect.errors.ConnectException: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:59)\r\n\tat io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:94)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:185)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:210)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:349)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:332)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:140)\r\n\tat org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:117)\r\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\r\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\r\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n\tat java.lang.Thread.run(Thread.java:750)\r\nCaused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)\r\n\tat com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:828)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:448)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:241)\r\n\tat com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:198)\r\n\tat java.sql.DriverManager.getConnection(DriverManager.java:664)\r\n\tat java.sql.DriverManager.getConnection(DriverManager.java:208)\r\n\tat io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250)\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:80)\r\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:52)\r\n\t... 12 more\r\nCaused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure\n\nThe last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)\r\n\tat sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)\r\n\tat sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)\r\n\tat java.lang.reflect.Constructor.newInstance(Constructor.java:423)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)\r\n\tat com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)\r\n\tat com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89)\r\n\tat com.mysql.cj.NativeSession.connect(NativeSession.java:120)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:948)\r\n\tat com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:818)\r\n\t... 20 more\r\nCaused by: java.net.ConnectException: Connection refused: connect\r\n\tat java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)\r\n\tat java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)\r\n\tat java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)\r\n\tat java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)\r\n\tat java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)\r\n\tat java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)\r\n\tat java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)\r\n\tat java.net.Socket.connect(Socket.java:613)\r\n\tat com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153)\r\n\tat com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)\r\n\t... 23 more\r\n" }, "tasks": [], "type": "source" }예전에 윈도우에 있던 mariadb로 3307포트로 요청하고 get하면 정상적으로 잘 됐습니다.하지만 docker에서 run해서 컨테이너를 생성한 3306포트의 mariadb라서 문제가 있는거 같습니다..response로 온 trace를 검색해도 원인을 파악하기는 어렵네요뭐가 문제로 보이시고 어떻게 해결하는게 좋을까요?감사합니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
innodb 관련 에러
안녕하세요!뒤늦게 강의를 수강하고 있습니다.현재 mariadb docker build 후에 docker run을 하게 되면 아래와 같은 에러가 발생합니다.구글링을 해도 방법을 찾을 수가 없어요 ㅜㅜ[Dockerfile][Docker logs mariadb]어떻게 해결해야 할까요?...
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Orders Microservice 수정 - MariaDB 강의에서 order-service 실행이 안됩니다..
안녕하세요 강사님 강의 잘 보고 있습니다. https://www.inflearn.com/questions/641464제가 예전에 위에 링크로 질문을 했었는데.. 아직까지도 해결이 되지 않아서 다시 메일을 보냅니다.지금은 전에 질문 했던 것 과 조금 다른 상황이라 위에 링크는 잊으셔도 됩니다.현재 데이터 동기화를 위한 Apache Kafka의 활용 ②Orders Microservice 수정 - MariaDB 부분을 수강중입니다. 현재 mariadb를 연결시키면 order-service가 실행 안되는 문제입니다.당연히 콘솔과 heidisql에서 mariadb 접속이 아주 잘됩니다. 문제는order-service에 mariadb 를 설정하고 실행시켰는데 다음과 같은 에러가 발생하면서 실행이 안됩니다.java.sql.SQLInvalidAuthorizationSpecException: Could not connect to address=(host=localhost)(port=3307)(type=master) : (conn=3) Access denied for user 'root'@'localhost' (using password: YES)Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding' 그래서 grant all privileges on root.* to root@'localhost' identified by '비밀번호입력';grant all privileges on root.* to root@'%' identified by '비민번호입력';해서 다음과 같은 상태를 만들었습니다.그럼에도 불구하고 order-service를 실행시키면 실행이 되지 않습니다..분명히 명령프롬프트 창으로도 heidisql 같은 툴로도 접속이 아주 잘됩니다.해결책은 에러 검색해보면 나오는 해결책은 제가 적용한 해결책하고 동일합니다..전에 안되면 order-service 압축파일을 메일로 보내다랄고 하셔서 도저히 해결이 안되서 메일 한번 보내봅니다..메일 한번 확인해 주시면 감사하겠습니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Orders Microservice 수정 - MariaDB 듣던중 질문드립니다.
Orders Microservice 수정 - MariaDB강의 중에 db create table orders 하는데 @Entity가 Orders 가 있어서 jpa가 자동으로 테이블이 만들어버리네요강의 들을때는 일단 @Entity 막아두고 하면 될까요??
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
프락시 역할을한다는것이 어떤 의미인가요?
말씀하신데로 내부의 구조를 숨기는것을 프락시라고 하는건가요? 좀 검색해봐도 그냥 중계기? 그런 개념으로만 이해가 되서요.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
안녕하세요
RestTemplate 듣다 질문드려요http://127.0.0.1:8000/order-service/%s/orders 에서 %s의 파라미터는 userId를 넣어주는데 언제 이걸 넣어주는건가요??getUserByUserId 의 매서드 파라미터 usrId가 쏙 들어가는 형태인가요??
- 해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Gateway와 Discovery를 사용한 무중단 서비스 방법
안녕하세요 선생님? 강의 정말 잘보고있습니다. 감사합니다. 다름이 아니라 강의 내용처럼 따라서 잘구성해보았습니다. 잘돌아갑니다. 그런데 해결하고 싶은게 있습니다.동일 서비스 중 하나가 중단됬을때 Gateway가 LB방식이라 중단된줄 모르고 중단된 서비스로 요청이 들어갑니다. 그러다보니 Connection 오류가 납니다. 대략 30초에서 1분 이후부터는 살아있는 서비스로만 요청이가서 잘 동작합니다. 만약 운영중이라면 30초에서 1분동안은 서비스가 불안할텐데 어떡하면 해결할 수 있을까요? 시스템 구성은 다음과 같습니다. GW <-> Discovery <-> 동일서비스 #3개(만약 #2번이 다운됬을때 #2번 서비스가 호출되어 서비스가 됬다 안됬다 하는 현상발생)좋은 방법이나 예제가 있으면 감사하겠습니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
카프카 에러 시
카프카 설정을 잘못하여 에러를 발생시켜 보았는데 아래와 같은 메세지를 출력하며 계속 연결을 시도하는 것을 확인했습니다.Connection to node -1 (/127.0.0.1:9092) could not be established. Broker may not be available.Bootstrap broker 127.0.0.1:9092 (id: -1 rack: null) disconnectedNode -1 disconnected.혹시 이러한 경우 몇번만 연결을 시도하고 예외를 발생시킨다거나 하는 방법이 있을까요?? 추가로 이런 상황에서는 보통 어떤식으로 장애 대응을 하는지 궁금합니다. 브로커의 수를 늘리는 것도 이러한 상황을 방지할 수는 있겠지만, 결국 언제나 문제는 생길 수 있다고 생각하여 질문드립니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
윈도우에서 카프카 토픽 삭제 시, 카프카가 실행이 안됩니다..
https://www.inflearn.com/questions/644825제가 예전에 올린 글입니다.질문한 글에 댓글을 또 달았었는데 도저히 해결을 할 수 가 없어서 다시 질문올립니다. 제가 윈도우 환경에서 카프카 토픽을 삭제 했는데그 뒤로 답글로 제시해주신 해결책을 해보려고 해도 해볼 수가 없었습니다..즉, C:\Temp 디렉토리 하위에 zookeeper, kafka 폴더가 전혀없고저의 C:\Temp 아래는 폴더 구조는 다음과 같습니다..2020(폴더)HncDownload(폴더)Service.logAUtempR(폴더 - 안에 아무것도 없음) 그리고 기존 에 사용하고 있던 Kafka환경 폴더(강의에서 제공해주신 폴더)를삭제하고 다시 압축을 풀어서 압축을 푼 경로에zookeeper와 kafka를 실행해도 zookeeper는 실행되고 kafka는 실행되지 않습니다...즉, 동일한 에러가 발생하네요..대체 어떤 걸 지워야지 다시 kafka서버가 정상 실행될까요? 참고로 자료 올려주신 윈도우용 카프카 파일 전부 삭제하고 다시 압축 풀고 설정해도토픽목록은 동일한 에러로 안보이고, 카프카 역시 동일한 에러로 켜지지 않습니다..감사합니다.
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
카프카 토픽안쓰고 저장하면 대용량 처리에 불리한 이유가 있나요?
안녕하세요 강의를 듣다가 궁금증이 카프카 토픽을 안쓰고 저장하면 대용량 처리에서 불리한 이유가 있나 싶어 궁금해 졌습니다. 우선 인터넷에서 검색해서 찾아본 봐로는그러면 카프카 사용하면 대용량 처리에 유리한 이유가병렬처리에 의한 데이터 처리율 향상 : 카프카는 아래 보실 아키텍처에 보면 데이터를 병렬로 처리함으로서 데이터를 빠르고 효과적으로 처리할 수 있습니다. disk에 순차적으로 데이터를 적재하기 때문에 임의 접근(random access) 방식보다 훨씬 더 빠르게 데이터를 처리합니다.데이터 유실 방지 : disk에 적재되기 때문에 만약 불의의 사고로 서버가 다운되었을 시에도 데이터가 유실되는 일 없이 재시작하여 기존 데이터를 안정적으로 처리 가능합니다.클러스터링에 의한 고가용성 서비스 : Scale-out이 가능하여 시스템 확장이 용이하며 어떤 하나 혹은 몇 개의 서버가 다운되도 서비스 자체가 중단될 일 없이 시스템이 운용가능합니다.출처 : https://engkimbs.tistory.com/691정도로 보이는데요 그렇다면토픽을 사용하는 경우와카프카 커넥트를 사용하는 경우가 있었는데 (프로듀서, 컨슈머를 파이프라인을 매번 구성하기 힘들어서 사용하는 것으로 알고 있습니다.)그러면 우선 첫번째 질문은토픽을 사용할 때와 카프카 커넥트를 사용할 때 모두 카프카가 알아서 병령처리를 해주고 데이터 유실 방지를 해주는 건가요?? 또한 두번째 질문은 강의에서 order-service를 여러 개 띄우고 주문 요청을 여러 번 하면여러 개의 order-service의 db에 나눠서 저장을 하는 식으로 했는데요현업에서 MSA환경에서 프로젝트할 때도예를들면 order-service, user-service, catalog-service 각각 db를 하나씩 사용하는게 일반적인 방법인가요? 즉, 각 서비스마다 db를 하나씩 두는 것이 일반적인 방법인가요? 세번째 질문은 강의에서order-service를 여러개 띄우고 하나의 db에 저장하는 방식을 사용했는데즉, Kafka Topic에 설정된 Kafka Sink Connect를 사용해 단일 DB에 저장 했서 데이터를 동기화 했는데.그러면 카프카 커넥트를 사용하지 않고는 여러개의 order-service를 단일 db에 저장할 수 없나요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
jwt 질문드립니다.
안녕하십니까 선생님강의 정말 알차고 재밌게 잘 듣고 있습니다. jwt 궁금증이 생겨 질문드려요사용자가 로그인 시response.addHeader("token", token); response.addHeader("userId", userDetails.getUserId());토큰을 발급 받게 되고, 토큰을 받고 나면 로그인한 사용자는 계속 다른 페이지 접근시 토큰을 계속 들고 다른 페이지에 이동되게 되나요? 토큰의 만료 시점은 저희가 정해놓은 시간에 따라서 결정되는건가요??아님 세션처럼 생명주기가 있는건가요??
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
@EnableFeignClients 어노테이션 인식 안됨
강사님 안녕하세요! 강사님 덕분에 매우 많이 배워나가고 있습니다. 아무리 구글링을 해도 해결책을 찾지 못해 질문드리게 되었습니다. 메이븐을 돌려도 에러는 안 나는데 @EnableFeignClients 를 호출할 수 없는 오류가 계속 발생하여 질문드립니다.<?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.inflearn</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> <!-- h2 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> <scope>runtime</scope> </dependency> <!-- Validation --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> <version>2.7.3</version> </dependency> <!-- JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>2.7.3</version> </dependency> <!-- ModelMapper --> <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version>3.1.0</version> </dependency> <!-- Spring Security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>2.7.3</version> </dependency> <!-- JWT --> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <!-- Config Server와 연동하기 위함, config --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <!-- Config Server와 연동하기 위함, bootstrap (서버 재기동) --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> </dependency> <!-- Config Server와 연동하기 위함, Actuator (서버 재기동 x) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- AMQP --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <!-- openfeign --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </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> <version>${parent.version}</version> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project>
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
카프카 topics 삭제 질문이요...
현재 기존에 있던 orders와 my_topic_users 토픽을 삭제하려고한다./c/Work/Kafka-practice/kafka 위치에서$ ./bin/windows/kafka-topics.bat --bootstrap-server localhost:9092 --list 명령어로 토픽이름 확인하니까 다음과 같이 나옵니다.__consumer_offsetsconnect-configsconnect-offsetsconnect-statusexample-catalog-topicmy_topic_usersorders/c/Work/Kafka-practice/kafka 위치에서$ ./bin/windows/kafka-topics.bat --delete --topic orders --bootstrap-server localhost:9092 이렇게 orders 토픽 삭제 명령어를 입력했습니다.(입력후 새로운 경로창 이 나오며 커맨드라인이 명령어 먹은것 처럼 일어남)그러고 나서 다시$ ./bin/windows/kafka-topics.bat --bootstrap-server localhost:9092 --list 명령어로 토픽 리스트를 보려고하는데..아래와 같은 에러가 나서 검색해보니까[2022-09-06 14:33:35,758] WARN [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)현재 zookeeper 실행시킨다음./bin/windows/kafka-server-start.bat ./config/server.properties 명령어로 kafka 실행시켜도 안켜집니다./c/Work/Kafka-practice/kafka 위치에서vim ./config/server.properties 으로 해당 파일 접속하면listeners=PLAINTEXT://:9092 부분 이 주석 되있는데이 부분을 주석 해제하고 저장했습니다.그래도 여전히 동일한 오류로 kafka는 안켜지며토픽리스트 또한 동일한 에러가 나면서 안보여집니다..그래서 일단 listeners=PLAINTEXT://:9092 부분 다시 주석으로 원복 시켰습니다.그리고나서 동일한 ./config/server.properties 파일에서#advertised.listeners=PLAINTEXT://your.host.name:9092이 부분을 주석 풀고 아래처럼 변경함advertised.listeners=PLAINTEXT://localhost:9092그래도 여전히 kafka는 안켜지며 토픽리스트도 안보여집니다...kafka 실행시키면 에러나면서 꺼지는데마지막에는 다음과 같은 에러가 발생합니다...[2022-09-06 15:08:10,341] INFO [ReplicaAlterLogDirsManager on broker 0] Removed fetcher for partitions Set(orders-0) (kafka.server.ReplicaAlterLogDirsManager)[2022-09-06 15:08:10,351] ERROR Shutdown broker because all log dirs in C:\tmp\kafka-logs have failed (kafka.log.LogManager)검색하고 해볼 수 있는건 다 해봐서그냥 windows로 올려주신 카프카 설정을 다시 다운받고 할까 생각중인데..그래도 왜 안되는지는 알아야할 것같습니다..어떻게하면 이 상황을 해결할 수 있을까요?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
mariadb를 order-service의 application.yml에 등록하고 실행이 안됩니다.
안녕하세요 강사님 강의 잘 듣고있습니다. 현재저는 windows 운영체제 환경입니다.제가 orders Microservice수정 - mariadb 강의 부분을 듣다가mariadb를 order-serviced의 application.yml에 설정하고application.yml의 mariadb관련 설정은 다음과 같습니다. ( 참고로 저는 3307포트 사용합니다.)datasource: url: jdbc:mariadb://localhost:3307/mydb driver-class-name: org.mariadb.jdbc.Driver username: root password: 123456이상태에서 order-service를 실행시키니까 다음과 같은 에러가 발생했습니다.java.sql.SQLInvalidAuthorizationSpecException: Could not connect to address=(host=localhost)(port=3307)(type=master) : (conn=3) Access denied for user 'root'@'localhost' (using password: YES)Current charset is UTF-8. If password has been set using other charset, consider using option 'passwordCharacterEncoding' 에러를 검색해보니까계정에 대한 접근 권한이 제대로 설정되지 않은 경우로 보였습니다.그래서 접근 권한을 변경해주려고 했습니다.기존에> show grants for root@localhost; ( show grants; ) 명령어를 입력하면 다음과 같았고> show grants for root@'%'; 명령어를 입력하면 다음과 같았습니다.그래서grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어와grant all privileges on root.* to root@'%' identified by 'root'; 명령어를 입력해 보았다.(사실 에러를 해결하려고 권한을 주려고한건데.. identified by '비밀번호' 로 설정되는걸 몰랐습니다..) > grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어 입력후에> show grants; 확인하면 빨간줄이 추가 됐습니다. 그리고 password도 변경됐습니다.> grant all privileges on root.* to root@'%' identified by 'root'; 명령어 입력후> show grants for root@'%'; 빨간줄이 추가됐습니다. 그리고 password도 변경됐습니다.그리고 나서유레카 서버를 실행시키고주키퍼, 카프카 , 카프카커넥트 까지 실행시키고apigateway 실행, config-service 실행 user-service 실행한 후마지막으로 order-service를 실행시키니까 됩니다.그런데 문제는kafka 마지막 강의인 kafka를 활용한 데이터 동기화2 부분을 따라하는데즉, orderservice를 2개 실행시키고 db에 등록이 잘 되나 확인하는 과정에서주문 요청을 잘되는데db에 등록이 안됩니다... 심지어 order-service#1, order-service#2콘솔에 모두 번갈아가며 데이터가 들오는 것도 확인했습니다.하지만 mariadb 에는 데이터가 들어가지 않습니다.h2-console에서 확인한 mariadb와 명령프롬프트 창으로 킨 마리아db모두 데이터가 들어오지않습니다. 그러다가grant all privileges on root.* to root@'localhost' identified by '123456'; 명령어와grant all privileges on root.* to root@'%' identified by '123456';이렇게 한번 바꾸고 다시grant all privileges on root.* to root@'localhost' identified by 'root'; 명령어와grant all privileges on root.* to root@'%' identified by 'root';명령어를 치고 서버를 다시 실행시키니까 데이터가 아까 요청한게 전부 들어가 있습니다...(근데 사실 mariadb의 mydb에는 postman에서 요청한0eabbd2e-f8d3-448f-89c1-79642b7ea765 이런 형식의 userId가 없는데 어떻게 데이터가 들어갔는지 의문이네요) 걸리는게"my-source-connect", "my-sink-connect", "my-order-sink-connect"이 3가지를 post 요청으로 등록할 때"connection.password":root 가 아니라"connection.password":123456 이었습니다. (히스토리 확인해보니까 확실히 맞습니다.) 또한 my-order-sink-connect를 등록할 때는 mariadb는grant all privileges on root.* to root@'localhost' identified by '123456'; 명령어와grant all privileges on root.* to root@'%' identified by '123456';을 적용한 채로 커넥트를 등록한것 같았습니다.. (사실 계속 왔다갔다 해서 확실하지 않습니다.) 현재 기존에 order-service의 application.yml에 mariadb를 등록하기 전에users/{userId} 으로 get 요청하는 것도"orders": []현재 orders의 정보가 나오지 않는 상황입니다.. 결론은 현상황을 어떻게 해결해야할지 모르겠습니다..일단 처음에러를 잘 대처한거부터가 맞는건지 모르겠습니다..현상황을 해결할 수 있는 방법이 있는지아니면 처음 에러가 발생했을 때 어떻게 해결을 해야할지 알려주시면 감사하겠습니다..긴글 읽어주셔서 감사합니다.. 마지막으로 현재 order-service의 jpa, datasource 관련 application.yml 설정은 다음과 같습니다. jpa: hibernate: ddl-auto: update # 변경된 내용이 있을 경우에만 업데이트 show-sql: true generate-ddl: true datasource: url: jdbc:mariadb://localhost:3307/mydb driver-class-name: org.mariadb.jdbc.Driver username: root password: root
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
mariadb 가 h2-console에서 연결이 안됩니다..
현재 저는 Order Microservice에서 mariaDB 연동 강의를 듣고있습니다.제가 mysql이 3306 포트를 사용중이라mariadb port를 3307로 설정했으며 db이름은 mydb로 생성했습니다.그리고 비밀번호도 제대로 입력한거 맞습니다.그런데 order-service에서 h2-console에서 비밀번호까지 입력하고 Test Connection하면 연결이 안됩니다.저는 분명히 pom.xml에서 다음과같이 mariadb 디펜던시를 추가하고(혹시몰라서 mavenrepository 사이트에있는거 복사했습니다.) 메이븐 새로고침까지 누르고order-service를 실행했습니다.<dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>2.7.2</version> </dependency>그리고 Maven 확인해도 mariadb 디펜던시는 추가돼있습니다...현재 order-service의 application.yml은 다음곽 같습니다.. 설정정보가 대체 뭐가 문제일까요??server: port: 0 # 0번 포트는 랜덤포트 spring: application: name: order-service h2: console: enabled: true settings: web-allow-others: true path: /h2-console jpa: hibernate: ddl-auto: update show-sql: true generate-ddl: true datasource: driver-class-name: org.h2.Driver url: jdbc:h2:mem:testMsaDb # jdbc url eureka: instance: instance-id: ${spring.application.name}:${spring.application.instance_id:${random.value}} client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://127.0.0.1:8761/eureka #(127.0.0.1 = localhost) logging: level: com.example.orderservice: debug에러에는 계속Class "com.mariadb.jdbc.Driver" not found [90086-176] org.h2.message.DbException: Class "com.mariadb.jdbc.Driver" not found [90086-176] at org.h2.message.DbException.get(DbException.java:167) at org.h2.util.Utils.loadUserClass(Utils.java:672) at org.h2.util.JdbcUtils.getConnection(JdbcUtils.java:135) at org.h2.server.web.WebServer.getConnection(WebServer.java:693) at org.h2.server.web.WebApp.test(WebApp.java:896) at org.h2.server.web.WebApp.process(WebApp.java:222) at org.h2.server.web.WebApp.processRequest(WebApp.java:171) at org.h2.server.web.WebServlet.doGet(WebServlet.java:126) at org.h2.server.web.WebServlet.doPost(WebServlet.java:163) at javax.servlet.http.HttpServlet.service(HttpServlet.java:681) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:750) Caused by: org.h2.jdbc.JdbcSQLException: Class "com.mariadb.jdbc.Driver" not found [90086-176] at org.h2.message.DbException.getJdbcSQLException(DbException.java:344) ... 44 more Caused by: java.lang.ClassNotFoundException: com.mariadb.jdbc.Driver at java.net.URLClassLoader.findClass(URLClassLoader.java:387) at java.lang.ClassLoader.loadClass(ClassLoader.java:419) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) at java.lang.ClassLoader.loadClass(ClassLoader.java:352) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:264) at org.h2.util.Utils.loadUserClass(Utils.java:665) ... 42 more이라고 해서 검색해보면 해결책은 디펜던시 추가하는거 밖에 없습니다...뭐가 틀렸는지 잘 모르겠어서 질문남깁니다. 감사합니다..
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
갑자기 127.0.0.1:8000/user-service/** 가 작동하지 않습니다..
안녕하세요 현재 Microservice간 통신의RestTemplate 사용 강의를 듣던중에 포스트맨으로 테스트를 하는데POST 방식 요청인127.0.0.1:8000/user-service/users127.0.0.1:8000/user-service/login 은 잘됩니다.<br>하지만 GET 방식 요청인127.0.0.1:8000/user-service/users127.0.0.1:8000/user-service/users/welcome127.0.0.1:8000/user-service/users/health_check127.0.0.1:8000/user-service/users/{userId} 가 먹히지 않습니다.즉 디버깅 브레이크 포인트도 안걸리고 그냥 401 에러가 발생합니다...즉,127.0.0.1:8000/user-service/login 으로 얻은 response의 Header에 있는 token을가지고요청할 때 Bearer Token에 넣어도 401 에러가 발생합니다...난감합니다...갑자기 잘 되다가 왜이런지 모르겠네요..분명 apigateway-service의 application.yml에get방식은 AuthorizationHeaderFilter 를 걸어줬습니다..- id: user-service uri: lb://USER-SERVICE predicates: # 조건절이다. - Path=/user-service/** - Method=GET filters: - RemoveRequestHeader=Cookie - RewritePath=/user-service/(?<segment>.*), /$\{segment} - AuthorizationHeaderFilter<br>그런데 정말 이해가 안가는것이get 방식으로127.0.0.1:8000/user-service/** 요청을 하면 Bearer Token을 정상적으로 넣어도 401 에러가 발생하는데get 방식으로 user-service의 자체 포트번호를 넣고127.0.0.1:67026/** 이런식으로 요청하면 BearerToken을 잘못 넣어도 정상적으로 작동합니다...대체 왜이런거죠??<br>참고로 현재 저는 대칭키 방식을 이용한 암호화를 사용하고 있습니다.(비대칭키 암호화는 적용하지 않았습니다.)그런데 이것은 user-service에서 get방식으로 요청하는데 문제가 있어보이지는 않습니다..어떻게 하면 get방식에서 401 에러를 발생하지 않도록 할 수 있을까요?아니면 더 확인해야할 정보가 뭐가 있을까요?감사합니다.<br>현재 apigateway-service의 application.yml이 아래와 같이 되있고spring: cloud: config: uri: http://127.0.0.1:8888 name: ecommerce # ecommerce.yml 파일을 가져온다.native에 있는 ecommerce.yml 은 다음과 같습니다.token: expiration_time: 86400000 secret: user_token_native_ecommerce gateway: ip: 192.168.45.163참고로 token.secret이 user_token_native_ecommerce는 해당 ecommerce.yml 파일 밖에 없기 때문에 경로는 확실합니다. ( 확실히 config-service 의 application의 search-locations 경로 안에 ecommerce.yml 파일이 있습니다.)대체 뭐가 문제여서 get 방식으로127.0.0.1:8000/user-service/** 요청이 401 에러가 발생하는 것일까요?<br>혹시나해서 UserController도 같이 올려봅니다.@RestController @RequestMapping("/") public class UserController { private Environment env; private UserService userService; @Autowired private Greeting greeting; @Autowired public UserController(Environment env, UserService userService) { this.env = env; this.userService = userService; } @GetMapping("/health_check") public String status() { return String.format("It's Working in User Service" + ", port(local.server.port)="+ env.getProperty("local.server.port") + ", port(server.port)="+ env.getProperty("server.port") + ", token secret="+ env.getProperty("token.secret") + ", token expiration time="+ env.getProperty("token.expiration_time")); } @GetMapping("/welcome") public String welcome() { //return env.getProperty("greeting.message"); return greeting.getMessage(); } @PostMapping("/users") // 제네릭타입으로 반환할 형태도 명시할 수 있다. public ResponseEntity<ResponseUser> createUser(@RequestBody RequestUser user) { ModelMapper mapper = new ModelMapper(); mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); // RequestUser를 UserDto로 매핑한다. UserDto userDto = mapper.map(user, UserDto.class); userService.createUser(userDto); // userDto 를 ResponseUser 형으로 변경한다. ResponseUser responseUser = mapper.map(userDto, ResponseUser.class); // rest api 식으로 반환하자 return ResponseEntity.status(HttpStatus.CREATED).body(responseUser); // 201번 성공코드 반환 } @GetMapping("/users") public ResponseEntity<List<ResponseUser>> getUsers() { Iterable<UserEntity> userList = userService.getUserByAll(); List<ResponseUser> result = new ArrayList<>(); userList.forEach(v -> { result.add(new ModelMapper().map(v, ResponseUser.class)); }); // v를 ResponseUser 클래스로 변경 return ResponseEntity.status(HttpStatus.OK).body(result); } @GetMapping("/users/{userId}") public ResponseEntity<ResponseUser> getUser(@PathVariable("userId") String userId) { UserDto userDto = userService.getUserByUserId(userId); ResponseUser returnValue = new ModelMapper().map(userDto, ResponseUser.class); return ResponseEntity.status(HttpStatus.OK).body(returnValue); } }
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
질문 있습니다
order service1, order service 2 에 각각 db가 있는경우(MQ로 동기화)order service1, order service2 - MQ server - db 2번 방법은 db는 한개 1, 2의 경우를 설명해주셨는데 ,2번에 경우에도 특정 시점에서는 MQ server에서 db로 주문이 저장 안되서 총 5개 저장했을 때 DB에 3개 저장되고 MQ server에 아직 2개가 있을 때 사용자를 검색했을 때 해당 사용자의 order이 3개일 수도 있지 않나요 ?
- 미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
porm.xml 관련 문제가 있는데 질문있습니다
<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>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.3.176</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> <dependency> <groupId>org.modelmapper</groupId> <artifactId>modelmapper</artifactId> <version>2.3.8</version> </dependency> <dependency> <groupId>jakarta.validation</groupId> <artifactId>jakarta.validation-api</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </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> 위 패키지들을 추가하고 실행시키면 java: error reading /Users/user/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/9.0.65/tomcat-embed-core-9.0.65.jar; zip file is empty아래와 같은 에러가뜨는데 이유를 모르겠습니다 ...