inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

멀티 브로커 설정 중 포트 충돌 발생

해결됨

카프카 완벽 가이드 - 코어편

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 멀티 브로커 설정하는 과정에서 문제가 발생하였는데요. kafka의 server.properties 를 훑어보니 confluent.metadata.server 관련 포트로 보입니다. 강의에서는 관련 설정을 별도로 수정하지 않고 진행 해도 문제가 되지 않지만 저의 경우에는 위와 같이 예외가 발생해서 진행할 수 없었습니다. 그래서 저는 수동으로 각각 8090, 8091, 8092 로 수정하여 실행했는데 우선 실행은 잘 됩니다. 강의 진행하는데 문제는 없겠죠...? 강사님과 환경을 똑같이 설정했다고 생각했는데 왜 차이가 발생하는걸까요 ㅜ

  • kafka
  • 데이터-엔지니어링
떨스티 댓글 2 좋아요 0 조회수 182

MSA 에서 Monolithic Architecture로 마이그레이션

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 강사님 ! 강의 잘듣고 있습니다. 강의를 거의 다들었는데, Monolithic Architecture로 마이그레이션 해보고 싶다는 생각이 들어 해보려고 합니다. 각각의 모듈을 하나의 어플리케이션의 패키지로 만들기만 하면 될까요 ? 어느 부분을 신경쓰면 좋을지 간단하게라도 조언해주시면 정말 감사드리겠습니다 .!! 이 강의를 듣기를 진심으로 잘했다는 생각이 듭니다. 좋은 강의 해주셔서 감사드리고 다음 강의도 기대하겠습니다 !!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
댓글 2 좋아요 0 조회수 127

CDC Connect 통시에서의 암호화 관련 하여 문의 드립니다.

미해결

카프카 완벽 가이드 - 커넥트(Connect) 편

안녕하세요. 외부 DB 에 connect 하여 CDC를 통해 데이터를 가져 오는 것을 하고 있습니다. 외부에서 가져오다 보니 데이터를 보호 하고 싶다는 생각이 들었습니다. 챗 GPT 에게 우선 물어 보니 properties 설정에 security.protocol=SSL connection.url=jdbc:mysql://your.db.host:3306/yourdb?useSSL=true&requireSSL=true&verifyServerCertificate=true connection.user=db_user connection.password=db_pass 이런 설정을 하라는 답변이 왔는데, kafka 설정과, JDBC 암호를 적용 해야 한다고 합니다. 제가 잘 몰라서, 이 답변이 신뢰 할수 있는 건지 알 수가 없습니다. 1. kafka에서 암호화 하여 통신이 가능한 걸까요? 2. 암호하가 적용 된다면 kafka connect 에서 동작 원리에 도 상관없이 적용이 될까요? 외부에 kafka connect로 DB의 데이터를 가져 오는 경우가 실무 에서도 많이 있나요? 그럴 경우 데이터 암호화는 어떻게 처리 하나요?

  • kafka
  • 데이터-엔지니어링
김동선 댓글 2 좋아요 0 조회수 182

spark01 인스턴스 생성시 문제점 발생

미해결

Kafka & Spark 활용한 Realtime Datalake

우분투 서버 선택하는부분에 강사님과 다른 목록밖에 없어서 인스턴스 시작이 되고있지 않습니다.

  • kafka
  • apache-spark
  • pyspark
  • data-lake
syjo 댓글 1 좋아요 1 조회수 110

최신 webflux 라이브러리에서 yml 작성법

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

server: port: 8000 eureka: client: register-with-eureka: false fetch-registry: false service-url: defaultZone: http://localhost:8761/eureka spring: application: name: apigateway-service cloud: gateway: server: webflux: routes: - id: first-service uri: http://localhost:8081/ predicates: - Path=/first-service/** filters: - AddRequestHeader=first-request, first-request-header2 - AddResponseHeader=first-response, first-response-header2 - id: second-service uri: http://localhost:8082/ predicates: - Path=/second-service/** filters: - AddRequestHeader=second-request, second-request-header2 - AddResponseHeader=second-response, second-response-header2 위처럼 weflux:라고 yml에서 작성해주셔야 잘 동작합니다.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
On_Nij 댓글 2 좋아요 0 조회수 242

