묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
자료 다운받고 굿노트에
옮기려는데 자꾸 암호를 적으라고해서요..;;
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
Kafka 서버에서 Kafka만 실행하는 게 일반적인가요?
안녕하세요.현재 KRaft를 도입하기 위해 하드웨어 구성을 검토 중입니다. 해소가 안 되는 궁금증이 있어 질문 올립니다.Kafka 서버에서 Kafka만 실행하는 게 일반적인지 궁금합니다. 로그 수집을 위해 Kafka 서버에서 opensearch도 함께 사용할 계획이었습니다. 일반적인 경우에 이렇게 하는 경우가 있는지, 아니면 분리하는 게 맞는지 선생님의 의견을 듣고 싶습니다.
-
미해결카프카 완벽 가이드 - 코어편
Zookeeper 관련 문의 드립니다.
개발자님 Zookeeper 관련 전문가의 견해가 궁금 합니다. Apache Kafka 에 Zookeeper 가 없이 설치 해서 사용 할 수 있는 것에 궁금한 것이 있습니다. 1.Zookeeper 설치 없이 사용 하는 것은 Apache Kafka 에 Zookeeper 가 하던 task를 Apache Kafka 가 처리 하게 개발 하는 걸까요? 분리된 작업을 합치면 성능적 효과가 있는 걸까요? 2.Zookeeper 설치 없이 사용 하는 Apache Kafka 를 하나의 PC에 docker container로 단일 브로커로 3개의 container을 만든다면, 실무에서 사용 사능 할까요? 3.클러스터 환경에서 브로커를 두어 replication을 통해 가용성을 증가 시키는 것은 이해 했습니다. 혹 하나의 PC 에서 브로커를 여러개 두는 것은 가용성과는 크게 관련이 없는 것일까요?4.PC 한대에서 여러개의 Topic 을 통해 message 를 분류 해서 받는 것과,PC 한대에서 브로커를 여러개 두어 message 를 분류 해서 받는 것의 성능 적 차이가 있을까요?ex) 하나의 브러커에 2개의 토픽, 1번 토픽은 이미지만 받고 2번 토픽은 동영상만 받고,2개의 브로커에 각각 1나의 토픽으로 1번 브로커에 이미지만 받고, 2번 브로커에 동영상만 받고,둘다 consumer 가 소비 하는 데이터는 동일 하다는 가정 입니다. 5하나의 PC에 container 환경 구축 보다, 그냥 설치 해서 하는 방법이 좋다고 알고 있습니다. 또 성능이 좋아서 하나로도 충분 하다고 알고 있는데 맞는 걸까여? 성능을 측정 하는 것에 지식이 없어서 문의 드립니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
user service에서는 토큰 검증을 하지 않나요?
제가 작성한 user-service SecurityConfig 입니다강의 내용과 최대한 유사하게 작성한거 같은데 GET /users에서 403이 발생하여 문의드립니다.gateway service에서 토큰 검증을 하여도 user service에서는 검증된 토큰인지 알 수 없으니 403이 발생하는게 맞는거 같은데 강의에서는 api가 제대로 동작하여 왜 그런지 궁금합니다 @RequiredArgsConstructor @Configuration public class SecurityConfig { //AuthenticationManager가 인자로 받을 AuthenticationConfiguraion 객체 생성자 주입 private final AuthenticationConfiguration authenticationConfiguration; private final JwtProvider jwtProvider; private static final String[] WHITE_LIST = {"/login", "/h2-console/**", "/health-check", "/welcome", "/join"}; @Bean public SecurityFilterChain config(HttpSecurity http) throws Exception { AuthenticationManager authenticationManager = authenticationManager(authenticationConfiguration); AuthenticationFilter authenticationFilter = new AuthenticationFilter( authenticationManager, jwtProvider); http.csrf(csrf -> csrf.disable()) //CSRF 보호를 비활성화. REST API 환경만 비활성화. Web Form 기반에서는 필요. .formLogin((auth) -> auth.disable()) // .httpBasic((auth) -> auth.disable()) .headers(header -> header.frameOptions( frameOptionsConfig -> frameOptionsConfig.disable()) ) //h2 console iframe을 사용하기 때문에 X-Frame-Options 헤더를 비활성화 .authorizeHttpRequests(auth -> auth.requestMatchers(WHITE_LIST).permitAll() .anyRequest() .authenticated() ) .authenticationManager(authenticationManager) .addFilterAt(authenticationFilter, UsernamePasswordAuthenticationFilter.class) .sessionManagement((session) -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS)); return http.build(); } //AuthenticationManager Bean 등록 @Bean public AuthenticationManager authenticationManager(AuthenticationConfiguration configuration) throws Exception { return configuration.getAuthenticationManager(); } @Bean public BCryptPasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
-
미해결카프카 완벽 가이드 - 코어편
한대의 PC 에서의 Docker container 를 통한 cluster 구성
안녕 하세요. 개발자님 궁금 한 것이 있어 문의 드립니다. 1.1대의 PC 에서 docker container 환경에서 confluent kafka를 container 로 3개 를 뛰어서, 3 개의 Broker 환경을 만든다 가정 하고 --replication-factor=3 개로 설정 해서 사용 하는 방법에 대해서 어떤 생각을 가지고 있으신가요? 2.docker image confluent kafka 를 사용 하는 것은 기존 container 환경에서 하지 않는 방시과 성능적인 차이가 있을까요? 너무 궁금 합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Slf4j log cannot find symbol 오류 해결방법
intelliJ 에서 Slf4j 추가한 상태에서 log.info(header); 부분에서 나는 오류 해결방법java: cannot find symbol symbol: variable log
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
actuator 적용이 아닌 따로 `/heath_check` 를 생성한 이유가 있을까요?
actuator 적용이 아닌 따로 /heath_check 를 생성한 이유가 있을까요? 좋은 강의 감사합니다. 좋은 하루 보내세요 : )
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Gateway `_(언더바)` Internal Server Error
안녕하세요. 강의 잘 보고 있습니다. Gateway의 uri를 lb://MY_FIRST_SERVICE 로 수정했을 때 500 Internal Server Error가 났습니다.처음에 Spring boot 버전에서 문제인가 싶어서 Spring boot 버전을 3.3.5 -> 3.2.0 으로 수정도 해보고 load-balancer도 추가해보고 했습니다. 결과적으로 lb://MY_FIRST_SERVICE의 _(언더바)를 -하이픈으로 수정하니 정상 작동하는 것을 알았습니다. 그런데 여기서 이유를 GPT에게 물어본 결과라는 답변을 받았습니다.이러한 결과가 사실이 맞는지 궁금합니다. 구글링 해봤을 때 관련한 자료는 없어서 여쭤봅니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
spring cloud gateway mvc 모델에서 route별 timeout 설정
안녕하세요 선생님. 질문이 있어 남깁니다.spring cloud gateway mvc모델에서 route별 httpclient의 readtimeout, connectiontimeout을 설정하는 방법이 있나요?reactive한 모델에서는 metadata를 이용하여 설정하는 것 같은데, documents를 아무리 뒤져도 mvc모델에서 전역적으로 타임아웃 설정하는 법만 있고, route별 설정하는 법이 없네요.. 어떻게 설정해야할까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료를 얻고 싶습니다.
강의 자료를 받아 보고 싶습니다.필요한 것을 찾을 때 강의를 재생하면서 내용 중에 찾기가 힘들어요
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
카프카 스트림즈와 커넥트 활용 사례가 더 궁금합니다.
안녕하세요 먼저 좋은 강의를 제공해주셔서 감사합니다. 바로 본론으로 들어가서, "카프카 기반 아키텍처" 섹션에서 스트림즈와 커넥트의 차이는 결국 Stateful 한 데이터에 대한 처리냐 아니냐 라고 말씀해주신거 같은데, 좀 더 구체적인 상황 사례가 있을까요? 스트림즈가 Stateful 한 데이터에 처리가 가능하다고 하는 것은 결국 스트림즈는 단일 파이프라인?, 단일 애플리케이션? 으로 구성되어야 한다는 의미일까요? (여러 파이프라인으로 분산 모드가 가능한 커넥트는 데이터 처리에 대해서 Stateful 할 수 없으니깐 말이죠)
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
http http://localhost:8083/connector-plugins 시 플러그인이 보이지 않습니다.
connect를 재가동해도 보이지가 않네요..경로 문제일까요? 아래와 같이 결과가 나옵니다.(cdc_source_connector/, jdbc_connector/ 위치에 jar 파일들은 모두 있습니다.)http http://localhost:8083/connector-pluginsHTTP/1.1 200 OKContent-Length: 296Content-Type: application/jsonDate: Fri, 15 Nov 2024 07:35:40 GMTServer: Jetty(9.4.44.v20210927)[ { "class": "org.apache.kafka.connect.mirror.MirrorCheckpointConnector", "type": "source", "version": "1" }, { "class": "org.apache.kafka.connect.mirror.MirrorHeartbeatConnector", "type": "source", "version": "1" }, { "class": "org.apache.kafka.connect.mirror.MirrorSourceConnector", "type": "source", "version": "1" }]
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Actuator busrefresh 관련 질문
해결 했습니다. 강의 감사합니다
-
미해결실습으로 배우는 선착순 이벤트 시스템
쿠폰 생성 에러 처리에 관해서 질문이 있습니다.
안녕하세요 강사님 강의 잘 봤습니다.덕분에 kafka와 redis를 어떤식으로 사용할 수 있는지 많은 걸 엿볼 수 있는 느낌이었습니다.강의가 다 진행되고 난 후 궁금한 점이 하나 있습니다. 쿠폰 생성 에러 처리 관련되어서 질문이 있는데, 만약 메시지를 수신하는 쪽이 아니라 발송하는 쪽에서 문제가 생겼다면 어떻게 해야하나요? 예를들어 redis에서 increment로 수량에 대해서 가져왔지만, 만약 kafka에 메시지를 보내는 것이 실패 될 경우reids에 있는 값을 다시 하나 줄여야할 것 같습니다. 이런 경우 try catch 블럭으로 처리를 하는 지? 아니면 다른 방식으로 예외처리 하는지 궁금합니다.
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
안녕하세요 sink connector 생성 config 관련 질문입니다.
현재 JDBC Sink Connector 생성 실습중입니다. 실습환경과 버전차이가 있어서 그런건지 깃허브에 올려주신 config로 생성하는경우 mysql syntax에러가 발생하면서 오류발생으로 작동을 안합니다. 검색 결과 각 config에서 "table.name.format": "om_sink.테이블명"->"테이블명"만 작성해서 스키마 특정을 안하면 일단 동작은 하는걸 확인했습니다. 해당 사항으로 바뀌는 부분이 있을까요? 강의시작으로부터 2년이라는시간이 지나서 jdbc 커넥터에 변경사항이 발생한걸까요? 감사합니다. + 추가로 현재 7장5강 cdc source connector 실습중인데 sink connector에서 동일한 오류가 발생하여 table.name.format의 "oc_sink.order_items_sink"에서 "oc_sink"를 삭제하였는데 connection.url에 oc_sink를 지정해 주었으니 특별히 문제가 없을지요? -> 백틱(`) 으로 "`oc_sink`.`order_itmes_sink`" 이런식으로묶어주니까 동작하는 것 확인했습니다. 버전이나 어딘가의 설정 차이인것 같네요. 혹시 저같이 오류나셔서 곤란한 분 있을까 해서 남겨놓습니다.
-
미해결카프카 완벽 가이드 - 코어편
console consumer는 __consumer_offset에 offset을 기록하지 않나요?
현재 상황 : kafka-console-consumer --consumer.config $CONFLUENTHOME/consumer_temp.config --bootstrap-server localhost:9092 --topic __consumer_offsets --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter"콘솔컨슈머를 작동한 상태인텔리제이에서 자바 컨슈머를 작동시키면 __consumer_offset에 대한 메시지가 잘 뜨는 상황콘솔컨슈머는 동작할 때마다 그룹이 새롭게 만들어짐카프카의 로그를 통해 그룹ID를 확인그룹ID : console-consumer-66204[2024-11-08 08:54:50,280] INFO [GroupCoordinator 0]: Assignment received from leader console-consumer-63e25045-a918-49c9-bb02-abddbac461f9 for group console-consumer-66204 for generation 1. The group has 1 members, 0 of which are static. (kafka.coordinator.group.GroupCoordinator)의문점 : 실험을 위해 CONSUMEROFFSETINFO토픽을 생성하고, 콘솔 컨슈머를 작동, 콘솔 프로듀서로 메시지를 보낸 상황토픽명 : CONSUMEROFFSETINFO그룹명 : console-consumer-66204 [질문]왜 콘솔컨슈머에 대한 메시지는 나오지 않나요?여전히 자바 컨슈머를 작동시키면 __consumer_offsets토픽에 대한 메시지는 잘 나오는 상황입니다이것저것 실험해보다가 도저히 답이 나오질 않아서 첫 질문 드립니다 강의에서는 컨슈머 그룹아이디를 갖는 컨슈머를 직접 생성해왔었는데, 지금은 컨슈머 그룹아이디를 갖는 컨슈머를 따로 생성 하진 않아서그룹에 속하지 않은 컨슈머라 메시지가 안뜨는 것인지아니면 원래 콘솔컨슈머의 __consumer_offset정보는 읽을 수 없는건지.. 도와주세요
-
미해결실습으로 배우는 선착순 이벤트 시스템
마지막에 하신 테스트 자체는 실패하는 게 맞는거죠??
Producer 에는 제대로 값이 찍히는데하지만 테스트 자체는 실패했는데요아마 mysql과 연결이 되지 않아서 생긴 오류라고 봐도 될까요?? 아직 뒷 강의는 진행하지 않았습니다!!
-
미해결카프카 완벽 가이드 - 코어편
utm 환경에서 여러개의 ssh를 사용할 수 있는 법 혹은 강의처럼 테스트 해볼 수 있는 법 없을까요
mac을 이용해 강의를 진행하고 있습니다. utm 가상머신을 이용해 강의를 따라가고있는데, utm에서는 여러개의 shell을 지원하지 않는 것 같은데 어떻게 강사님처럼 스크립트 파일을 실행시켜 테스트를 해볼 수있을까요?
-
미해결카프카 완벽 가이드 - 코어편
mac m1 환경의 utm에서 여러개의 ssh 환경을 구성할 수 있을까요
너무 힘들게 강의를 따라하고있는데, 이미 강의 자료를 여러 댓글 읽기 전에 다운 받아 버려서 환불도 못하고 있는 상황입니다.mac을 사용하는 환경에서는 매우 친절하지 못한 설명들이 많네요... 이것저것 찾아가면서 하나씩 해보려고 하는데 정말 쉽지 않습니다.. utm 환경에서 현재 .sh 파일까지 어찌저찌 만들어 가면서 진행중인데 utm에서는 하나의 ui만 제공해주는 것 같은데 어떻게 강사님처럼 해볼 수 있는 방법이 없을까요?
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
수강환경 VirtualBox -> Docker
어디에 올리는 것이 적합한지 모르겠어서 여기에 올려봅니다. 혹시 virtual box 사용하여 강의 환경설정하시는 것이 조금 번거로우신 분들을 위해, 강의 실습을 진행하며 사용했던 docker-compose 파일을 공유드립니다!강의의 세부적인 부분까지 따라하진 못할수도 있지만, 좀 더 편하고 빠르게 수업을 따라가실 수 있으실거에요. 너무나 좋은 강의 감사드립니다!(사용하시게 되면 connector config 파일들에서 DB connection url localhost 부분을 mysql로 바꿔서 등록하시면 되요)name: 'plz_kafka' services: zookeeper: image: confluentinc/cp-zookeeper:7.5.3 hostname: zookeeper container_name: zookeeper ports: - "2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 healthcheck: test: echo srvr | nc zookeeper 2181 || exit 1 start_period: 10s retries: 20 interval: 10s broker: image: confluentinc/cp-enterprise-kafka:7.5.3 hostname: broker container_name: broker depends_on: zookeeper: condition: service_healthy ports: - "29092:29092" - "9092:9092" - "9101:9101" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL: http://schema-registry:8081 healthcheck: test: nc -z localhost 9092 || exit -1 start_period: 15s interval: 5s timeout: 10s retries: 10 kafka-connect: image: confluentinc/cp-kafka-connect-base:7.7.1 container_name: kafka-connect depends_on: - broker # - schema-registry ports: - 8083:8083 environment: CONNECT_BOOTSTRAP_SERVERS: "broker:29092" CONNECT_REST_PORT: 8083 CONNECT_GROUP_ID: kafka-connect CONNECT_CONFIG_STORAGE_TOPIC: _connect-configs CONNECT_OFFSET_STORAGE_TOPIC: _connect-offsets CONNECT_STATUS_STORAGE_TOPIC: _connect-status CONNECT_KEY_CONVERTER: org.apache.kafka.connect.json.JsonConverter CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter # CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: 'http://schema-registry:8081' CONNECT_REST_ADVERTISED_HOST_NAME: "kafka-connect" CONNECT_LOG4J_APPENDER_STDOUT_LAYOUT_CONVERSIONPATTERN: "[%d] %p %X{connector.context}%m (%c:%L)%n" CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: "1" CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: "1" CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: "1" # --------------- CONNECT_PLUGIN_PATH: /usr/share/java,/usr/share/confluent-hub-components # If you want to use the Confluent Hub installer to d/l component, but make them available # when running this offline, spin up the stack once and then run : # docker cp kafka-connect:/usr/share/confluent-hub-components ./data/connect-jars volumes: - $PWD/data:/data # In the command section, $ are replaced with $$ to avoid the error 'Invalid interpolation format for "command" option' command: - bash - -c - | echo "Installing Connector" confluent-hub install --no-prompt debezium/debezium-connector-mysql:1.7.0 confluent-hub install --no-prompt jcustenborder/kafka-connect-spooldir:2.0.65 confluent-hub install --no-prompt confluentinc/kafka-connect-jdbc:10.8.0 curl -o /usr/share/confluent-hub-components/confluentinc-kafka-connect-jdbc/lib/mysql-connector-java.jar \ https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.26/mysql-connector-java-8.0.26.jar # echo "Launching Kafka Connect worker" /etc/confluent/docker/run & # sleep infinity schema-registry: image: confluentinc/cp-schema-registry:6.2.0 container_name: schema-registry ports: - "8081:8081" depends_on: - broker environment: SCHEMA_REGISTRY_HOST_NAME: schema-registry SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: broker:29092 mysql: image: mysql:8.0 container_name: mysql environment: # 환경 변수 설정 MYSQL_ROOT_PASSWORD: root MYSQL_USER: 'connect_dev' MYSQL_PASSWORD: 'connect_dev' MYSQL_DATABASE: om TZ: Asia/Seoul ports: - "3306:3306" volumes: - ./mysql/:/var/lib/mysql