inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

WebFlux & Web MVC 혼용해서 사용했을 때 스레드에 대한 질문

미해결

장애를 허용하는 견고한 시스템 만들기

안녕하세요 강사님. 강의 잘 듣고 있습니다. 이번 시간에 강사님께서 Spring WebFlux와 Spring Web MVC를 혼용해서 사용하는 경우, 결국에는 Web MVC의 기본 스레드인 톰캣 스레드를 사용해서 스레드 고갈이 될 수 있다고 하셨습니다. 따라서 내부적으로는 WebFlux의 이벤트 루프 스레드가 아닌 톰캣 스레드를 사용해서 블로킹되는 현상이 발생한다로 해석하면 될까요? 저는 혼용할 경우, Mono/Flux 타입 응답에 한해서는 동시 요청 발생 시 이벤트 루프 스레드를 사용하여 IO 작업을 대기하지 않고 해당 스레드가 다른 일을 처리하러 가는 것으로 알고 있었습니다. 혹시 이러한 상황에서 어떤 스레드를 사용하는지 테스트 해볼만한 좋은 방식이 있을까요? 감사합니다.

  • spring-boot
  • kafka
  • resilience4j
  • data-consistency
  • transaction
딸기초콜릿 댓글 0 좋아요 0 조회수 4

댓글 삭제 로직에서 동시성 문제 발생 가능성

미해결

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

안녕하세요 쿠케님! 현재 구현되어 있는 댓글 삭제 로직을 보면 1. 댓글 조회 2-1. 자식 댓글이 존재하면 deleted=true 로 변경 2-2. 자식 댓글이 존재하지 않으면 댓글을 물리 삭제하고, 부모 댓글을 재귀적으로 삭제 이렇게 구현되어 있는데요. 동시성 문제가 발생할 수 있겠다는 생각이 들었습니다! T1 삭제 트랜잭션 T2 답글 트랜잭션 ──────────────────────────────────────────── SELECT 부모 SELECT 자식 → 없음 SELECT 부모 → ACTIVE INSERT 답글 COMMIT DELETE 부모 COMMIT (제가 잘 분석한게 맞나 모르겠네요 ㅎㅎ) 물론 이렇게 꼬일 확률은 낮지만, 이런 케이스에 대해서는 select for update를 거는 것이 좋을지, 아니면 fk를 추가하여 정합성을 보장해줘야 할지, 쿠케님 의견을 묻고 싶습니다.

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

재고 감소와 쿠폰 발급은 왜 서로 다른 방식으로 동시성을 제어하나요?

미해결

실습으로 배우는 선착순 이벤트 시스템

강사님 안녕하세요, 좋은 강의 여러번 반복해서 잘 듣고 있습니다. 재고 감소와 비교했을때 차이점이 궁금하여 문의드립니다. 안녕하세요 강사님 이전 재고 관리 강의와 차이에 대해 궁금합니다. 이전 질문을 참고하였으나 추가로 더 궁금한게 있어서 문의드립니다. 재고 감소와 쿠폰 발급의 차이점이 너무 헷갈려서 정리하고 있습니다. 두 경우 모두 한정된 수량을 여러 요청이 동시에 차지한다는 점에서는 비슷해 보입니다. 그렇다면 쿠폰도 이벤트 테이블에 잔여 수량을 100개나 300개로 설정하고, 재고처럼 수량을 차감한 뒤 사용자 쿠폰을 생성하는 방식으로 구현할 수 있지 않을까요? 강의에서는 쿠폰 발급의 정합성을 위해서 전체 로직에 락을 걸 필요가 없다고 하셨는데, 그러면 반대로 재고 감소 같은 경우도 마찬가지로 재고 감소의 정합성을 위해 전체로직에 락을 걸 필요 없이 다른 방법으로 하는게 더 나은 방법 아닌가요?? 비슷해 보이는 한정 수량 문제를 서로 다르게 푼 이유를 잘 모르겠습니다 ㅠㅠ

  • java
  • docker
  • spring-boot
  • kafka
  • redis
차니 댓글 1 좋아요 0 조회수 22

service-discovery 프로세스 가동 이유

미해결

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