python auto_commit_consumer.py 실행 이후

미해결

Kafka & Spark 활용한 Realtime Datalake

실행이 되지 않습니다. 원인이 어떤 것들이 있을까요?

  • kafka
  • apache-spark
  • pyspark
  • data-lake
syjo 댓글 2 좋아요 0 조회수 65

ui for apache kafka 브라우저 접속했을때

미해결

Kafka & Spark 활용한 Realtime Datalake

브로커 탭에 브로커 아이디가 1번에 체크표시가 되어있는데 상관없나요? ppt에는 2번으로 설정하신거같은데 그대로 했는데 1번으로 지정되었습니다.

  • kafka
  • apache-spark
  • pyspark
  • data-lake
댓글 2 좋아요 0 조회수 114

각 application.java에서 빈 스캔할때 차이

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 Transactional Outbox 모듈 적용 부분을 듣던중에 차이가 발생해서 질문드립니다. 강의에서는 이제 각 나눠진 기능마다 XXXAplication 클래스에 EntityScan과 EnableJpaRRepositories 애노테이션을 달아주는것만으로도 다른패키지에있는 outboxEventPublisher를 사용할 수 있는데 저는 인식을 못합니다. application클래스에 @componentScan(...) 까지 달아주고나서야 비로서 인식이 되기 시작하는데 혹시 뭐가 문제고 무슨 차이가 있는걸까요 ... 찾아봤는데 잘 안보입니다 ㅠㅠ

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
한국의일론매식기 댓글 2 좋아요 0 조회수 136

섹션4 (좋아요)의 댓글 수 구현 강의에서 질문 있습니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 ! 좋은 강의 해주셔서 감사합니다. 섹션 4의 댓글 수 구현 강의 3분 39초 경에서 질문 있습니다 . 선생님의 코드에서는 댓글을 물리적 삭제할때만 댓글 수를 decrease를 통해 줄여주고 있는데, 논리적 삭제 시에도 count를 줄여주는 것이 맞다고 생각해서 질문글 남깁니다. 왜 물리적 삭제 시에만 댓글 수를 decrease 하시는 건가요 ?

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
댓글 1 좋아요 0 조회수 116

ArticleDeletedEventHandler

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

handle()에 조회 수, 좋아요 수, 댓글 수 캐시도 삭제해주어야 하는데 누락되어야 한다고 생각이 하는데 어떻게 생각하시는지 궁금합니다! 아니면 다른 의도가 있으셨을까요? 강의에서는 생성 시간 및 인기글 캐시만 삭제하고 있습니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
성장하자 댓글 2 좋아요 0 조회수 95

TransactionalEventListener 관련 문의드리고자 글 남깁니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요, 강사님 늘 강의 잘 듣고 있습니다, 감사합니다 ! 다름이 아니고, @Transactional과 @TransactionalEventListener 설정 관련해 궁금한 사항이 있어서 문의드리게 되었습니다. 강의내용은 @Transactional, @TransactionalEventListener가 전역적으로 선언되었고 outbox 관련 로직만 존재하기 때문에 괜찮지만 제 업무환경에서는 @TrasnactionalEventListener가 사용되면 프로젝트의 모든 @Transactional으로 관련된 내용이 바인딩되기 때문에 이를 scope 별로 구분하는 방법이 필요해보였는데요. 따로 알아보았지만, payload(강의에서는 OutboxEvent) 를 통해 분기처리하는 방법만 보이다보니 혹시 관련하여 TrasnactionalEventListener 어노테이션 필드 혹은 커스텀 어노테이션만으로 구분할 수 있는 방법이 있을까요 ? 문의드리는 가장 큰 이유는 outbox 로직이 필요없는 DB처리에도 TrasnactionalEventListener이 우선은 호출되고 payload를 통해 early return 시키려고 하다보니, 불필요한 리소스 사용을 방지하고 싶어서 문의드리게 되었습니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
자기개발하고싶어요 댓글 2 좋아요 0 조회수 146

