묻고 답해요
167만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문
안녕하세요, 무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점을 설명한 부분에 질문이 있습니다. 페이지 방식을 무한 스크롤 방식에 적용 시 문제점으로 아래 2가지를 제시하셨는데요,1) 페이지가 추가된 경우, 데이터 중복 조회 문제2) 페이지가 삭제된 경우, 데이터 누락 문제 궁금한 점은, 이러한 문제는 무한 스크롤에서 사용했을 때 뿐 아니라, 페이지 번호 방식을 사용할 때도 마찬가지로 문제가 있는 것 아닌가 싶다는 것입니다.페이지 번호 방식 자체의 한계라고 생각하는데, 페이지 번호 방식에서는 발생하지 않는 문제인가요?
-
미해결비전공자도 이해할 수 있는 MSA 입문/실전 (feat. Spring Boot)
보상 트랜잭션을 위한 catch 문 안에서 에러가 발생한다면 어떻게 되는 건가요?
만약 에러가 나서 보상 트랜잭션이 발생했는데 거기서 또 에러가 난다면 따로 모니터링 시스템 같은 걸 구축해서 추후에 수동으로 롤백을 시켜주어야하는 방식일까요? (동기식 일때 입니다!)
-
미해결Kafka & Spark 활용한 Realtime Datalake
code deploy 배포에러
안녕하세요 code deploy 배포에서 에러가 발생하여 문의 올리게 되엇습니다. s3 bucket 까지 tar.gz 파일 잘 업로드 되었습니다만 code deploy에서 아래 before install 에서 에러가 계속해서 발생하고 있는 상황입니다. 이전에 에러나신분 글읽어보니 ec2 인스턴스에서 logs파일을 보라고 하셨는데 저의 경우에는 로그파일이 생성이 되지 않는것 같습니다.
-
미해결실전에서 바로 써먹는 Kafka 입문
질문드립니다.
22강 [실습] Spring Boot로 Kafka에서 메시지 조회하기(Consumer)를 실습하고 있었습니다.강사님이 제공한 방식과 다르게 해보고 싶어서 이전 강의에서 Producer를 구현한 프로젝트에 Consumer를 추가적으로 구현하였습니다. yml 설정 추가와 consumer 클래스를 추가하엿는데, 프로젝트 기동 시 Consumerr가 초기화가 되지 않고 있습니다. 강의대로 consumer를 프로젝트 분리하여 실행하면, 강의와 동일하게 정상동작하는데, 왜 1개의 프로젝트에선 정상동작하지않는 것인지 궁금합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
path 쿼리 관련 질문드립니다!
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요!20:15 경 작성해주신 findByPath 의 함수에서article_id 의 경우 함께 조회할 필요가 없나요?이전에 생성했던 unique index 구조를 생각해보면 article_id 와 path 2개로 복합 인덱스를 생성하였기 때문에 게시글마다 path 에 대한 unique 함을 보장하는 것이기 때문에 조회 시에 findByArticleIdAndPath 과 같은 식으로 해야 할 것 같은데, 제가 잘못 이해한 부분이 있는지 궁금합니다!
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
antigravity 에디터를 쓰신다면 종료해주세요
해당 에디터 사용시, 크롬 브라우저 원격 지원을 위해 9092포트를 점유하고 있어 kafka가 사용하는 9092포트와 충돌이 발생합니다. 만약 이용중인라면 다른 IDE를 사용하시는게 좋을것 같습니다.
-
미해결15일간의 빅데이터 파일럿 프로젝트
수강 기간 연장 부탁드립니다ㅠ
안녕하세요! 강의 구매후 실력이 되지않아 엄두를 못내다가 수강기간 만료가 도래했어요ㅠㅠ 새로 맡은 프로젝트에 꼭 필요한 내용이라 공부를 시작해야하는데 며칠 남지를 않아 버렸네요. 강사님 죄송하지만 최대한 연장 부탁드려도 될까요? 열심히 공부하겠습니다!!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의 자료 업데이트
섹션12부터는 아직 update가 안된거죠?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
부하분산 강의 섹션
Spring Cloud Gateway + Eureka 연동 강의에서 '부하분산'에 대한 내용은 바로 다음에 다룬다고 하는데 해당 강의가 섹션 4에는 안보여서요.. 더 뒤 섹션에 나오는걸까요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
프로젝트 구조
현재 강의에서 예시로 보여주신 프로젝트 구조가 현업에서도 주로 사용하는 구조일까요?? 현재 멀티모듈 구조가 아닌 별도 repository 구조에서 업무를 진행하고 있어서 궁금하네요.현업에선 다른 구조를 사용한다면 예시도 말씀해주시면 감사할것 같습니다.
-
미해결실전에서 바로 써먹는 Kafka 입문
잘못된 이메일 주소로 인해 발송 실패 코드
POSTMAN에to: fail@naver.com 으로 변경하여 send할 시총 5번 재시도 후 강사님 처럼 멈추지 않고 아래 에러가 무한 반복이 됩니다. 2026-01-04T20:45:42.814+09:00 ERROR 20160 --- [ner#0.dlt-0-C-1] k.r.DeadLetterPublishingRecovererFactory : Record: topic = email.send.dlt, partition = 0, offset = 2, main topic = email.send threw an error at topic email.send.dlt and won't be retried. Sending to DLT with name email.send.dlt.org.springframework.kafka.listener.ListenerExecutionFailedException: Listener failed at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.decorateException(KafkaMessageListenerContainer.java:3011) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:2911) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeOnMessage(KafkaMessageListenerContainer.java:2877) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeRecordListener(KafkaMessageListenerContainer.java:2787) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeWithRecords(KafkaMessageListenerContainer.java:2629) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeRecordListener(KafkaMessageListenerContainer.java:2523) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeListener(KafkaMessageListenerContainer.java:2161) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.invokeIfHaveRecords(KafkaMessageListenerContainer.java:1538) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.pollAndInvoke(KafkaMessageListenerContainer.java:1476) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.run(KafkaMessageListenerContainer.java:1345) ~[spring-kafka-4.0.1.jar:4.0.1] at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1804) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]Caused by: org.springframework.kafka.listener.TimestampedException: Exception thrown at 2026-01-04T11:45:42.814281400Z at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.onMessage(KafkaBackoffAwareMessageListenerAdapter.java:100) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.onMessage(KafkaBackoffAwareMessageListenerAdapter.java:49) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.doInvokeOnMessage(KafkaMessageListenerContainer.java:2898) ~[spring-kafka-4.0.1.jar:4.0.1] ... 10 common frames omittedCaused by: org.springframework.kafka.listener.ListenerExecutionFailedException: invokeHandler Failed at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.checkAckArg(MessagingMessageListenerAdapter.java:519) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:496) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.MessagingMessageListenerAdapter.invoke(MessagingMessageListenerAdapter.java:425) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:92) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.RecordMessagingMessageListenerAdapter.onMessage(RecordMessagingMessageListenerAdapter.java:52) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.invokeDelegateOnMessage(KafkaBackoffAwareMessageListenerAdapter.java:106) ~[spring-kafka-4.0.1.jar:4.0.1] at org.springframework.kafka.listener.adapter.KafkaBackoffAwareMessageListenerAdapter.onMessage(KafkaBackoffAwareMessageListenerAdapter.java:97) ~[spring-kafka-4.0.1.jar:4.0.1] ... 12 common frames omittedCaused by: java.lang.IllegalStateException: No Acknowledgment available as an argument, the listener container must have a MANUAL AckMode to populate the Acknowledgment. ... 19 common frames omitted위
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료는 어디에서?
강의자료 pdf는 어디에서 볼 수 있을까요???
-
해결됨커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)
FK 현업에서 실제 사용안하시나요
현업에서 실제로 개발하실때도 FK 를 넣지 않으시나요? 데이터 정합성과 ORM 이용의 편리함 등을 위해 FK 를 맺는게 맞지 않나해서 여쭤보게 되었습니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
ApplyService와 Consumer서비스의 db공유?
안녕하세요 강의 잘 듣고 있습니다.ApplyService와 Consumer서비스의 db관련 질문을 하려 합니다.9:30분쯤부터 ApplyService와 컨슈머서비스를 분리해서 테스트를 진행하는데 AppliServiceTest를 보면 자신의 CouponRepository에서 count개수가 100개인지 체크하는것 같습니다. 저는 쿠폰생성 및 저장 로직을 전부 컨슈머서비스로 옮겨서 여기서 쿠폰테이블을 관리한다고 생각했는데 어떻게 ApplyService가 자신이 이전에 사용하던 CouponRepository에서 count 체크가 가능한건지 궁금합니다. 혹시 두 서비스가 하나의 db를 공유하는건가요?
-
미해결카프카 완벽 가이드 - 코어편
카프카 토픽 Key 타입 변경에 관한 질문
안녕하세요~ 카프카 실습 중 Key 를 String → Integer 로 변경할경우, console consumer 에서도 key deserializer 를 IntegerDeserializer 로 변경해야하면서 든 궁금증 질문드립니다 kafka consumer key deserializer 를 custom 설정하고 offset 을 --from-beginning 을 하면 오류가 발생하는데, 아마 Key Type 이 String, Integer 가 있어서 Deserialize 를 하다가 Exception 이 나는 것 같은데, deserializer 를 직접 설정안해주면 오류는 안나더라구용. (기본적으로 String key 만 보여주는 것 같은..)그래서 config 를 찾아보니까 console consumer 는 기본적으로 String Deserializer 로 설정해주는 것인가요?명령어 : kafka-console-consumer --bootstrap-server localhost:9092 --topic comp-topic --property print.partition=true --property print.key=true --property print.value=true --property print.timestamp=true --from-beginningKey 타입을 변경하는 일이 실무에서 흔한 편인가요? Key 라는 것이 보통 식별/고정인데 변경이 필요하면 Topic 을 새로 만들어서 진행는건지 궁금합니다
-
미해결Kafka & Spark 활용한 Realtime Datalake
/homework/ch10_3/dataframe_cache.py 과제 질문
안녕하세요.과제 도중 질문이 있어 질문 남깁니다.우선 아래에 제가 작성한 코드 남기겠습니다!from pyspark.sql import SparkSession from pyspark.sql.functions import col import time spark = SparkSession.builder.appName("dataframe_cache").getOrCreate() # 회사별 산업도메인 CSV READ com_ind_path = 'hdfs://home/spark/sample/linkedin_jobs/company_industries.csv' com_ind_schema= 'company_id STRING, industry STRING' ind_df = spark.read.option("header", "true").option("multiline", "true").schema(com_ind_schema).csv(com_ind_path) # 회사별 종업원 수 CSV READ com_count_path = 'hdfs://home/spark/sample/linkedin_jobs/employee_counts.csv' com_count_schema = 'company_id STRING, employee_count INT, follower_count INT, time_recorded INT' count_df = spark.read.option("header", "true").option("multiline", "true").schema(com_count_schema).csv(com_count_path) # company_id 컬럼으로 중복 제거 후 진행 # drop_duplicate : transform 함수 company_count_df = count_df.dropDuplicates(['company_id']) # 캐시 저장 ind_df.persist() company_count_df.persist() # count : action 함수 print(ind_df.count()) print(company_count_df.count()) # filter : transform 함수 # it_df : 산업도메인이 IT Service and IT Consulting인 회사 # big_df : 직원 수가 1000명 이상인 회사 it_df = ind_df.filter(col('industry') == 'IT Services and IT Consulting') big_df = company_count_df.filter(col('employee_count') >= 1000) # join : transform 함수 it_big_df = it_df.join(big_df,'company_id','inner') # 결과 출력 it_big_df.select(['company_id','employee_count']).sort('employee_count',ascending=False).show() # 5분 대기 time.sleep(300)저는 join 작업시 중복을 제거한 직원수 dataframe이 사용되기 때문에 dropDuplicates() 메서드를 적용한 뒤 persist()를 하여 캐시에 저장하였습니다.그런데 강사님의 깃허브 코드를 확인하니, 중복을 제거한 dataframe에 persist()를 적용하지 않아서 제가 잘못 생각하고 있는 부분이 있는지 궁금합니다.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
article_like_count api test
동시성 이슈가 안터질 수도 있나요?
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.
안녕하세요, 강사님덕분에 많은 인사이트를 얻으며 성장중인 수강생입니다ㅎㅎ 다름이 아니라 이벤트 페이로드 타입의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다! 빌더 패턴의 장점은 생성자 오버로딩이 많을 때, 간편하게 사용할 수 있다는 장점이 있지만 필수인 필드에 null 이 들어갈 수 있다는 단점이 있다고 생각합니다.그래서, 저는 빌더 패턴을 해당 객체의 필드 중 null 이 들어갈 수 있는 필드가 많을 때 사용하는 걸 선호하다 보니, 이벤트 페이로드 타입을 생성 할 때 일부 필드에 null 이 들어가는 걸까? 란 궁금증으로 질문이 생기게 되었습니다.빌더 패턴에 대한 강사님의 의견이 궁금하며 이벤트에 기존에 사용하신 팩토리 메서드 대신 빌더 패턴을 사용하신 계기가 궁금합니다!감사합니다 :)
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. [33. 좋아요 수 구현] 에서 테스트 하는 화면에서요.해당 방법대로 실행을 하면 동시성 문제가 발생합니다.Record has changed since last read in table 'article_like_count'저는 MariaDB를 사용하고 있는데요. MySQL도 마찬가지로 기본 잠금 수준이 Repeatable Read 라고 알고 있습니다.해당 기본 수준으로 실행하면 동시성 문제로 영상과 다른 결과를 보이게 됩니다.따라서 잠금 수준을 Read Commited 나 Read Uncommited 로 변경하면 제대로 실행이 됩니다.이렇게 하는 것이 정답인지 아니면 다른 원인이 있는건지 알려주세요.
-
해결됨스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판
findByPath에서 articleId로도 검색을 해야 할 것 같아요.
학습 관련 질문을 최대한 상세히 남겨주세요!고민 과정도 같이 나열해주셔도 좋습니다.먼저 유사한 질문이 있었는지 검색해보세요.인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.@Query("select c from CommentV2 c where c.commentPath.path = :path") Optional<CommentV2> findByPath(@Param("path") String path);위와 같은 방식으로 조회를 하면 인덱스 서치가 되지 않는 것 아닌가요?아래와 같은 방법으로 해야 할 것 같은데..@Query("select c from CommentV2 c where c.articleId = :articleId and c.commentPath.path = :path") Optional<CommentV2> findByPath( @Param("articleId") Long articleId, @Param("path") String path);답변 부탁 드립니다.