안녕하세요 강사님 양질의 강의 제공해주셔서 감사합니다 api-gateway yml 파일에 micro-service url에 매핑된 host 정보를 기입하셨는데요 이러면 service-discovery 프로세스를 가동시키신 이유가 뭘까요? 제가 이해하기론 service-discovery는 dns정도로 이해하고 있습니다

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
hotalibi 댓글 1 좋아요 0 조회수 28

DLQ의 수동 커밋에 대해서 질문있습니다.

해결됨

핵심만 빠르게 끝내는 실전 카프카(kafka)

처리에 실패한 메시지를 DLQ로 재발행해서 별도로 재처리하는 구조를 설계한다면 굳이 수동 커밋을 유지하지 않고 enable.auto.commit=true 로 바꿔도 무방한지 궁금합니다!

  • spring-boot
  • kafka
  • msa
  • spring-kafka
이찬원 댓글 2 좋아요 0 조회수 54

JWT토큰 발급 시, subject 값을 다양하게 넣어서 여러 개의 토큰을 만드는 이유

해결됨

은행 서버 프로젝트 실습을 통해 배우는 코틀린 마스터 클래스

안녕하세요, 강사님 🙂 덕분에 코프링을 빠르게 배우고 있어 감사드립니다! 영상 8:20 경, JWT 설명 중 withSubject() 의 값으로 email 만 넣는다던가, name 만 넣어서 구현한다고 말씀주셨습니다. 고민을 해봤지만 여러 개의 Subject 를 만드는 이유가 궁금해서 질문드립니다. 상황 예시와 함께 답변해주시면 감사드립니다!!

  • kotlin
  • mysql
  • mongodb
  • kafka
  • redis
종혁 댓글 2 좋아요 0 조회수 49

ansible playbook 오류

미해결

Kafka & Spark 활용한 Realtime Datalake

안녕하세요, 현재 강의를 수강하고 있습니다. 섹션4의 Github action부분을 듣고 있는데, 코드를 따라하는 중에 오류가 발생했는데, 어떤게 잘못되었는지 잘모르겠어서 질문 올립니다. 일부는 정상 실행된거 같아서, 서버가 작동하지 않거나 그룹이 잘못설정되지는 않은거 같은데, ChatGPT로 물어보니 Ubuntu가 맞지 않다고 얘기하고 있어서, 정확하게 어떻게 해야 할지 모르겠어서, 질문 올립니다. Ubuntu를 변경해야 한다면 처음부터 다시 셋업을 진행해야 할까요?

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

테스트 코드 작성 시 DTO 새로 작성하는 이유가 궁금합니다.

미해결

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

테스트 작성 시, 소스파일에(src) 있는 DTO를 그대로 사용하지 않고, 복사해와서 새로 정의를 하시던데 그 이유가 뭔지 궁금합니다!

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

실습 환경 : 파이썬 3.10 관련 문의

미해결

Kafka & Spark 활용한 Realtime Datalake

안녕하세요 강사님 현재 저에게 딱 맞는 커리큘럼 강의를 론칭 해주셔서 감사합니다 기존에 파이썬 3.14버전을 사용 하고있는데 강의에서는 3.10을 설치하라 하셔서 혹시 aws 서비스중에 파이썬 3.10만 가능한 서비스가 존재 하는걸까요??

  • kafka
  • apache-spark
  • pyspark
  • data-lake
홍태경 댓글 2 좋아요 0 조회수 60

rabbitmq에 configservice 연결에 대해 질문있습니다.

미해결

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