오타 문의

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요! 우선 강의 너무 잘 듣고 있습니다! 강의 자료에서 좋아요 수 설계 부분에서 11:17 1:1 관계이지만, 테이블 비정규화의 필요성을 살펴본 것이다. 이 부분은 1:1 관계이므로 비정규화의 필요성이 있지만, 레코드 락으로 인한 자원 한계를 고려하여 '정규화'의 필요성을 살펴본 것 이 맞지 않나 싶습니다! 혹시 제가 잘못 이해한 부분이 있다면 알려주시면 감사하겠습니다!

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
감스트의웃음노예 댓글 1 좋아요 0 조회수 75

docker mariadb 실행

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

백업은 안하려고 한참 헤메다, 결국 백업으로 해결했네요..ㅎ.. 환경: window pc에 mariadb client 버전을 설치함 dump 생성 client 버전이기 떄문에, “ mariadb prompt ” 를 실행해서 아래의 명령어 실행 (cmd에서 mariadb, mysql 명령어 동작 안함) # 생성할 위치로 이동하시거나, 덤프 생성할때 경로 작성하시요. cd "어느 경로"/docker_file # 덤프 생성 mysqldump -u root -p --all-databases > all.sql Dockerfile 생성 # Docker Hub에서 공식 MariaDB 이미지 사용 FROM mariadb:latest # 초기화 시 자동 실행될 SQL 복사 COPY ./all.sql /docker-entrypoint-initdb.d/ # 포트 개방 EXPOSE 3306 이미지 생성 및 컨테이너 실행 docker build -t [당신의 게정은?]/mariadb:1.0 . docker run -d \\ -p 13306:3306 \\ --name mariadb \\ --network ecommerce-network \\ -e MARIADB_ROOT_PASSWORD=[당신의 root 비번]\\ kimjinwon1432/mariadb:1.0 =============== 추가 ============== 강사님께서 알려주신 방법으로 진행해봤어요. 일단, 제 pc의 mariadb 설치경로가 "C:\Program Files" 였기 때문에, mariadb폴더 내의 data 폴더와 그 하위 파일 및 디렉터리를 C: 밑에 우리가 사용하는 docker_file 폴더에 넣었습니다 * Program Files를 경로로 잡으시면 13에러 코드가 발생합니다. 이는 권한 관련 문제이므로 cli에서 사용하시는 계정에 대해서 mariadb 폴더 내부에 권한을 주셔도 소용이 없어요. * 이 과정은 이전에 설치한 mariadb 이미지가 있으면 삭제?하거나 이미지의 이름을 변경해서 진행하세요 .(전 삭제함) * 제 pc의 mariadb 의 버전이 11.4.2여서, docker에서 사용할 수 있는 가장 근접한 버전으로 진행했습니다. docker run -d -p 13306:3306 --network ecommerce-network \ -e MARIADB_ROOT_PASSWORD=[비번] \ --name mariadb -v "C:\study\SpringCloud\docker_files\data:/var/lib/mysql" \ mariadb:11.4.7 이렇게 하시면 docker exec -it ~~~ /bin/bash를 통해서 db에 접속 후 데이터베이스를 확인하면 로컬에서 작업했던 db의 데이터가 docker로 전해진 것을 확인 할 수 있어요.

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
김진원 댓글 2 좋아요 0 조회수 143

406 Not Acceptable에러 발생

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

