묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결실전에서 바로 써먹는 Kafka 입문
email 발송 로직 관련
consumer 쪽에서 이메일 발송 로직 대신 Thread.sleep(3000) 을 써주셨는데요.이 말은, consumer 쓰레드 자체에서 이메일 보내는 로직을 실행한다고 가정해서 그런거라고 이해했습니다. 개인적으로 consumer 는 message 를 consume 만 하고, 실제 비즈니스 로직 (email send) 는 별개의 쓰레드로 async 하게 동작하는게 더 효율적이라고 생각이 되는데요. email 발송 로직을 별개의 쓰레드로 할 때와 현재처럼 consumer 쓰레드에서 할 때 차이점 및 주의해야할 점 (ex. offset 수동 커밋 등) 이 있을까요?
-
미해결실전에서 바로 써먹는 Kafka 입문
concurrency 설정 + 같은 groupId 내에 consumer 여러개
concurrency 관련하여 궁금한점이 있습니다. 하나의 topic (ex. email.send) 에 5개의 파티션이 있다고 가정. 같은 groupId 로 지정된 consumer 2 (A, B)개가 있고 각각 concurrency=3 으로 설정이 되어 있다고 가정 이런 경우, 같은 groupId 내의 컨슈머는 같은 partition 을 consume 할 수 없으니 1개의 thread 는 동작하지 않게 된다고 보면 될까요?A-1 thread ===> partition 1 A-2 thread ===> partition 2 A-3 thread ===> partition 3 B-1 thread ===> partition 4 B-2 thread ===> partition 5 B-3 thread (동작안함) ====> x추가로 실무에서는 일반적으로 concurrency 옵션을 사용하는지 궁금합니다.
-
미해결실전에서 바로 써먹는 Kafka 입문
concurrency 동작 안됨
하나의 consumer 에서 concurrency 옵션을 통해 멀티 쓰레드로 동작이 되는지 테스트를 해봤는데 강좌화면에서처럼 consumer 가 멀티스레드로 동작하지 않는것 같습니다. partition : 3개concurrency : 3partitional.class: org.apache.kafka.clients.producer.RoundRobinPartitional 로그 : 로그를 봐서는 roundrobin 으로 설정을 했음에도 하나의 partition 으로 메시지가 들어가는것 같습니다. 그리고, consumer 도 하나의 스레드로 message 를 consume 하는것으로 보입니다.2025-10-15T16:01:15.466+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-4","price":4000} 2025-10-15T16:01:17.473+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:17.474+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-8","price":8000} 2025-10-15T16:01:19.480+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:19.481+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-16","price":16000} 2025-10-15T16:01:21.485+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:21.486+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-15","price":15000} 2025-10-15T16:01:23.491+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:23.491+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-5","price":5000} 2025-10-15T16:01:25.494+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:25.495+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-18","price":18000} 2025-10-15T16:01:27.499+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:27.501+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-3","price":3000} 2025-10-15T16:01:29.510+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:29.510+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-9","price":9000} 2025-10-15T16:01:31.514+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:31.515+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-13","price":13000} 2025-10-15T16:01:33.522+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:33.522+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-1","price":1000} 2025-10-15T16:01:35.527+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:35.529+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-11","price":11000} 2025-10-15T16:01:37.532+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:37.532+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-19","price":19000} 2025-10-15T16:01:39.538+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:39.538+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-7","price":7000} 2025-10-15T16:01:41.539+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:41.539+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-6","price":6000} 2025-10-15T16:01:43.543+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:43.544+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-20","price":20000} 2025-10-15T16:01:45.554+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:45.555+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-10","price":10000} 2025-10-15T16:01:47.560+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:47.560+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-14","price":14000} 2025-10-15T16:01:49.566+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:49.566+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-17","price":17000} 2025-10-15T16:01:51.568+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:51.568+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-2","price":2000} 2025-10-15T16:01:53.575+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. 2025-10-15T16:01:53.577+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.OrderService : Received message {"name":"Product-12","price":12000} 2025-10-15T16:01:55.581+09:00 INFO 11736 --- [kafka-practice] [ntainer#0-2-C-1] c.w.kafkapractice.service.Refresher : Done processing order.. github 소스코드 : https://github.com/writer0713/kafka-practice/blob/4cee9e560b2459c4bcbb6b183f3791d70cddd3d1/src/main/kotlin/com/writer0713/kafkapractice/service/OrderService.kt#L34
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
vagrant up 사용 시 The SSH connection was unexpectedly closed by the remote end
[👍좋은 질문을 했을 때 좋은 답변이 돌아 옵니다]1. 실습 중 본인의 환경이 가이드와 다른 부분이 있었다면 말씀해주세요.실습의 내용 그대로 따라가고있습니다2. 해당 문제의 발생 빈도(재설치 여부)와 문제 해결을 위해 시도해본 케이스를 말씀해 주시면 원인 파악에 큰 도움이 됩니다.Virtualbox, Vagrant 다시 삭제 후 재설치 하여도 동일한 문제가 발생합니다3. 에러 메시지만 봐서는 저도 모르는 경우가 많아요. 그전에 했던 작업이 포함된 캡쳐 화면도 부탁 드려요.4. 영상 내용에 대한 질문 시 해당 시간을 같이 올려 주시면 답변을 드리는 시간이 더 빨라집니다. ssh로 접근은 가능하지만 현재 쿠버네티스가 깔려있지 않다고 나옵니다k get pods -A 이 명령어를 사용할 수 없어요5. 긴 로그는 제 메일로 보내주세요. (k8s.1pro@gmail.com)6. 카페 [강의 자료실]에도 많은 질문과 답변들이 있어요!
-
미해결대세는 쿠버네티스 (초급~중급편)
오타 확인을 하고 싶습니다
안녕하세요. 강사님강의내용에 덕분에 많은 도움을 얻고 있습니다. 질문1.강의수강중 오타가 아닌가 확인이 필요하여 질문드립니다. 강의 service-headless,endpoint, externalName 편의 9:40 쯤에 EndPoint내에 주소가 172.217.161.68(80) 으로 표현됐습니다. Github의 주소는 185.199.110.153(80) 으로 그림이 표현됐는데 둘을 일치시키도록 교안을 수정해야되는지 궁금합니다. 질문2.Pod Network는 20.96.0.0/12 으로 소개를 해주셨습니다. 실제 vagrant 소스에는 12가 아닌 16으로 되있고요.이 주소형식은 공인IP형식으로 보이는데 사설IP형식을 따르는 ServiceNetwork 10.96.0.0/12 와 달리 공인IP형식인 이유가 궁금합니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
젠킨스 배포 질문
안녕하세요 젠킨스 설정을 따라해 보면서 궁금한게 생겨서 질문 드립니다. git actions를 사용해서 cicd 환경을 만들어본 경험이 있는데요, 이때는 레포지토리에 커밋내용이 푸시되면 이를 감지해서 자동으로 빌드가 되게끔 워크플로우를 작성했던 기억이 있습니다. 젠킨스에도 이러한 기능이 있는지 궁금합니다.
-
미해결개발자라면 알아야 할 redis 기본
실무에서의 복잡한 쿼리 결과 캐싱 전략(크기, TTL 등) 관련 질문
강사님, 캐싱 관련해서 실무적인 관점의 질문이 있습니다.강의에서 String 타입의 value에 JSON 형식으로 데이터를 저장해서 캐싱 처리를 한다고 배웠는데, 실무에서 어느 범위까지 캐싱하는 게 적절한지 감을 잡고 싶습니다. 과거에 MyBatis의 동적 쿼리처럼 조건부 로직이 포함된 200줄짜리 복잡한 쿼리가 DB에서 파싱되는 시간 자체만으로도 성능 부하를 유발했던 경험이 있습니다.쿼리 자체를 수정하는 것이 베스트겠지만, 현실적으로 어려울 때가 있었습니다. 이런 '고치기 힘든 악성 쿼리'의 실행 자체를 회피하는 목적으로 Redis 캐싱을 적극적으로 사용하는 전략에 대해 궁금합니다. 실무에서는 이런 경우:1. 쿼리 결과 데이터가 어느 정도 크기(예: 수십 MB)까지 Redis에 캐싱을 허용하시나요?데이터가 너무 크면 오히려 Redis에 부담이 될 것 같아서요. 2. 만약 결과가 너무 크다면, 페이징 처리된 일부만 캐싱하시나요?아니면 보고서처럼 핵심 요약 데이터만 따로 캐싱하는 전략을 사용하시나요? 3. 특히 이런 복잡한 집계/통계 쿼리는 데이터 변경이 잦지 않은데,이런 경우 TTL은 보통 어느 정도로 설정하시는지 강사님의 경험이 궁금합니다.
-
미해결비전공자도 이해할 수 있는 AWS 중급/실전 (보안, 가용성편)
AWS 비용예측 질문
안녕하세요 재성님.덕분에 AWS 에 대해서 조금더 알게 되었습니다.감사합니다 AWS 로 인프라를 구성했을때비용을 어떻게 예측할 수 있을까요?청구서에서 보는거 말고 이정도 규모면 얼마정도의 비용이 발생할지 알 수 있는 방법이 있을까요? 감사합니다.
-
해결됨실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
60강 ProductDoument 코드 관련 질문 있습니다!
안녕하세요, 강사님!바쁘신 와중에 질문드려 죄송합니다...단순한 질문 같지만 ProductDocument 코드에 대해 궁금한 것이 있어 질문드립니다.Elasticsearch 관련 Document 코드에 @AllArgsConstructor나 @Data같은 롬복(lombok) 애노테이션을 사용해도 문제가 없을까요...?추가로 실제 실무에서 Document에 롬복을 사용하는지 강사님 코드대로 직접 생성자, getter & setter를 작성하는지 알고 싶습니다!
-
해결됨비전공자도 이해할 수 있는 MSA 입문/실전 (feat. Spring Boot)
카프카에서 발행한 이벤트를 처리중에 실패한 경우 보통 어떻게 처리하는지 궁금합니다
안녕하세요 강사님 카프카에서 컨슈머가 메시지를 읽은 후 처리 과정에서 실패했을 때 재처리 전략을 어떻게 잡으면 좋은지 궁금합니다.consume 이후 비즈니스 로직 실행중에 예외가 발생하여 실패한 경우OOM 등의 이유로 서버가 비정상적으로 종료되어 실패한 경우위의 두가지 상황에서 일반적으로 어떻게 처리하는지 궁금합니다.
-
미해결풀스택을 위한 도커와 최신 서버 기술(리눅스, nginx, AWS, HTTPS, 배포까지) [풀스택 Part3]
강의 외 개발자 진로 관련 질문입니다!
AI 개발에 맞춰 LLM의 기초라도 학습하는 것이 좋을까요?아니면 서버 운영과 자동화 같은 백엔드 역량을 더 깊게 다지는 게 좋을까요?현재 강의는 DevOps에 대해 설명하셨는데 LLMOps와 같은 기술은 어떻게 생각하시는지 궁금합니다.
-
미해결비전공자도 이해할 수 있는 리눅스 입문/실전
표준입출력
안녕하세요, 재성님.추석 기간 활용해서 좋은 강의 잘 듣고 있습니다!강의 중에 표준(입)출력을 다루는 섹션이 있는데, 제가 어렴풋이 알고 있는 내용과 살짝 차이가 있는 거 같아 질문 드립니다.강의에서 표준 (입)출력은 명령어의 출력 결과를 전달하는 '통로'라고 설명해주셨는데,저는 막연히 표준 입력은 키보드, 표준 출력은 모니터 정도로 알고 있었습니다.그래서 이 개념에 대해서 정확히 알고 싶은데, 혹시 표준 입출력을 OS에서 제공하는 입출력 담당 인터페이스라고 이해하면 좋을까요?관련 개념들이 혼재되어서 뭐라 한마디로 정리하기가 힘들어 질문 올립니다 ㅠㅠ 읽어주셔서 감사합니다!
-
해결됨개발자라면 알아야 할 redis 기본
레디스 서버 구성
안녕하세요 강사님 수업 잘 듣고 있습니다.강의 범위에서 조금 벗어난 것 같긴 하지만.. 레디스 서버 구성에 대해 궁금한 점이 있어서 질문 드립니다.강의에서는 여러 대의 웹서버에서 레디스 서버 한 대로 요청을 보내는 구성에 대해서 설명하시는데, 레디스 서버는 이중화/다중화를 고려하지 않는 건지 궁금해서요.웹서버가 수십 대로 구성되어 있더라도 레디스 서버는 보통 한 대로 운영하는 것인지 궁금합니다.
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
Error: UPGRADE FAILED: client rate limiter Wait returned an error: context deadline exceeded
ArgoCD 아키텍처, Argo Apps 설치 및 배포 해보기에서 다음 에러가 발생한다면 Error: UPGRADE FAILED: client rate limiter Wait returned an error: context deadline exceeded 헬름 설치시 타임아웃 10분 때문에 나는 에러입니다. (정확히는 자원이 부족해서 오래 걸릴뿐입니다.)계속 실행하다보면 설치가 완료됩니다. [저처럼 헤매시는 분이 없기를..]
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
containerd 관련하여
안녕하세요.containerd의 경우 2016년 이후 등장한 것으로 알고 있습니다.그 이전 docker 버전으로 생성 된 이미지의 경우containerd와 호환이 되지 않을 것 같다는 생각이 들어 문의드립니다. 추가로 8분 50초 부근 지점에서runc가 기존 libcontainer와 다른 점에 대한 설명이 이어지는데, runc 적용 이후에도 runc -> libcontainer 순으로 커널 호출을 위해 libcontainer는 지속적으로 사용되고 있는 것으로 알고 있으나 설명이나 그림상으로 libcontainer가 runc 적용 시점부터 미사용 되는 것처럼 보여져 어떤 것이 맞는지 문의드리고자 합니다.
-
미해결비전공자도 이해할 수 있는 MSA 입문/실전 (feat. Spring Boot)
가용성에대한 질의..
안녕하세요 선생님.미션 주신거 이행하면서 궁금해서 질문드려요.다른강의에서 가용성(Availability), 시스템 이중에 대해서 설명해주셨는데..MSA에서 가용성? 시스템 이중을 적용하면..일반 사용자가 서버 끊김을 못느끼게해야하는데..기존의 도커나 쿠버네티스를 2중으로 설정해줘야하는게 맞는지 궁금합니다.예를들어서 강의에서 섷명해주신게이트웨이,사용자서비스,게시판서비스,포인트 서비스가 있다고 할경우..게이트웨이 2개 사용자서비스2개 게시판 서비스2개 포인트 서비스 2개로 해야하는것일까요?
-
미해결비전공자도 이해할 수 있는 MSA 입문/실전 (feat. Spring Boot)
궁금한게있어요..
강의는 gateway로 끝으로해서 끝나느데..에우레카에대한 강의는 없나요?또.. 게이트웨이 설정할때..application.yml에서..localhost:8080/8081/8082 이렇게 하셨는데..실제 서비스할때도 그렇게 적용해야하는것일지 궁금합니다.
-
미해결실전에서 바로 써먹는 Kafka 입문
컨슈머 서버 점진적 배포 시나리오
컨슈머 서버가 3대 떠있을때 점진적 배포를 어떤식으로 진행하시나요? 기존 서버군을 죽이면 리밸런싱 되겠지만, 신규 배포에 문제가 생겼다고 판단될때 즉각적인 롤백이 안될것 같은데요. 어떤식으로 하시나요?
-
미해결비전공자도 이해할 수 있는 AWS 중급/실전 (보안, 가용성편)
최종 미션 아키텍처 적용 후에 CI/CD 문제 질문 드립니다
퍼블릭 서브넷: Bastion host (외부 접속용)프라이빗 서브넷: 실제 EC2 애플리케이션 서버목표: GitHub Actions + Docker를 사용해 프라이빗 EC2에 배포제가 찾은 방법은 첫번째로GitHub Actions에서 Bastion host로 먼저 SSH 접속 Bastion에서 프라이빗 EC2로 SSH 중계내부 EC2에서 Docker pull & deploy방식인데요 이 방식으로 하려면 bastion host 보안 그룹 인바운드 규칙을 모든 IP 허용을 해야해서 이게 맞나 싶습니다.그리고 다른 방법은 github self-hosted runner를 쓰는 건데요. 아직 잘 모르는 영역이라 해보기 전에 질문 올립니다.제가 말한 방법 이외에 또 다른 방법이 있는지 궁금하기도 해서 도와주시면 감사하겟습니다
-
미해결쿠버네티스 어나더 클래스-Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)
섹션5 21강 Loki 설치 진행중인데
똑같이 진행했는데 username 과 password를 입력하라고나오는데...원래 이렇게나오는걸까요? 아니면 따로 진행해줘야하는 부분이있을까요?