안녕하세요 강사님 강의 잘 듣고 있습니다. 섹션 9에서 강의대로 docker에 rabbitmq를 올린 뒤 configservice를 실행했는데 오류가 발생합니다. org.springframework.amqp.rabbit.listener.BlockingQueueConsumer$DeclarationException: Failed to declare queue(s):[springCloudBus.anonymous.PswTKgDeT12hTiCFa33hLw] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:772) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.passiveDeclarations(BlockingQueueConsumer.java:649) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.start(BlockingQueueConsumer.java:636) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.initialize(SimpleMessageListenerContainer.java:1482) ~[spring-rabbit-3.2.5.jar:3.2.5] at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$ AsyncMessageProcessingConsumer.run (SimpleMessageListenerContainer.java:1322) ~[spring-rabbit-3.2.5.jar:3.2.5] at java.base/ java.lang.Thread.run (Thread.java:1447) ~[na:na] Caused by: java.io .IOException: null at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:140) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:136) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:158) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:1033) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.ChannelN.queueDeclarePassive(ChannelN.java:47) ~[amqp-client-5.25.0.jar:5.25.0] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:565) ~[na:na] at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:1201) ~[spring-rabbit-3.2.5.jar:3.2.5] at jdk.proxy2/jdk.proxy2.$Proxy140.queueDeclarePassive(Unknown Source) ~[na:na] at org.springframework.amqp.rabbit.listener.BlockingQueueConsumer.attemptPassiveDeclarations(BlockingQueueConsumer.java:750) ~[spring-rabbit-3.2.5.jar:3.2.5] ... 5 common frames omitted Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'springCloudBus.anonymous.PswTKgDeT12hTiCFa33hLw' in vhost '/', class-id=50, method-id=10) at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:66) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:36) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:552) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:316) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.exnWrappingRpc(AMQChannel.java:152) ~[amqp-client-5.25.0.jar:5.25.0] ... 12 common frames omitted Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; protocol method: #method<channel.close>(reply-code=404, reply-text=NOT_FOUND - no queue 'springCloudBus.anonymous.PswTKgDeT12hTiCFa33hLw' in vhost '/', class-id=50, method-id=10) at com.rabbitmq.client.impl.ChannelN.asyncShutdown(ChannelN.java:528) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.ChannelN.processAsync(ChannelN.java:349) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.handleCompleteInboundCommand(AMQChannel.java:193) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQChannel.handleFrame(AMQChannel.java:125) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQConnection.readFrame(AMQConnection.java:761) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQConnection.access$400(AMQConnection.java:48) ~[amqp-client-5.25.0.jar:5.25.0] at com.rabbitmq.client.impl.AMQConnection$ MainLoop.run (AMQConnection.java:688) ~[amqp-client-5.25.0.jar:5.25.0] ... 1 common frames omitted 깃허브의 프로젝트를 그대로 가져오고 어떻게 해도 해결이 안되네요ㅠㅠ 도움 부탁드립니다..

  • spring-boot
  • jpa
  • 아키텍처
  • spring-cloud
  • kafka
  • msa
  • rabbitmq
전윤미 댓글 1 좋아요 0 조회수 53

kafka 라이선스 오류 문제

미해결

Kafka & Spark 활용한 Realtime Datalake

kafka confluent를 내부망에서 설치하여 사용중입니다. 잘 돌아가다가 라이선스 오류가 발생합니다. oracle-source.json파일을 수정 후 카프카에 적용해서 curl -s http://localhost:포트번호/connectors/oracle-source-connector/status 를 쳤는데 라이선스 오류 메시지가 나옵니다. 어떻게 해결해야 할까요? ...."trace":"org.apache.kafka.connect.errorsConnectException: Error validating license\n\tat org.apache.kafka.connect.runtime.licensing.ConnectWorkerLicenseManager.registerOrValidateWorkerLicense....

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

Int 값들 null 처리

미해결

커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)

prisma generate로 생성했으면 qty, unit_price 같은 값들 number | null 이라 필터링을 한번 해줘야 될텐데 강사님 코드에는 그런 흔적이 없이 깔끔하게 처리되어 빌드가 잘되는거 같아보여요. 물론 사소한것이지만 라이브러리 버전차이인지 따로 처리해준게 있는건지 궁금합니다

  • docker
  • kafka
  • redis
  • nestjs
  • prisma
Ref 댓글 1 좋아요 0 조회수 34

db table 관련질문

미해결

커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)

createdAt이랑 updatedAt은 default(now()) 랑 @updatedAt 을 통해 prisma model에서 핸들링이 가능한데 사용하지않고 dto에서 직접 다루는 이유가 궁금합니다

  • docker
  • kafka
  • redis
  • nestjs
  • prisma
Ref 댓글 1 좋아요 0 조회수 36

현업에서 prisma relationMode는 사용안하나요?

미해결

커머스 서비스로 배우는 NestJS 실전 개발 (w. Prisma, Docker, Redis, Kafka)

relationMode="prisma"로 지정하면 ORM으로 조인하는 기능들 사용하면서 실제 DB에는 관계가 안걸리는걸로 알고 있는데 복잡한 조인이 아니면 저런식으로 사용해도 상관없지 않나 생각이 들어 강사님께서는 어떻게 생각하시는지 궁금해서 어쭤봅니다.

  • docker
  • kafka
  • redis
  • nestjs
  • prisma