현재 테스트 코드 작성하고 있는데 다음과 같이 에러 발생합니다. 코드 package board.article.api; import board.article.service.request.ArticleCreateRequest; import board.article.service.response.ArticleResponse; import lombok.AllArgsConstructor; import lombok.Getter; import org.junit.jupiter.api.Test; import org.springframework.web.client.RestClient; public class ArticleApiTest { RestClient restClient = RestClient.create("http://localhost:9000"); @Test void createTest() { ArticleResponse response = create(new ArticleCreateRequest( "hi", "my content", 1L, 1L )); System.out.println("response = " + response); } ArticleResponse create(ArticleCreateRequest request) { return restClient.post() .uri("/v1/articles") .body(request) .retrieve() .body(ArticleResponse.class); } @Getter @AllArgsConstructor static class ArticleCreateRequest { private String title; private String content; private Long writerId; private Long boardId; } @Getter @AllArgsConstructor static class ArticleUpdateRequest { private String title; private String content; } } 에러 > Task :common:snowflake:compileJava UP-TO-DATE > Task :common:snowflake:processResources NO-SOURCE > Task :common:snowflake:classes UP-TO-DATE > Task :common:snowflake:jar UP-TO-DATE > Task :service:article:compileJava > Task :service:article:processResources UP-TO-DATE > Task :service:article:classes > Task :service:article:compileTestJava > Task :service:article:processTestResources NO-SOURCE > Task :service:article:testClasses org.springframework.web.client.HttpClientErrorException$NotAcceptable: 406 Not Acceptable: "{"timestamp":"2025-05-29T06:00:40.838+00:00","status":406,"error":"Not Acceptable","path":"/v1/articles"}" at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:118) at org.springframework.web.client.StatusHandler.lambda$defaultHandler$3(StatusHandler.java:86) at org.springframework.web.client.StatusHandler.handle(StatusHandler.java:146) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.applyStatusHandlers(DefaultRestClient.java:672) at org.springframework.web.client.DefaultRestClient.readWithMessageConverters(DefaultRestClient.java:195) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.readBody(DefaultRestClient.java:659) at org.springframework.web.client.DefaultRestClient$DefaultResponseSpec.body(DefaultRestClient.java:605) at board.article.api.ArticleApiTest.create(ArticleApiTest.java:26) at board.article.api.ArticleApiTest.createTest(ArticleApiTest.java:15) at java.base/java.lang.reflect.Method.invoke(Method.java:580) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) > Task :service:article:test ArticleApiTest > createTest() FAILED org.springframework.web.client.HttpClientErrorException$NotAcceptable at ArticleApiTest.java:26 1 test completed, 1 failed > Task :service:article:test FAILED FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':service:article:test'. > There were failing tests. See the report at: file:///C:/Users/zxc86/Desktop/study/springboot/board/service/article/build/reports/tests/test/index.html * Try: > Run with --scan to get full insights. BUILD FAILED in 4s 6 actionable tasks: 3 executed, 3 up-to-date gpt에서는 accept 설정이 없어서 그렇다는데 강사님 코드에는 없어서요 원인이 뭘까요?

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
Gwangseok Lee 댓글 2 좋아요 0 조회수 283

안녕하세요 선생님 게시글 목록 API-페이지 번호 구현 강의에서 질문 있습니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 선생님 좋은 강의 감사합니다. 저희 articleController에서 readAll 부분을 보면 @GetMapping("/v1/articles") public ArticlePageResponse findAll( @RequestParam("boardId") Long boardId, @RequestParam("page") Long page, @RequestParam("pageSize") Long pageSize ) { return articleService.readAll(boardId, page, pageSize); } 이런식으로 pageSize를 쿼리 파라미터로 넘겨주도록 설계가 되어 있는데, pageSize라는 파라미터는 값을 받아서 처리하는 것이 아니라, 서버에서 값을 정하고 항상 똑같은 pageSize를 써야하는 것 아닌가요 ?? 왜 pageSize를 인자로 받는지 이해가 잘가지 않습니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
김태우 댓글 2 좋아요 0 조회수 154

안녕하세요 ! 강의 잘 듣고 있습니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

안녕하세요 선생님 강의 잘 듣고 있습니다 . controller를 구현하실때 중복되는 부분을 전부 다 쓰신 이유가 따로 있으신가요 ? 예를 들어 ArticleController에서 @RequestMapping("/v1/articles") public class ArticleController{ ... } 이런식으로 RequestMapping 애노테이션을 붙여 중복을 줄일 수도 있는데 선생님은 전부 다 그냥 쓰셔서 어떤 의도가 있는 것인지가 궁금합니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
김태우 댓글 2 좋아요 0 조회수 91

