묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
27강(댓글 무한 depth - CUD API 구현 & 테스트 데이터 삽입 Comment Response 관련 질문)
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.안녕하세요 선생님! 강의 정말 잘 수강하고 있습니다. 선생님 덕분에 기본기가 탄탄해지는 것 같아서 감사드립니다. 27강(댓글 무한 depth - CUD API 구현 & 테스트 데이터 삽입 Comment Response 관련 질문) - 24분 가량에서 Comment V2 생성을 위한 정적 팩토리 메소드의 경우 CommentResponse 책임으로 넣으셨는데, 굳이 책임을 CommentResponseV2로 넣을 정도로 큰 부분이 아니기에 하나로 넣으신건지, 아니면 프로젝트 규모적으로 보았을때 굳이 V2 Response를 생성할 정도의 규모가 아니기에 따로 만드시지 않고 하나의 Response 객체로 사용하신 것인지 궁금합니다.나중에 프로젝트 아키텍칭을 할 때 해당 내용을 기억하기위해 질문드리고자 합니다.감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의 자료에 대해서 궁금해요
강의에서 나오는 자막들 따로 받거나 할 수는 없나요??
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
컨슈머 이벤트 중복 처리
안녕하세요! 자주 질문드리는데 정성껏 답변해주셔서 감사합니다! 동일한 이벤트가 중복 전송될 가능성이 있기 때문에 article-read 서비스에 이벤트 id를 통한 중복 처리 로직을 추가 하려고합니다.article-read 는 redis를 사용하고 있기 때문에 redis에 이벤트 id를 저장해 해결하려고했습니다. 예를 들어 article-read가 이벤트를 받았을때redis 에서 이벤트 id 확인동일한 이벤트 id가 저장돼 있으면 추가 처리 안하고 message ack redis 에서 이벤트 id 확인동일한 이벤트 저장된게 없으면 서비스 로직 수행서비스 로직 결과 redis 업데이트처리 완료한 이벤트 id redis 저장 이런식으로 진행하려 했으나 만약 어떠한 문제로 인해서비스 로직 결과 redis 업데이트 ( 성공 )처리 완료한 이벤트 id redis 저장 ( 실패 )하게되면 이벤트 처리는 성공했지만 처리된 이벤트 저장에는 실패해 추후에 중복 처리가 발생할 가능성이 생길 것 같습니다. 이러한 문제 해결을 위해서비스 로직 결과 redis 업데이트처리 완료한 이벤트 id redis 저장두 작업을 하나의 트랜잭션으로 묶어 처리하려고했지만 rdb 와 동작이 다르기 때문에 (롤백 기능 제공 안함 등) 적절한 방법인지 판단이 안서는 상태네요 혹시 article-read에 이벤트 중복 처리를 한다고 하면 어떻게 구현이 가능할지 여쭤보고싶습니다
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
messagerelayconfig클래스에서
bootstrapServers의 value값은 어디에 가져오는건가요?yml이나 properties파일은 없는 거 같은데..
-
미해결비전공자도 이해할 수 있는 MSA 입문/실전 (feat. Spring Boot)
MSA강의 보다 궁금해서 질문드립니다.
MSA강의보다 질문드립니다.제가 쇼핑몰을 만든다고하면.회원관리 서비스,상품서비스,포인트 서비스,결제서비스,게시판 서비스를 만들었을경우..환경설정..이나 유틸 서비스나.. Mybatis연결한다고 가정할경우,,각 서비스 마다 작성해야하는지..별도의 서비스를 만들어 제어를 해야하는지 궁금합니다.
-
미해결카프카 완벽 가이드 - 코어편
vm 어댑터설정 문의
안녕하세요 강사님,네트워크 설정을 하려고 합니다.NAT없이 어댑터1에서만 호스트전용어댑터 를 사용하면 어떨지 궁금합니다. 이유는 아래 그림처럼 어댑터2,3,4가 비활성화되어있어 추가를 하지 못하는 상황이기 때문입니다. VM을 분명 기동하지 않았는데도요ㅠㅠ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
GlobalFilter, LoggingFilter가 동작하지 않습니다.
server: port: 8000 eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka spring: application: name: apiGateway-service cloud: gateway: server: webflux: default-filters: - name: GlobalFilter args: baseMessage: Spring Cloud Gateway WebFlux Global Filter preLogger: true postLogger: true routes: - id: user-service uri: lb://USER-SERVICE predicates: - Path=/user-service/** - id: first-service uri: lb://MY-FIRST-SERVICE predicates: - Path=/first-service/** filters: - AddRequestHeader=f-request, 1st-request-header-by-yaml - AddResponseHeader=f-response, 1st-response-header-from-yaml - name: LoggingFilter args: baseMessage: Spring Cloud Gateway WebFlux Logging Filter preLogger: true postLogger: true 다음처럼 apigateway의 설정파일을 작성하였습니다. 하지만 두 필터가 모두 동작하지 않습니다. 필터 클래스 모두 강의와 동일하게 작성하였고, first-service와 apigateway-service 모두 유레카 서버에 잘 등록되며, api 게이트웨이 또한 동작을 정상적으로 합니다. 혹시 어느 부분에서 잘못되었는 지 알 수 있을까요?
-
미해결Kafka & Spark 활용한 Realtime Datalake
kafka broker prompt 변경 확인
kafka borker prompt 변경 확인 하는 부분에서 재부팅을 한 후 로그인이 풀리면서 프롬포트에서 public-nat로 되돌아 갑니다. 뭐가 문제인지 알 수 있을 까요?
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Kafka Source Connect 버전 에러
안녕하게요 강의를 보고 있는데 Kafka Connect 이 부분이 기존의 zookeeper 에서 kraft 로 버전이 변경되서 지원을 안 하는데 혹시 다른 방법이 있을까 ? 싶어 질문 올립니다.참고로 블로그 도 여러개 봤는데 계속 에러가 걸려서 질문 올립니다. 정확히 kafka Connect 설치 를 하고 이거를 했을때 C:\Work\confluent-5.5.2>bin\windows\connect-distributed.bat etc\kafka\connect-distributed.properties Classpath is empty. Please build the project first e.g. by running 'gradlew jarAll' C:\Work\confluent-5.5.2> 윈도우이고 이런 에러가 계속 뜨는데 해결이 안됩니다.
-
해결됨장애를 허용하는 견고한 시스템 만들기
[데이터 버저닝을 활용한 멱등성 처리] 멱등성 보장을 위한 version 비교 질문
안녕하세요 준형님! 우선, 강의 정말 잘 들었습니다. 정말 정말 많이 배웠습니다 🙇🏻🙇🏻🙇🏻 다름이 아니라,데이터 버저닝 파트에서 컨슈머의 멱등성을 보장하기 위해주문 서비스가 재고 차감 이벤트에 version을 담고,상품 서비스에서는 JPA가 관리하는 상품 version과 이를 동등성 비교하여중복 소비를 방지하는 방식에 대해 질문드리고 싶습니다. 이 접근 방식에서 많은 인사이트를 얻었지만,상품의 version을 주문 서비스가 반드시 알아야 한다는 점은 조금 와닿지 않았습니다.테스트에서는 version = 0부터 시작하니 문제가 없어 보였으나,여러 이유로 두 version 값이 어긋나면 오히려 소비해야 할 이벤트까지 멱등 처리되어 버릴 수 있다고 생각했습니다.그렇다고 이를 해결하기 위해 주문 서비스가 상품 서비스로부터 version 이벤트를 직접 받아 관리하는 것도 과한 방식처럼 느껴지는데요, 이 부분에 대해 준형님의 의견을 들을 수 있다면 좋을 것 같습니다.시간 편하실 때 부담없이 답변 주시면 감사하겠습니다 🙂
-
해결됨Kafka & Spark 활용한 Realtime Datalake
디스코드 만료
디스코드가 만료되었는데 링크좀 주세요 소개페이지도 안되고 질문페이지도 안됩니다
-
미해결Kafka & Spark 활용한 Realtime Datalake
Zookeeper 설치 오류
8월말 9월초에 비슷한 질문보고 해결하려했는데 3.8.4가 url에서 없어진거 같은데 어떻게 해야하나요?
-
미해결Kafka & Spark 활용한 Realtime Datalake
github 레파지토리 생성 및 연결 관련 질문드립니다!
안녕하세요 강사님 아직 모르는것 투성이인 수강생입니다. 강사님께서는 깃허브 저장소를 생성한 뒤 토큰을 발급받으시던데 구글링을 해보니 토큰을 사용하면 보안과 유연성에 장점이 있다고 나와있었습니다.배포를 하기 위해서는 꼭 토큰을 발급받아야 하는 건지 실습 환경을 구축할 때 토큰을 사용하시는 이유가 궁금합니다!좋은 강의 만들어주셔서 감사드립니다!!
-
미해결Kafka & Spark 활용한 Realtime Datalake
git action실행 안됨
안녕하세요 강사님!ch03.8 git action 실행 강의 수강 중 입니다.강의안에 나온대로 디렉토리 설정 완료하고, master 파일의 버킷명도 제 고유버킷명으로 잘 변경했습니다. 이후 git push를 진행했고 push도 잘 된것을 깃허브에서 확인했는데요.문제는 git actions에 아무것도 올라오지 않는다는 것 입니다. 이에 chat-gpt를 통해 문제 원인을 분석해보니📌 원인master.yml 파일이 레포지토리 루트가 아니라kafka-producer/kafka-producer/.github/workflows/master.yml 처럼 하위 디렉토리 안에 들어 있었기 때문이에요.GitHub Actions는 오직 레포 최상위(repo-root/.github/workflows/) 위치만 인식합니다.하위 폴더 안에 있으면 파일이 있어도 무시돼서, Actions 탭에 아무것도 안 보였던 거예요.이와 같았습니다.chat-gpt의 수정대로 레포 구조를 바꿔 git push를 진행하면 actions에 워크플로우가 뜨고 빌드가 됩니다. 하지만 강의안에 나온 구조와는 상이해보여 질문드립니다. 정확한 문제의 원인과 해결 방안을 알 수 있을까요? 사진은 강의안대로 구성한 제 디렉토리 구조 입니다. chat-gpt가 제시한 해결 방안입니다. 이대로 했을 때 actions 탭에 워크플로우 뜸.
-
미해결Kafka & Spark 활용한 Realtime Datalake
터미널에서 NAT 인스턴스로 직접 로그인 안됨
16강 ansible 설치를 위해 터미널에서 NAT 인스턴스로 직접 로그인하려고 하는데 오류가납니다. PS C:\Users\nayun\downloads> ssh -i public-nat-key.pem ec2-user@3.39.207.192ssh: connect to host 3.39.207.192 port 22: Connection timed out 15강까지 원활히 강의따라 실습 진행한 상태입니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
흐름정리 제가 이해한게 맞나요?
쿠폰 100개를 발급해야하고 이 개수는 100을 넘어가면 안됨-> java synchronized락의 경우 쿠폰 발급을 담당하는 서버가 여러개라면 db에 쿠폰 저장(개수 업데이트) 요청이 동시에 올수 있으므로 race condition 발생-> redis의 경우 여러 서버가 쿠폰 발급 요청을 보내도 싱글 스레드이므로 쿠폰 발급 수를 정확히 100개로 맞출 수 있음. 하지만 예제의 경우 threadpool을 사용하여 각 스레드별로 쿠폰 발급이 가능하면 바로 db에 쿠폰 저장하는 로직이라서 db 부하가 심함-> kafka를 도입하여 스레드들이 쿠폰 발급 메세지만 카프카로 보내고 카프카 컨슈머가 이 메세지를 처리하여 db에 쿠폰을 저장함. 컨슈머 그룹에 속한 컨슈머는 현재 하나이므로 메세지 1개씩을 처리함 따라서 db에 부하가 심하지 않음.
-
해결됨Kafka & Spark 활용한 Realtime Datalake
AWS EC2 생성하기 2분55초 부분
private 서버 이용시 2c, 2d로 사용한다했는데 이제 2d는 없어진 모양입니다. 2c로만 진행해도 무리 없을런지요?
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
avro plugin에 안보이는거 같아요
안녕하세요 개발자님 AvroConverter 관련 문의 드립니다.Failed to start task mysql_cdc_solid_avro_payment_source_02-0 (org.apache.kafka.connect.runtime.Worker:656)java.lang.NoClassDefFoundError: io/confluent/kafka/serializers/AbstractKafkaSchemaSerDeConfig필요한거 설치 한거 같은데 노친 부분이 무엇일까여?114956 -rw-rw-r-- 1 root root 580K Oct 21 2021 avro-1.11.0.jar114955 -rw-rw-r-- 1 root root 17K May 3 2023 common-utils-7.4.0.jar114869 -rwxr-xr-x 1 root root 8.7M Sep 14 17:26 confluentinc-kafka-connect-avro-converter-8.0.0.zip114992 drwxr-xr-x 6 root root 4.0K Sep 15 17:02 confluentinc-kafka-connect-jdbc-10.8.4114947 -rwxr-xr-x 1 root root 25M Sep 14 17:42 confluentinc-kafka-connect-jdbc-10.8.4.zip115040 drwxr-xr-x 2 root root 4.0K Sep 15 17:03 debezium-connector-mysql114948 -rwxr-xr-x 1 root root 16M Sep 14 17:03 debezium-connector-mysql-1.9.7.Final-plugin.tar.gz114954 -rw-rw-r-- 1 root root 36K May 3 2023 kafka-avro-serializer-7.4.0.jar114951 -rw-r--r-- 1 root root 36K May 3 2023 kafka-avro-serializer-7.4.0.jar.1 97327 -rw-r--r-- 1 root root 36K May 3 2023 kafka-avro-serializer-7.4.0.jar.2 98927 -rw-rw-r-- 1 root root 8.8K May 3 2023 kafka-connect-avro-converter-7.4.0.jar 98495 -rw-rw-r-- 1 root root 263K May 3 2023 kafka-schema-registry-client-7.4.0.jar114949 -rw-rw-r-- 1 root root 2.5M Sep 14 17:37 mysql-connector-java-8.0.29.jar
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
소스커넥터는 사용안한 거 맞죠?
이전 강의에서 콘솔로 디비 이벤트를 소스커넥트로 추적하고 싱크커넥트로 추적한 내용을 저장했는데여기서는 소스커넥터로 추적하는 방식은 제외하고 싱크커넥터로 추적하는 방식을 사용해서 오더서비스 디비의 내용을 동기화한 건가요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
조회수 정보를 어디서 저장할지 고민입니다.
안녕하세요. 강의 너무 잘 듣고 제 프로젝트에 필요한 부분들로 리팩토링 하면서 MSA를 처음 공부하려 했습니다!먼저 제 프로젝트는 거의 똑같은 구조로 게시글이 있습니다. 2가지의 질문이 있습니다. (1) 정보를 취합하기 위해 동기로 API호출을 한다는 것은 장애 전파가 된다고 이해하고 있습니다. 그렇다면 저희 예시에서도 Article-read에서 조회수는 api호출을 통해 받기로 했습니다. 그렇다면 어느정도의 장애 전파는 허용한다고 받아들여집니다. 실제 서비스에서도 여러 정보를 취합해서 줘야하는 경우가 많을텐데 API를 통해 정보를 가져오는것이 절대 안되나요? 아니면 종종 허용하기도 하나요? (2) CQRS의 Query(질의)부분은 데이터 수정이 없어야 한다 이해했습니다. 그런데 데이터를 수정해도 되나요?예를 들어 제가 게시글 상세 조회를 게시글 모듈에서 분리하려고 합니다. 그런데 게시글 상세 조회를 하게되면 조회수가 올라갑니다. 따라서 게시글 상세조회 발생 -> 조회수 증가 이벤트 발생 ->조회수 증가 이런 식으로 구상을 했습니다. 이러한 질의 부분 모듈에서 데이터를 수정하게 만드는 이벤트가 발생해도 괜찮을지 여쭤봅니다!!