안녕하세요. 강의를 보고 설치를 따라하는 중 sudo apt-get install openssh-server가 실행이 아래처럼 되지않아서문의 드립니다. sudo apt-get update를 해봤는데 라고 뜹니다. 원래는 중간에 us 부분이 kr 이었는데 https://blog.naver.com/lewisel/221893514069 해당 블로그를 보고 변경했습니다. (다른블로그의 %s/kr.archive.ubuntu.com/ftp.daumkakao.com 로 변경하라는 글도 실행해보았습니다.) 그래도 안되어서 찾아보니 dns정보를 입력하라는 글도 보아서 /etc/resolv.conf 에 nameserver 8.8.8.8도 추가해보았고, /etc/network/interfaces파일도 추가해서 dns-nameservers 8.8.8.8 도 추가해보았지만 그대로인 것 같습니다. 현재 다른 설정은 아래와 같습니다.
이번에 면접을 보면서 확실하게 대답을 못해서 고민 끝에 선생님에게 질문 드립니다. 우선 시나리오 말씀드리자면 client 가 해당 게시글에 "좋아요" 등록을 하게 된다면 좋아요 등록 관련 DB 테이블에 insert 동시에 outbox 테이블에도 insert 하도록 설계 되어 있습니다. commit 이 정상적으로 발생되면 kafka 서버에게 이벤트 메시지를 발행 하게 되는데요. 만약 갑자기 이벤트 발행시 kafka 서버가 죽었다고 하면 복구 될때 까지 기다리다가 retry 통해 아직 메시지 발행 하지 못한 메시지 outbox 테이블에 조회해서 메시지 발행 하면 문제가 없을 것 같은데요. 하지만 다시 처음부터 설명하면 client 가 좋아요 등록 후 DB 서버가 죽어서 "좋아요" 관련 테이블 및 "outbox" 테이블에 insert 를 못했다고 가정 했을때 어떻게 대처 해야 하는지 역으로 질문 받았습니다. 일단 DB 서버가 죽었으면 빠르게 고객에게 에러 메시지를 전달과 동시에 담당 개발자에게 빠르게 전달 할 수 있도록 전달 해야 한다고 했습니다. (회사에서 slack 메신저 사용하면 메신저 통해 알림) 혹시 이것보다 더 좋은 방법이 있을까요? 재대로 대답하지 못해 찜찜해서 이렇게 선생님에게 질문 드리네요.
카프카 타임존은 다음과 같이 9시간 전인 시간인 데이터가 들어오고있습니다. 시스템 타임존은 다음과 같습니다. 동기화 방법을 좀 찾아봤는데 안되서 질문드립니다. kafka/config/server.properties log.message.timestamp.type=CreateTime KAFKA_JVM_PERFORMANCE_OPTS="-Duser.timezone=Asia/Seoul"
기동 로그 ====== [2025-01-18 01:45:25,945] ERROR Could not submit metrics to Confluent: version-check.confluent.io : Name or service not known ( io.confluent.support .metrics.utils.WebClient:112) [2025-01-18 01:45:25,945] ERROR Failed to submit metrics via secure endpoint, falling back to insecure endpoint ( io.confluent.support .metrics.submitters.ConfluentSubmitter:135) [2025-01-18 01:45:25,947] ERROR Could not submit metrics to Confluent: version-check.confluent.io ( io.confluent.support .metrics.utils.WebClient:112) [2025-01-18 01:45:25,947] ERROR Failed to submit metrics to Confluent via insecure endpoint= http://version-check.confluent.io/ksql/anon -- giving up ( io.confluent.support .metrics.submitters.ConfluentSubmitter:165) ======= 문제 해결 방법 ksql_start.sh 스크립트 변경 KSQL_OPTS="- Dconfluent.support .metrics.enable=false" $CONFLUENT_HOME/bin/ksql-server-start $CONFLUENT_HOME/etc/ksqldb/ ksql-server.properties 참고 자료 : https://github.com/Cyb3rWard0g/HELK/issues/377
강의 내용에 따르면 order-service1, order-service2 두 개의 인스턴스가 kafka-connect를 사용하기 위해 mariadb에 직접 연결을 맺는것으로 이해했습니다. 제가 궁금한 것은 단일 DB를 사용하는 경우에 kafka를 쓰는 이유입니다. 현 강의와 같이 단일 DB를 사용하는 경우라면 kafka를 사용하지 않고, RestTemplate이나 FeignClient와 같은 라이브러리를 사용해서 catalog-service와 통신하고, jpa를 통해 직접 DB에 데이터를 직접 삽입할 수 있을텐데 이 경우 트랜잭션을 잘 처리해준다면 데이터도 동기화 할 수 있다고 생각합니다. 다만, 여러 진입점 관리, 트랜잭션 처리 등 따로 처리해야할 부분이 많고 요청이 증가할 수록 kafka의 성능이 우수하기 때문에 kafka를 쓰는 것으로 이해했습니다. 제 생각에 틀린 부분이 있다면 말씀해주시면 감사하겠습니다!
confluent-6.1.0\bin\windows\kafka-run-class.bat 파일 안에 rem Classpath addition for release으로 검색하셔서 밑에 코드를 넣으시면 됩니다. rem Classpath addition for LSB style path if exist %BASE_DIR%\share\java\kafka\* ( call :concat %BASE_DIR%\share\java\kafka\* )
안녕하세요. 현재 좋아요 부분에서 락에 관련해서 강의를 듣고 있습니다. 궁금한 점은 실무에서는 어떻게 사용을 하시는지 궁금합니다. 왜냐하면 대부분 실무에서는 테이블 자체를 논리적 외래키로 전부 가져가는 경우를 많이 봤었습니다. 외주를 부탁한 외부 업체 또한 낙관적 락을 사용하는 케이스를 봤구요. 강사님께서 일하시는 곳에서는 락의 3가지 케이스를 다양하게 필요에 맞게 사용하는 건가요?!
안녕하세요. 열강해주셨던 강의 들으며 공부하다 질문이 있어 글 남깁니다. 스파크에 대한 설명에서 '그리고 이 리듀스가 네트워크를 타고 들어온 로컬에 떨어진 앞에 리듀스의 결과를 다시 또 로컬로 떨어뜨린다'는 설명이 있었는데, 이 설명이 어떤 경우가 있는지 감이 잘 안와서 질문드립니다. 리듀스가 네트워크를 타고 들어온다는 것이 어떤 상황을 말하는건가요..? 감사합니다.
안녕하세요, 질문 드립니다. /catalogs 조회하는 api 에서 catalogService.getAllCatalogs();에서 데이터는 디비에서 잘 들고 오는데 ModelMapper만 통과하면 모든 필드가 null로 return 되고 있습니다. 동일한 스팩의 user-service 에서 user 조회 api는 정상적으로 조회가 됩니다... 이유를 모르겠어서 납깁니다.. (created_at 필드는 추가를 하지 않았습니다. 이문제는 아닌 것 같아요)
게시글 구현까지 보고 질문드립니다! 지식공유자님의 깊이가 느껴지는 강의인 것 같습니다.. 구현 난이도(저점-고점)에 상관없이 쭉쭉 구현해나가시는게 대단하십니다 조그맣게 몇가지 질문이 있습니다 강의와 관련된 질문과 그렇지 않은 질문이 섞여있는점 양해부탁드립니다..! 테스트코드 @Test를 만드시고, 따로 밑에 메서드를 추가하시는건 반복호출을 위해서인게 맞을까요!? 그렇다면 JUnit의 @ParameterizedTest, @CsvSource 이거를 활용하면 좋을것같은데 사용 안하신 이유나 실무에서 요거를 잘 안쓰시는지 궁금합니다! 저도 WebClient나 RestClient로 api테스트를 하긴 하는데요! 그 API Docs 만들어주는 RestDocs는 테스트객체 : RestTemplate, WebTestClient, RestClient 와 테스트방법 (WebMvcTest, SpringBootTest)과 상관없이 플러그인만 추가하면 api docs가 만들어지는걸까요? 지식공유자님은 현업에서 Swagger, RestDocs중에 어떤걸 쓰시는지 궁금합니다 TestContainer 등의 방법은 사용하지 않으시는지!? JPA & Spring Controller에서 @PageableDefault()로 받는 방법은 주로 사용되지 않는 것일까요..? DTO로 반환해서 Response를 내려주시긴 하시지만 ResponseBody나 ResponseEntity 등으로 감싸서 내려주시지는 않으시는데, 이유가 있으신지요!? 강의에서처럼 커버링인덱스와 무한스크롤을 구현하려면 nativeQuery를 사용하지 않고 JPA와Hibernate로 해결하는 방법(JQPL/QueryDsl/Creteria)이나 Raw Library(Spring Data JDBC/JdbcTemplate)으로 해결하는 방법은 없는걸까요? Next 제가 아직 모든 강의를 다 본것은 아니지만.. 챕터를 보면 각각 다른 모듈끼리 Join을 하는 경우는 없는 것 같아보입니다..! 혹시 나중에 또 강의를 내신다면 샤드키와 DB 이중화의 fail over에 대한 실전강의, 다른 DB 스키마, 모듈을 사용하는 상황에 하나의 View에 다건의 Join이 들어갈 경우 설계 방법..이나 DDD, 클린 아키텍처에 대해서도 다룰 에정이 있으신지 궁금합니다! 마지막 덧붙임 정말 잘 보고 있습니다!! 미취업자(취준생)에 비해서 중-고급 경력직은 그렇게 많지 않아서 강의 수요가 적기도 하고 각자 나름의 위치에서 배운 self best practice가 있어서 그들만의 생각이나 태클이 들어올 수 있을 것 같은데.. 이런저런 이유에도 불구하고 이런 귀한 중고급 강의를 내주셔서 정말 감사합니다! 강의 끝까지 수강하고 궁금한점 생기면 종종 질문 올리겠습니다
Primary Key 생성 전략에서 많은 것들을 알기 쉽게 설명해주셔서 감사합니다 🙂 제가 개인적으로 생각하는 가장 베스트 방법 2가지만 설명 드리도록 하겠습니다. Primary Key 값을 Snowflake 알고리즘으로 해결 장점 인덱스 탐색에 있어서 정렬된 순서로 차례대로 저장 하다보니 범위 검색에 있어서 장점이 될 수 있다. 단점 Secondary Index 생성시 각각 Leaf Node 에 PK 값 (포인터) 를 가지고 있다보니 아무래도 생성된 Snowflake 알고리즘 값은 길이가 길어서 인덱스 저장용량이 증가 될 수 있다. PK 생성 전략을 Auto_Increment 로 하고 샤딩키(article_id) 값을 Snowflake 알고리즘으로 설정 해서 저장 한다. (단 client 에게는 PK 값 대신 article_id 으로 노출 한다.) 장점 Secondary Index 생성시 각각 Leaf Node 에 PK 값 (포인터) 값이 용량이 작아 인덱스 저장 용량 부담이 없다. 인덱스 탐색에 있어서 정렬된 순서로 차례대로 저장 하다보니 범위 검색에 있어서 장점이 될 수 있다. 단점 client 으로 부터 요청시 샤딩키(article_id) 값으로 데이터 조회를 해야 하기 떄문에 Secondary Index -> Clustered_Index 까지 두번 인덱스 트리를 탐색 해야 하는 단점이 있다. 일단 이렇게 각각의 장단점을 설명 드렸습니다. 여기서 제가 궁금한것은 실무에서 데이터베이스 테이블 설계시 이 두가지 방법 중 하나를 선택 하는데 있어서 각각 어떤 경우에 적합한지 판단 내리기가 힘든 부분이 있습니다. 각각 케이스 마다 장단점을 알고 있지만 아무래도 자세하게 수치화 된 지표 가 없어 선택하는데 있어서 어려움이 있는데요. 선생님 경우는 실무에서 이 두가지 중 선택시 어떤 경우에 적절하게 판단 하시는지 노하우를 알려주시면 정말 감사 하겠습니다 🙂
안녕하세요 강의 잘 듣고 있습니다. 현재 게시글 조회수 부분 보고있는데요 헷갈리는게 있습니다. 멀티 모듈 방식 이라 aricle과 view 모듈이 나눠져 있는데요 현재는 게시글 조회 api와 게시글 조회수 증가 api가 나뉘어져 있는거같은데요 프론트에서 게시글 조회 시 이 2개의 api를 사용하는 걸까요? 게시글 조회 api에서 게시글 조회 -> redis 조회수 1 증가 이렇게 하나의 api가 아니라 실무에서도 api를 나누는 방식으로 진행하는걸까요?