묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결15일간의 빅데이터 파일럿 프로젝트
hue 설치 중 psycopg2 설치 오류
휴 설치 강의에서 실습 중 psycopg2 설치 오류가 발생합니다. 해결방법이 있을지 문의드립니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
컨슈머 확인 테스트 실패
강의 내용대로 따라서 진행했는데 '여러명 응모' 테스트에 실패합니다. 테스트 실행 시 강의화면에서 보이는 것과 같이 kafka 관련 로그(ProducerConfig values)는 전혀 나오지 않습니다. CLI에서도 컨슈머는 아무런 메시지를 받지 못합니다... 에러 원인 파악이 전혀 안되서 강의 진도가 안나가고 있어요docker-compose 실행부터 문제가 있어서 답변받은 내용대로 수정해서 아래와 같이 실행했습니다.version: '2' services: zookeeper: image: confluentinc/cp-zookeeper:latest container_name: zookeeper environment: ZOOKEEPER_SERVER_ID: 1 ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 ZOOKEEPER_INIT_LIMIT: 5 ZOOKEEPER_SYNC_LIMIT: 2 ports: - "2181:2181" kafka: image: confluentinc/cp-kafka:latest container_name: kafka depends_on: - zookeeper ports: - "9092:9092" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 producer와 consumer간에 testTopic으로 메시지 주고받는 테스트는 성공했어요.근데 애플리케이션에서 강의내용대로 코드작성해서 메시지 날릴때는 메시지를 전혀 받지 못합니다.docker exec -it kafka kafka-topics --bootstrap-server localhost:9092 --create --topic coupon_create docker exec -it kafka kafka-console-consumer --topic coupon_create --bootstrap-server localhost:9092 --key-deserializer "org.apache.kafka.common.serialization.StringDeserializer" --value-deserializer "org.apache.kafka.common.serialization.LongDeserializer"
-
미해결실습으로 배우는 선착순 이벤트 시스템
kafka 와 redis pub/sub 비교
Redis 자체에 pub/sub 이라는 기능이 있는 걸로 알고있습니다.이 기능은 kafka 랑 동일한 동작을 하지 않을까 하는 생각이 들었는데요.. 현재 프로젝트에 kafka 대신 redis의 pub/sub 을 사용해서 부하를 줄일 수도 있을까요?
-
해결됨실습으로 배우는 선착순 이벤트 시스템
ApplyService#apply 트랜잭션 문제
안녕하세요~강의 중 ApplyService#apply 트랜잭션 관련해서 질문이 있습니다.apply 메서드가 appliedUserRepository#add 만 호출되거나 couponCountRepository#increase 까지만 호출되고 에러, 시스템 다운 등 특정 이유로 couponCreateProducer#create 는 호출되지 않게 되었을 때에 대한 처리가 필요할 것 같습니다.어떻게 처리하는 것이 좋을까요?? @Service @RequiredArgsConstructor public class ApplyService { private final CouponRepository couponRepository; private final CouponCountRepository couponCountRepository; private final CouponCreateProducer couponCreateProducer; private final AppliedUserRepository appliedUserRepository; public void apply(final Long userId) { final Long applied = appliedUserRepository.add(userId); if (applied != 1) { return; } final long count = couponCountRepository.increase(); if (count > 100) { return; } couponCreateProducer.create(userId); } }
-
미해결실습으로 배우는 선착순 이벤트 시스템
kafka Consumer
Kafka를 사용하는 주된 이유 중 하나는 확실히 데이터 처리의 유연성과 부하 분산에 있습니다. Kafka를 활용함으로써, 많은 양의 이벤트(예: 쿠폰 발행 요청)를 바로 처리하지 않고 큐에 보관했다가, 시스템의 부하가 적은 시기에 또는 자원이 더욱 충분할 때 일괄적으로 처리할 수 있게 됩니다.kafka 관련해서 다른 분 질문에 답글이 위처럼 달린 것을 확인했는데요.. 큐에 보관했다가 일괄적으로 처리를 할 수 있다고 했는데 그럼 컨슈머 listener 에 언제 카프카에 있는 이벤트를 받아서 처리할 것인지에 대한 설정을 할 수 있는 것인가요?시스템 부하가 적은 시기나 자원이 충분할 때가 언제인지 어떻게 알고 처리를 하는지 궁금합니다.
-
미해결실리콘밸리 엔지니어와 함께하는 Redis
수업자료 한번에 다운 받을 수 없을까요?
수업자료를 매번 다운받고 아이패드에 넣고 하는 작업이 번거롭네요 ㅠ 한번에 다운받고 싶어요!
-
미해결실습으로 배우는 선착순 이벤트 시스템
docker compose up 실행 오류
version: '2' services: zookeeper: image: wurstmeister/zookeeper container_name: zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka:2.12-2.5.0 container_name: kafka ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock 강의자료 내용대로 작성하고 실행했는데 다음과 같은 오류가 계속 발생하는데 원인을 모르겠습니다. 도커 로그인을 했는데도 계속 발생하네요. 오류 원인이 뭘까요? $ docker-compose up -d kafka Pulling zookeeper Pulling kafka Error zookeeper ErrorError response from daemon: pull access denied for wurstmeister/kafka, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
-
미해결실습으로 배우는 선착순 이벤트 시스템
consumer 셋팅 숫자 출력이 안됩니다.
docker exec -it kafka kafka-console-consumer.sh --topic coupon_create --bootstrap-server localhost:9092 --key-deserializer "org.apache.kafka.common.serialization.StringDeserializer" --value-deserializer "org.apache.kafka.common.serialization.LongDeserializer"라고 터미너에 입력한 후에 테스트 코드package com.example.coupon_server.service; import com.example.coupon_server.repository.CouponRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @SpringBootTest public class ApplyServiceTest { @Autowired private ApplyService applyService; @Autowired private CouponRepository couponRepository; @Test @DisplayName("쿠폰 한개 적용 테스트") public void applyOneCoupon() { applyService.applyCoupon(1L); long count = couponRepository.count(); assertThat(count).isEqualTo(1); } @Test @DisplayName("쿠폰 여러개 적용 테스트") public void applyMultiCoupon() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { long userId = i; executorService.submit(() -> { try { applyService.applyCoupon(userId); } finally { latch.countDown(); } }); } latch.await(); Thread.sleep(10000); long count = couponRepository.count(); assertThat(count).isEqualTo(100); } @Test @DisplayName("한명당 한개의 쿠폰만 발급") public void applyOneCouponPerUser() throws InterruptedException { int threadCount = 1000; ExecutorService executorService = Executors.newFixedThreadPool(32); CountDownLatch latch = new CountDownLatch(threadCount); for (int i = 0; i < threadCount; i++) { long userId = i; executorService.submit(() -> { try { applyService.applyCoupon(1L); } finally { latch.countDown(); } }); } latch.await(); Thread.sleep(10000); long count = couponRepository.count(); assertThat(count).isEqualTo(1); } }로 작성했지만 터미널에서 강사님과 같이 숫자들이 찍히자 않습니다.그리고 터미널 안의 글씨 너무 작은것 같아요
-
미해결실습으로 배우는 선착순 이벤트 시스템
멀티 모듈
프로젝트 나누신것 같은데그냥 최상단 경로에서 프로젝트 하나 더 생성하고 난뒤에최상단에서 열면 되는건가요 ?
-
미해결실습으로 배우는 선착순 이벤트 시스템
kafka 사용 이유
안녕하세요,궁금한 내용이 생겨 기존에 질문들을 살펴보고 제가 이해한 것이 맞는지 확인차 질문드립니다. redis의 싱글스레드 특성으로 100개 발급에 대한 race condition 해결 --> 그러나 insert 시 DB 처리량에 부하가 발생할 수 있음kafka 미들웨어를 통해 100개의 쿠폰 저장 이벤트를 보관해두었다가 컨슈머에서 원할때 꺼내어 처리할 수 있는 여지를 주어 처리량 부하를 분산시킬 수 있음ex) 쿠폰 발급은 당장 안해도 되니, kafka에 이벤트만 잘 발행되어 있다면 DB 작업량이 적은 새벽에 꺼내서 저장해도 됨 이렇게 이해했는데, 맞을까요?
-
해결됨실전! Redis 활용
ec2 내 Redis 잘못된 host 연결
문제는 이렇습니다.prodRedisUrl = redis://:password@ec2프라이빗ip:6379/0로 url을 보냅니다.그리고 ec2 내 redis bind를 ec2 프라이빗 Ip로 설정하고, 리스닝 하고 있는 상태입니다.그러면 정상적이라면, 서버가 배포 됐을 때 prodRedisUrl로 redis와의 연결이 성공적으로 연결 됩니다.근데 어이없는 문제가 발생합니다요청하지도 않은 localhost로 redis서버에 연결하려고 하는 것입니다.그래서 시나리오를 세워서 반대로 테스트를 해봤습니다 !!!!prodRedisUrl = redis://:password@127.0.0.1:6379/0로 하고, 일부러 로컬호스트를 보내 봤습니다. 물론 ec2 내 redis.conf의 bind를 수정 했습니다. bind 127.0.0.1테스트 해봤더니 127.0.0.1로 접속은 완료 됐지만이제는 반대로 ec2 프라이빗 Ip로 연결을 요청해서 실패하네요 ㅋㅋㅋㅋㅋ도대체 요청하지도 않은 ec2에서 그리고 알지도 못하는 프라이빗 ip로 redis서버에 접속하려는걸까요??????----------------------------------------즉, 정리하자면 요청하지도 않은 host로 Redis서버에 접속한다 !! 입니다.로컬에서 테스트 할 때는 아무런 문제 없이 잘 작동하더니만 ec2에 배포하고 연결하려고 하니까 이 말썽입니다... 도저히 이해가 되지도 않고 원인 파악도 힘드네요,, =====추가적으로 redisurl 로그도 정상적으로 출력되고, 그리고 문자열로도 넣어봤지만 똑같은 증상이 발생했습니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
서버 1대일때 Synchronized 사용
[Redis 활용하며 문제 해결하기 > 문제점 해결하기 01:19]강의에서 Synchronized 를 사용할때 서버가 여러 대가 된다면 적절하지 않다고 하셨는데, 그러면 서버가 1대 일때는 Synchronized 를 사용해도 괜찮은가요??
-
해결됨실습으로 배우는 선착순 이벤트 시스템
처리 지연을 어떻게 구현해야하나요?
안녕하세요 강사님 ! kafka: consumer: max-poll-records: 5이것 저것 찾아보다가 한번에 가져오는 레코드의 양을 줄이는 옵션이 있어서 적용해봤습니다. 그래서 처리되는 속도는 비슷하더라구요. 컨슈머가 속도를 설정해서 천천히 이벤트를 확인하고 싶은데 강사님이 말씀하신 걸 적용하려면 어떤 옵션을 줘야하나요?
-
미해결쿠버네티스 101 - 클라우드/서버 개발 첫걸음
섹션2 Yaml로 Deployment 실습 시 Pod 이미지가 없다는 오류
안녕하세요.강의에 나온 것처럼 똑같이 Yaml을 만들어 Deployment를 생성하는데 아래처럼 오류가 나는데 잘 모르겠습니다.실제 Deployment와 Pod도 replicas=3으로 모두 생성되기는 하는데 대시보드에서 보면 오류가 있다고 나옵니다.도커 이미지를 조회하면 분명히 있거든요. (docker image inspect hello-kube:v1) 오류 내용Container image "hello-kube:v1" is not present with pull policy of Never
-
미해결실습으로 배우는 선착순 이벤트 시스템
질문드립니다
1분 42초에 lock을 건다고 하는데 이게 어떤 lock을 건다는 의미인지 모르겠습니다.설명해주시기로는 범위로 락을 잡고 처음에 쿠폰 발급 여부를 가져와서 판단하는 방식입니다.라고 설명해주셨는데 여기서 lock이란게 뭐고 lock을 사용하는 이유가 뭔지 설명해주시면 감사하겠습니다.if문을 통해 확인한다는게 lock인건지 아니면 apply메서드 자체에 lock을 걸고 다른 프로세스가 접근하지 못하게한다는건지 모르겠내요유저 아이디별로 쿠폰 발급 개수를 한개로 제한할때 Redis에 Set자료구조를 써도되고 Map을 써도될거같은데 Set을 소개해주신 이유가 있을까요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
데이터베이스에 쿠폰 insert 실패시
안녕하세요. 강의 잘 듣고있습니다 !카프카 컨슈머가 쿠폰레포지토리에 save하는 과정에서 모종의 이유로 실패하여 롤백 되었을 때, 레디스에서는 이미 increment가 되었는데 이걸 하나 빼줘야되는거 아닌가요?이런 처리는 어떻게하는지 궁금합니다 !추가) 뒤에 얘기가 나오는군요 ㅎㅎㅎ.. FailedEvent를 저장하는 것도 실패하였다면, 배치프로그램이 제 역할을 못할 것 같은데요.. ! 그렇다면 로그를 보고 판단해야할 것 같은데 실무에서도 그렇게 진행이 될까요 ? 그리고, FailedEvent를 삽입하는 것에서도 에러가 발생할 수 있기 때문에 또 try catch로 묶어서 이것 마저 실패할 경우에도 로그를 따로 남겨야하는지 궁금합니다 !
-
미해결실습으로 배우는 선착순 이벤트 시스템
mac m2 arm64 vim docker-compose.yml설정
zookeeper에서 오류가 발생해서 테스트 진행시 어려움이있습니다. 강의상의 내용으로 진행되었고,해당내용으로는 진행되지 않아 웹서핑 이후version: '3'services: zookeeper: image: zookeeper ports: - "2181:2181" kafka: build: . ports: - "9092:9092" environment: KAFKA_ADVERTISED_HOST_NAME: localhost KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 volumes: - /var/run/docker.sock:/var/run/docker.sock확인되는 내용으로 변경했는데도 잘 안되더라구요 ㅜ늦게라도 확인되신다면 회신부탁드립니다!!
-
미해결실습으로 배우는 선착순 이벤트 시스템
컨슈머 테스트 중 쓰레드 슬립을 사용하지 않았는데 성공하는 이유가 뭘까요??
안녕하세요. 강의 잘 보고 있습니다. 저는 현재 kotlin, postgreSQL을 사용하고 있으며M3 맥북 환경입니다 강의에서 쓰레드슬립 사용 전 테스트케이스가 실패하는걸 확인할 수 있는데, 왜 저는 테스트가 성공되는걸까요..?? 원래 실패 해야 정상인 상황일까요? 어떤 이유에서 성공하는지 감이 잘 안옵니다..
-
미해결쿠버네티스 101 - 클라우드/서버 개발 첫걸음
minikube service명령어를 입력시 해당 에러가 뜹니다
vscode상에서는 url이 발생하지만 접속시 접속할수 없다고 뜨고서 해당로그가 발생됩니다 docker 접속오류라는데 도커는 정상작동을 합니다
-
미해결15일간의 빅데이터 파일럿 프로젝트
각 서버에 설치하는 프로그램은 어떻게 정하나요?
안녕하세요!강의 듣다 궁금한 점이 몇 가지 있어 질문 드립니다.먼저 강의에서는 빅디님께서 각 서버에 설치할 프로그램을 알려주셔서 편하게 설치는 했는데, 어떤 기준으로 설치할 프로그램을 선택하고 각 서버에 설치할 프로그램을 나눠서 아키텍처를 짜셨는지 빅디님의 관점?이 궁금합니다.예를 들어 postgreSQL는 서버 1에만 설치하고, HBase Region 같은 경우는 서버 세 곳 모두 설치 한 이유와, 다른 RDBMS 중에서도 postgreSQL을 선택한 특별한 이유 같은거요..!그리고 서비스 중간에 서버를 늘리려고 할 때 추가해야 하는 서버 수는 어떻게 정하나요? 모니터링 하다가 서버 전체 메모리의 몇 퍼센트를 차지하게 되면 서버를 늘려야 한다 이런 기준이 있을까요? 비용은 제외하고 기술적인 부분에서 기준으로 세울만한 건 어떤게 있는지 궁금합니다. 현업에서는 프로젝트 특성마다 다 다르게 설계를 해야 할 테고 3V 관점으로 봐야 한다는 건 알겠는데 조금 더 구체적인 예시가 있으면 이해하는데 도움이 많이 될 것 같습니다! 감사합니다:]