묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결초보자도 딱 10일만에 쿠버네티스 감 잡기
라이브 채팅 오류
안녕하세요!! 챌린지 참여하고 있는 수강생입니다! 오늘 라이브도 넘 유익했습니다! 제가 퇴근이 늦어져서 모바일로 참여했는데 이게 플랫폼 문제인지 채팅이 잘 전송이 안되더라구요ㅠㅠ (다른 참여하신 분들도 비슷한 문제를 겪고 채팅이 잘 안되지 않았을까 싶어요!) 라이브때 꼭 여쭤보고 싶은 질문이 있었는데 여기에 남겨봅니다 ㅎㅎ- 10일간의 챌린지 과정 이후에 어떤식으로 쿠버네티스 관련 학습을 이어나가면 좋을까요?- 현재 실무에서 AWS ECS 기반으로 컨테이너를 배포 및 관리하고 있는데 아직은 기초 부분만 배워서 그런걸 수 있지만 아직 가진 비슷한 기능 위주더라구요! 어느점이 가장 차이가 크고 (EKS 등의 쿠버네티스 기반과 비교해서) 그리고 어느 시점에 EKS로 마이그레이션이 필요해지는 시점이라고 생각하시는지 궁금합니다 :)
-
미해결실전에서 바로 써먹는 Kafka 입문
Kafka 음성메세지 브로커로도 적합한가요?
회사에서 realtime 음성 인식기 구현할 일이 생겼는데, 음성의 청크 단위 큐를 어떤식으로 관리하는지 찾아보다가 kafka 를 알게되어서요. 10~50명 정도의 동시접속자라고 한다면 어떤방식을 사용해야하는지 궁금합니다.
-
해결됨비전공자도 이해할 수 있는 CI/CD 입문·실전
섹션 4, 5와 6, 7은 유사한가요?
현재 스프링부트 프로젝트의 인프라와 CI/CD를 공부하고 있습니다섹션 4, 5와 6, 7이 프레임워크 (스프링부트 / Nest.js)의 차이만 있는것으로 보이는데6, 7 섹션을 우선 넘어가도 괜찮은지 궁금합니다
-
미해결비전공자도 이해할 수 있는 쿠버네티스 입문/실전
이미지가 없다고 에러가 계속 떠요
apiVersion: v1 kind: Pod metadata: name: spring-pod spec: containers: - name: spring-container image: spring-server ports: - containerPort: 8080 imagePullPolicy: IfNotPresentspring-pod.yaml파일을 작성을 한뒤 kubectl delete pod spring-pod 명령어로 pod를 삭제하고kubectl apply -f spring-pod.yaml 명령어를 입력했는데 계속 사진처럼 ErrImagePull이 됩니다.이미지를 pull로 당겨오지 못해서 발생하는 오류인것 같은데 이미지는 있는것으로 확인 됩니다. 뭐가 문제인걸까요?
-
미해결비전공자도 이해할 수 있는 Nginx 입문/실전
Nginx의 성능을 알고 싶으면 리눅스 위에서 실행 시켜야 하잖아요..
안녕하세요.제가 집에서 Nginx 성능 테스트를 진행해보았습니다.먼저,Windows 환경(로컬 컴퓨터) 에서 직접 Nginx를 설치 후 실행했고,WSL2 환경(리눅스 커널 기반) 위에서도 Nginx를 설치해 실행해보았습니다.그런데 ChatGPT에 문의해보니,Nginx의 sendfile()을 통한 커널 레벨 zero-copy 최적화를 제대로 체감하려면Windows가 아닌 리눅스 환경에서 실행해야 한다고 하더군요.Windows 커널에서는 해당 기능을 완전히 지원하지 않는다고 합니다.또한,WSL2 위에서 Nginx를 실행하고 Windows 브라우저로 접속할 경우,WSL2(리눅스 커널)와 Windows(호스트 OS) 간 통신 과정에서지연이 발생할 수 있다는 설명도 들었습니다. 그래서 “그럼 도커를 쓰면 되나?” 싶어서예전에 구매했던 강사님의 Docker 강의를 참고하려고 했습니다.마침 강의 내용 중 Nginx 설치 및 설정 실습 파트가 있어서 그대로 따라보려 했는데요,ChatGPT의 설명에 따르면 Docker도 결국 WSL2 위에서 동작한다고 합니다.즉, WSL2에서 직접 실행하는 것보다는 최적화되어 있지만,Windows 브라우저에서 요청을 보낼 때는 여전히 변환 과정이 존재해서원하는 수준의 “커널 레벨 I/O 성능 비교”를 얻기는 어렵다는 답변을 받았습니다.제가 확인하고 싶은 부분은 단순히Tomcat과 Nginx 간의 정적 콘텐츠 처리 성능 차이입니다.(참고로, Nginx는 이벤트 드리븐 I/O 모델(epoll 등)을 기반으로 동작하며,리눅스에서는 sendfile() 시스템 콜을 통해커널 수준에서 파일을 소켓으로 직접 전송하는 zero-copy 최적화를 지원한다고 합니다.이 기능은 리눅스 커널에서 가장 효율적으로 동작하며,Windows 환경에서는 동일한 수준의 최적화가 적용되지 않는다고 합니다.ChatGPT를 통해 얻은 정보이며, 이 부분을 실제로 테스트해보고 싶었습니다.)그래서 궁금한 점이 있습니다. 👉이러한 sendfile() 기반 zero-copy 최적화를 직접 체감하려면,강사님께서 강의에서 보여주신 것처럼 AWS 리눅스 서버(EC2) 위에서Nginx를 띄워 테스트하는 것이 가장 정확한 방법일까요?즉, Windows나 WSL2 환경이 아닌,AWS 리눅스 환경에서 Nginx를 실행해야만 커널 수준 I/O 성능을 정확히 확인할 수 있는지 궁금합니다 ㅠㅠㅠㅠ Nginx에 대해 공부해보고 싶은데 환경 세팅부터 막히니까 조금 답답합니다.. ㅠㅠ ㅠㅠ ㅠㅠ
-
미해결실전에서 바로 써먹는 Kafka 입문
재시도조차 실패한 메시지 사후 처리하기
재시도조차 실패한 메시지들은 dlt 로 이동하게 되고 이 메시지들에 대한 처리를 위해 @KafkaListner 를 사용해서 처리하는 방법을 보여주셨는데요. 리서치를 하다보니 @DltHandler 기능이 있는걸 알게됐습니다. dlt 를 처리한다는 부분에서 @DltHandler 가 좀 더 어울릴거 같은 느낌인데 @KafkaListener 로 처리하신 특별한 이유가 있으실까요?
-
미해결실전에서 바로 써먹는 Kafka 입문
retry 시 동작과정 질문
kafka @RetryableTopic 에 대해 알아보다보니 궁금한점이 생겨 질문 드립니다. @RetryableTopic 가 없어도 retry 는 기본적으로 진행하는거 같은데요. 제가 알아본 바로는 아래와 같은 차이점이 있는것 같았습니다. @RetryableTopic 을 사용하지 않으면 'dlt' 로 메시지가 이동되지 않는다.@RetryableTopic 을 사용하면 'dlt' 토픽이 없는 경우 자동으로 만들어주고 dlt 토픽으로 메시지를 이동시켜준다.@RetryableTopic 을 사용하지 않으면 재시도는 하지만 재시도동안에는 partition 을 blocking 한다 (= 블로킹).@RetryableTopic 을 사용하면 재시도 하기전에 retry 토픽으로 이동시키고 consumer 의 스레드를 blocking 하지 않고 별도 스레드에서 retry 를 진행한다. (= 논블로킹)강좌에서는 retry 중에는 partition 이 blocking 된다고 하셨는데, 그 부분과 좀 다른거 같아서 문의 드립니다..! 만약 @RetryableTopic 이 논블로킹으로 별도 스레드에서 진행이 된다면 순서보장이 안되는거라서 순서보장이 필요하다면 이걸 사용하면 안되는게 아닌가 싶습니다.
-
미해결실전에서 바로 써먹는 Kafka 입문
JsonSerializer & JsonDeserializer
예제에서는 StringSerializer 와 StringDeserializer 를 사용하도록 설정하고 ObjectMapper 를 통해 직렬화/역직렬화를 해주셨는데요. 혹시 JsonSerializer 와 JsonDeserializer 를 사용하지 않는 이유가 있을까요? 그리고, JsonDeserializer 를 사용하든 StringDeserializer 를 사용하든 역직렬화를 할 때 실패하게 되면 offset commit 이 되지 않고 재시도를 하는동안 해당 message 의 partition 은 blocking 된다고 이해하고 있는데 맞을까요? 이 경우에도 retry 이후, 해결 안되면 dlt topic 으로 이동하는게 맞을까요?
-
미해결실전에서 바로 써먹는 Kafka 입문
auto.create.topics.enable=false 설정
리서치를 하다보니 실무에서는 auto.create.topics.enable=false 설정을 사용하는게 좋다는 글을 많이 보게 되었습니다. 네이밍 컨벤션이나 예상치 못한 topic 의 생성 등을 방지하기 위함으로 이해했는데요. 그럼, xxx.dlt 와 같은 topic 들도 직접 생성을 해줘야 하는지 궁금합니다. 그리고, 실제로 실무에서 해당 설정을 많이 사용하는지 또한 궁금합니다 🙂
-
미해결실전에서 바로 써먹는 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
-
해결됨실무에서 꼭 필요한 서버 모니터링(Zabbix)
강의 소리가 너무 작아요.
강의 목소리가 너무 작아서 집중을 할 수가 없네요.무슨 말을 하는지 하나도 모르겠어요.
-
미해결대규모 트래픽 처리를 위한 부하테스트 입문/실전
부하 테스트 환경 구성에 대한 질문
부하 테스트를 스테이징 환경에서 진행하려고 합니다. 이때 정확하고 신뢰도 높은 결과를 얻기 위해서는 EC2, DB 스펙 등의 인프라와 데이터 규모까지 운영 환경과 완전히 동일한 조건에서 테스트해야만 하는지 궁금합니다. 만약 현실적인 비용 문제로 환경을 100% 동일하게 구성하기 어렵다면, 어느 수준까지 환경을 맞춰야 유의미한 데이터를 얻을 수 있을지 질문드립니다.
-
해결됨비전공자도 이해할 수 있는 쿠버네티스 입문/실전
Deployment-service 연결 과정에서 오류..?
윈11에 docker desktop과 wsl 을 연동하여 쓰고 있습니다. 리눅스 명령어가 더 익숙해서.. 수업 내용대로 다 잘 따라했습니다. deployment, service, pod 모두 정상적으로 작동이 됩니다. 하지만 localhost:30000으로 접속시 연결 거부가 뜨고, kubectl port-forward service/spring-service 30000:8080 으로 직접적으로 포트 포워딩을 해준 후에야 localhost:30000이 접속이 됩니다. 어떻게 해야 포트 포워딩 작업 없이 바로 서비스에 접근 가능할까요..? 뭘 설정해야 하는지 모르겠습니다
-
해결됨강의 하나로 끝내는 백엔드 모든 지식!
백엔드 신입으로써 알아야할 보안에 대한 기본 수준이 궁금합니다
검색을 해보니 강의 내용 중 나오는sql인젝션xss, HttpOnlycsrf, SameSitehttps이 부분들은 보통 기본적으로 많이 선택해서 꼭 알아야 하고 연습해야 하는 것으로 생각됩니다그 외에도 알려주신 것들에 대해 자세히 알아야 할까요? 아니면 이런 방법들이 있구나 하고 굳이 직접 사용해볼 필요는 없는 걸까요
-
미해결대규모 트래픽 처리를 위한 부하테스트 입문/실전
부하 테스트에 대한 문의드립니다
안녕하세요 재성님. k6 공식문서에 보면 시나리오라는 개념이 있는데요. 현업에서 부하 테스트할때 로그인 이후에 처리되는 로직에 대한 부하 테스트를 진행한다면. 이때 vUser 수가 100명이라하면이때는 회원 테이블에 더미데이터를 만들어두고 진행할 까요? 아니면 로직에 대한 부하가 아니라면특정 페이지 접근에 대한 테스트로 진행될까요?(강좌에서는 시나리오보다는 특정 페이지에 대해서 한 느낌이였습니다) 현업에서는 K6 를 어떻게 다루시는지 문의드립니다 감사합니다.
-
미해결비전공자도 이해할 수 있는 AWS 중급/실전 (보안, 가용성편)
AWS 비용예측 질문
안녕하세요 재성님.덕분에 AWS 에 대해서 조금더 알게 되었습니다.감사합니다 AWS 로 인프라를 구성했을때비용을 어떻게 예측할 수 있을까요?청구서에서 보는거 말고 이정도 규모면 얼마정도의 비용이 발생할지 알 수 있는 방법이 있을까요? 감사합니다.
-
해결됨실전에서 바로 써먹는 Elasticsearch 입문 (검색 최적화편)
60강 ProductDoument 코드 관련 질문 있습니다!
안녕하세요, 강사님!바쁘신 와중에 질문드려 죄송합니다...단순한 질문 같지만 ProductDocument 코드에 대해 궁금한 것이 있어 질문드립니다.Elasticsearch 관련 Document 코드에 @AllArgsConstructor나 @Data같은 롬복(lombok) 애노테이션을 사용해도 문제가 없을까요...?추가로 실제 실무에서 Document에 롬복을 사용하는지 강사님 코드대로 직접 생성자, getter & setter를 작성하는지 알고 싶습니다!
-
해결됨강의 하나로 끝내는 백엔드 모든 지식!
22강 마지막 영상 짤림
큰 문제는 아닙니다만 22강이 마지막에 갑자기 종료되는 문제가 있습니다. 따로 어디에 말씀드려야 할지 모르겠어서 Q&A 게시판에 남깁니다.