수업 방식 질문

미해결

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)

맨 마지막 섹션 19는 그냥 차례대로 읽으면서 진행하면 되는건가요 ? 어떻게 학습을 해야 하는건가요 .. ;; 그리고 이번에 새롭게 강의 내셨던데 기존거랑 뭐가 다른건가요 ? 얼마전에 강의 산 사람은 어떻게 하나요 ?

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
돈벌고싶다 댓글 1 좋아요 0 조회수 179

페이지네이션 시 조회 과정 질문

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

현재 페이지네이션 기반 조회 시 조회 과정이 궁금해서 질문드립니다. secondary index에서 offset 위치까지 순차탐색 -> secondary index -> 클러스터링 인덱스에서 primary key 조회 -> 실제 데이터 조회 일단 위 과정이 맞는지 궁금합니다. 2 . 위 과정이 맞다면 이 과정에서 db에서 데이터 조회를 limit만큼 반복하는 것인지, 아니면 실제 db에서 데이터 조회는 한 번에 이루어지는 것인지 궁금합니다. 페이지 조회 말고 그냥 범위 조회일 시에는 한 번에 조회되서 값이 많아도 시간 차이가 많이 안나는지 궁금합니다. offset 없이 조회해보니 바로 조회되는 거 같긴합니다.

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
yso829612 댓글 2 좋아요 0 조회수 111

값이 안변해요

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. @Test void updateTest() { update(184717674569289728L); ArticleResponse response = read(184717674569289728L); System.out.println("response = " + response); } void update(Long articleId) { restClient.put() .uri("/v1/articles/{articleId}", articleId) .body(new ArticleUpdateRequest("hi 2", "my content 22")) .retrieve(); } @Getter @AllArgsConstructor static class ArticleCreateRequest { private String title; private String content; private Long writerId; private Long boardId; } @Getter @AllArgsConstructor @NoArgsConstructor static class ArticleUpdateRequest { private String title; private String content; } response = ArticleResponse(articleId=184717674569289728, title=hi, content=my content, boardId=1, writerId=1, createdAt=2025-05-25T02:22:06, modifiedAt=2025-05-25T02:22:06) 이렇게 값이 안변하는 이유가 있을까요? @PutMapping("/v1/articles/{articleId}") public ArticleResponse update(@PathVariable Long articleId, @RequestBody ArticleUpdateRequest request) { return articleService.update(articleId, request); }

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
kimoon Hong 댓글 2 좋아요 0 조회수 88

Event 클래스에 제네릭을 쓰신 이유가 궁금합니다.

해결됨

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

EventPayload 를 제네릭으로 하셨는데 단순히 다형성 이용해서 하는 거랑 차이가 뭘까요? package kuke.board.common.event; import kuke.board.common.dataserializer.DataSerializer; import lombok.Getter; @Getter public class Event<T extends EventPayload> { private Long eventId; private EventType type; private T payload; public static Event<EventPayload> of(Long eventId, EventType type, EventPayload payload) { Event<EventPayload> event = new Event<>(); event.eventId = eventId; event.type = type; event.payload = payload; return event; } public String toJson() { return DataSerializer.serialize(this); } public static Event<EventPayload> fromJson(String json) { EventRaw eventRaw = DataSerializer.deserialize(json, EventRaw.class); if (eventRaw == null) { return null; } Event<EventPayload> event = new Event<>(); event.eventId = eventRaw.getEventId(); event.type = EventType.from(eventRaw.getType()); event.payload = DataSerializer.deserialize(eventRaw.getPayload(), event.type.getPayloadClass()); return event; } @Getter private static class EventRaw { private Long eventId; private String type; private Object payload; } }

  • java
  • mysql
  • spring-boot
  • kafka
  • redis
minjun 댓글 2 좋아요 0 조회수 133

인기 태그

인프런 TOP Writers

주간 인기글