Ref 댓글 1 좋아요 0 조회수 50

실무 내용 문의드려요

해결됨

카카오 면접관이 알려주며 가장 쉽게 배우는 Kafka

CDC 쉘 스크립트 설명 하시면서 실무에서는 사용하지 않는 방법이라고 하셨는데 보통 실무에서는 이런 쉘스크립트 대신에 어떤 방식으로 진행을 하나요?

  • java
  • spring
  • kotlin
  • spring-boot
  • kafka
김규혁 댓글 2 좋아요 0 조회수 50

Kafka Cluster 구성도 질문

미해결

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

6:27분 쯤 강의 내역에서 각 브로커가 파티션을 분사하는 과정에서 브로커 3에 topic3이 갑자기 생겼는데 그림에서 오타인 걸까요 ?

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

38강 클러스터에 컨트롤러 연결 질문

미해결

실전에서 바로 써먹는 Kafka 입문

마지막에 2,3번 컨트롤러를 따로 연결하는 이유가 궁금합니다. 강의에서 클러스터에 노드 3개를 연결하고 나서 브로커와 컨트롤러 모두 잘 있는지 sudo lsof -i:~~~ 로 확인까지 하셨는데 이까지는 브로커3개는 모두 다 클러스터에 연결되었고 2,3번 컨트롤러만 연결되지 않은건가요? 노드의 구성요소가 컨트롤러 + 브로커라고 하셔서 노드를 클러스터에 연결하면 자동으로 컨트롤러, 브로커 모두 연결될 줄 알았는데 브로커만 연결되는건가요?

  • kafka
  • EDA
  • msa
  • devops
  • infrastructure
gombo123 댓글 2 좋아요 0 조회수 75

repartition 전후 persist 용량 차이가 나는 이유가 궁금합니다

해결됨

Kafka & Spark 활용한 Realtime Datalake

안녕하세요! 강의 너무 잘듣고 있습니다. 강의 실습 중 Spark UI에서 repartition(6) 전후로 persist 용량이 다르게 보여서 질문드립니다. 13:10 쯤 repartition 이전에는 디스크 사용량이 약 247.5 MiB 로 보였는데, 14:47 쯤 repartition(6) 이후에는 Memory 401.5 MiB / Disk 43.1 MiB 로 표시되었습니다. 같은 dataframe에 대한 persist를 수행했는데 repartition 전후로 용량 차이가 나는 이유가 궁금합니다.

  • kafka
  • apache-spark
  • pyspark
  • data-lake
홍석주 댓글 1 좋아요 0 조회수 71

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

미해결

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

설명중에 @Version 필드를 낙관적 락에서 이용할 수 있어가지고~ 라고 하셧는데 실제 돌려보니 비관적락 2에도 DB 업데이트가 되었습니다. AI 에게 물어보니 @Version 어노테이션이 붙은 필드는 JPA 사용시 @Lock 어노테이션 사용여부 상관없이 업데이트가 된다고 합니다. 혹 다른 qna 에도 같은 내용이 있는지 확인은 모두 안해 보았습니다. ======================== 응, 같은 엔터티 row에 실제 UPDATE 가 나가면 @Version 필드는 증가한다고 보면 돼. 락 방식이 낙관적이든 비관적이든 핵심은 이거야. @Version private Long version; 이 필드가 있는 엔터티가 dirty checking으로 변경 감지 되고, flush/commit 때 UPDATE 대상이 되면 JPA/Hibernate가 version 값을 같이 갱신해. ========================

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

혹시 수업자료는 다운받을 수 있는 곳이 없나요?

미해결

핵심만 빠르게 끝내는 실전 카프카(kafka)

강의에서 설명해주시는 내용이 깔끔히 정리되어 있는거 같아, 자료로서 볼 수 있는 링크나 파일이 있을까요? github 소스 외에 설명해주시는 강의 자료도 있으면 이론 내용 복습 차원에서 좋을 것 같아 문의 드립니다.

  • spring-boot
  • kafka
  • msa
  • spring-kafka
wonjae6707 댓글 2 좋아요 1 조회수 94

인기 태그

인프런 TOP Writers

주간 인기글