cd /home/ec2-user/downloads wget https://downloads.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz 해당 폴더에 압축파일이 없다고 떠서 새로 다운받았습니다!
100$ 지원해주는 free tier로 계정을 만들고 Support 플랜이 Basic으로 되어있습니다. 인스턴스 유형을 선택할 때 기본적으로 t3.micro로 선택이 되어있고 t2.micro를 사용하려면 무료 요금제에선 사용할 수 없고 계정 요금제 업그레이드를 하라고 하는데 요금제를 업그레이드 하고 따라가면 될까요?
강사님 안녕하세요. 게시판 조회시 페이징으로 처리할때 조회수를 오름차순, 내림차순 정렬하는 기능이 있다면 현재 강의 설계 기준으로 어떻게 구현할 수 있을까요? 제가 생각한 방법은 다음과 같습니다. 사전 조건: view에서 조회수 데이터는 redis를 바라봄 개수 백업 적용 / 단위는 10 페이징 쿼리에서 RDB 백업 테이블의 조회수 기준으로 정렬 코드 레벨에서 redis 데이터 기준으로 한번 더 정렬 문제는, 2번에서 한 페이지의 데이터만 정렬이 되기 대문에 페이지를 넘어갈때 정렬이 깨지는 현상이 발생합니다 ㅠ 데이터 전체를 메모리에 한번에 조회하지 않고 할 수 있는 방법이 있을까요?
안녕하세요 ! 선생님 코드를 보면 댓글 서비스에서 댓글을 생성할때 request로 들어온 articleId 나 writerId에 대해서 실제로 데이터 베이스에 있는지 검증하는 부분이 없는데, 이렇게 구현을 하면 확실히 테스트 코드를 짤때 실제 데이터 베이스에 저장된 게시글을 넣어주지 않아서 편한것 같습니다. 혹시 실제 현업에서 코드를 짤때도 request 로 넘어온 데이터를 따로 검증을 하지 않아도 되는 건가요? @Transactional public CommentResponse create(CommentCreateRequest request) { Comment parent = findParent(request); Comment comment = commentRepository.save( Comment.create( snowflake.nextId(), request.getContent(), parent == null ? null : parent.getCommentId(), request.getArticleId(), request.getWriterId() ) ); return CommentResponse.from(comment); }
답변 감사합니다. 답변을 보다 보니 또 새로운 질문이 생겨서 다시 문의 드립니다. debezium connector를 새로 만들어서 빈로그를 처음부터 다시 읽어 진행한다고 하면 토픽을 같은거를 써도 되나요? 예를 들어 a connector 만들면서 a topic 진행했는데 a connector new 로 만들면서 기존에 있던 a topic에 넣어 라고 해도 에러가 안 나는지 궁금합니다. (이렇게 하는 이유는 굳이 jdbc connector를 새로 만들고 싶지 않아서 입니다) 그리고 실제 해보고 있는데 생각보니까 선생님께서는 offset을 리셋하고 커넥터를 재기동하고 데이터를 다시 해당 디렉토리에 넣은 거로 확인됩니다. 이와 연관되어 mysql debezium의 경우 binlog의 특정 포지션으로 지정했는데 해당 포지션 이후부터 다시 토픽에 넣는 게 아니라 새로 들어오는 로그에 대해서만 토픽에 넣는 것으로 확인됩니다. 기존에 있던 로그 내용에 대해서는 따로 진행을 안 하는 거 같아서 왜 그럴까요? 커넥터 snapshot.mode 옵션은 no_data 나 initial 모드나 상관없이 offset reset이 가능한 걸까요?
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요 좋은 강의 잘 보고있습니다. 이와 같이 마이크로 서비스로 프로젝트가 구성되면, 유저 인증과 관련된 부분은 어떻게 처리되는지 궁금합니다. 일단 스스로 생각해본 바로는, 게시글/댓글 쓰기, 좋아요 API는 로그인 한 유저만 가능하다고 하면, 각각의 서비스에서 클라이언트의 요청을 받았을 때 해당 요청을 유저 API를 호출하여 인증을 하는 방식이 있을 것 같은데 이 방법은 각 서비스들이 유저 서비스를 알고 있어야 한다는 단점이 있을 것 같습니다.. 위와 같은 상황에서의 실무에서 모범 사례나 정형화된 방법이 있을까요?
안녕하세요 실무에서 Kafka 컨슈머 애플리케이션을 구현할 때 폴링을 위해 while (true) 루프를 사용하나요? 그렇다고 한다면 실제 서비스 운영에 적합할 수 있지만, 테스트 측면에서는 다소 까다롭게 느껴집니다. 실제 현업에서 무한히 폴링하는 컨슈머를 어떻게 구현하고, 또 어떤 방식으로 테스트하는지 궁금합니다. 혹시 일반적으로 사용하는 테스트 전략이나 구조적인 팁이 있다면 공유해주실 수 있을까요?
안녕하세요. TransactionMessage 부분에서 time을 기본값 LocalDateTime.now() 로 설정하실 때 val -> var로 변경하시는 것을 봤습니다. 실무에서 코틀린에서 기본값을 선언할때 관례적으로 var로 하는지 궁금합니다. (코틀린으로 서버를 개발해본적이 없어서 기초적인 질문 드려서 죄송합니다..) 감사합니다.
안녕하세요. KafkaProducer future.whenComplete에서 throw 하는 코드를 보고 질문 드립니다. 코드를 보니까 CompletableFuture로 구현되어 있던데 transactional.run 안에서 예외를 잡을 수가 있는지 궁금합니다. 코드만 보기로는 whenComplete가 비동기로 동작해서 저기서 예외를 던진다고 누가 받는지 잘 모르겠습니다. 제가 스프링 비동기를 구현해보지 않아서 질문드립니다. 감사합니다.
안녕하세요. 궁금한 점이 있어 질문드립니다. 코드를 보면 @Component private class Advice: Runner ... 이렇게 내부 클래스가 Private으로 되어 있는데 private으로 선언된 클래스도 component scan 대상이 되나요? 만약 1번에서 안된다면 인자로 받은 Runner가 프록시 빈으로 생성이 안될 것 같은데, 그렇다면 프록시가 제대로 동작하는게 맞는지 궁금합니다. private val advice : Runner = Advice() 코드를 보면 만약 빈으로 생성된 인자를 넣지 않는다면 기본 Advice() 를 생성해서 넣는다고 보이는데 이렇게 된다면 Advice 프록시가 자동으로 생성되지 않는다고 생각되고 그렇다면 aop가 작동되지 않을것 같은데 맞는지 궁금합니다.(그래서 기본값을 넣지 않는게 맞지 않나 궁금합니다.) 감사합니다.
학습 관련 질문을 최대한 상세히 남겨주세요! 고민 과정도 같이 나열해주셔도 좋습니다. 먼저 유사한 질문이 있었는지 검색해보세요. 안녕하세요? 강의 계속 잘 듣고 잇습니다. 이제거의 막바지에 이르렀네요 ㅎㅎ.. 게시글 목록조회 최적화와 관련하여 질문드리고자 합니다. 제가 처음에 이해한 바는 최신의 천개의 데이터를 레디스에 적재하고, 그 외의 데이터는 직접 articleServcie를 통해 가져오자 라고 이해를 했었습니다.(hot, cold Data) 그런데 이후의 결과적으로는 아래 두가지 캐시가 존재하게 되었더라구요 1.zset을 활용한 인기글 데이터 관리(목록 조회 최적화) 2.실제 데이터 queryModel(단건 조회 최적화) 이런 구조에서는 zset에서 천개의 데이터를 관리하긴 하지만 실제로 queryModel에는 데이터가 있을지 없을지 확신을 할 수 없는 상황이라는 생각이 듭니다. 즉 실제로 zset에 있는 데이터라 해도 하루가 지났다면 queryModel이 있을지 없을지 모르는 상황이라고 인지했습니다. 질문1) 제가 이해한바가 맞을까요? 맞다면 이 구조를 선택하신 이유가 조금 궁급합니다. 두 캐시를 합쳐서, queryModel자체를 하나의 캐시에서 천개의 데이터만 관리하면 되지않나? 라는 의문이 생겨가지구요 어차피 천개의 데이터만 관리한다면 메모리를 그렇게 크게 차지 하지 않을 것 같기도 하구요 질문2) 지금과 같은 구조에서는 zset을 활용한 article_id가 그렇게 큰 의미가 있는 부분인가? 라는 생각이 듭니다. - 어차피 최신순(1000개이하)의 데이터에 대해서 id를 추출하는거면 DB에서 offset을 세어도 그렇게 안느린 거 아닌가? 하는 생각이 들구요 - zset에 포함되어 있더라도, 실제 데이터(QueryModel)가 있는지 없는지 확답을 할 수 없는 상황이니 큰 의미가 있는건가? 하는 의문이듭니다. 차라리 최신 천개의 데이터에 대해서는 조회에 필요한 모든 데이터를 캐싱해둔다면 큰 의미가 있을거라고 생각이 드는데, 지금의 경우에 대해서는 잘 모르겠네요 ㅠㅠ -결론적으로, 현재 회사에서 RDB를 주로 쓰고 있는 주니어 개발자 입장에서 관련해서 레디스를 도입해본다면.. 아키텍처 복잡도가 올라가는 부분에 비해 엄청 크게 이득이 되는 부분이 있나?? 라는 생각이 많이 들었습니다. 질문3)추가로, 이거는 좀 다른 부분이긴 한데 read-service에서 like, unlike등 업데이트 이벤트 핸들러의 경우 동시요청에 대해서 lostupdate처럼 동작하는 부분이 있을 것 같은데 이부분은 배제하신건지, 혹은 제가 잘못생각하고 있는건지 궁금합니다. 양질의 강의 정말 감사드립니다
kafka-console-producer는 여전히 잘 동작합니다. 그런데 kafka-avro-console-producer로 메시지를 발행하면, 아무런 에러메시지 없어, 그냥 메시지 발행이 안 됩니다. schema-registry에는 잘 반영이 되는데, 토픽도 안 생기고, 미리 토픽을 만들어 발행해도 아무 반응이 없습니다. kafka-avro-console-producer와 kafka-broker간의 문제인 것 같은데,, 가령 kafka-console-producer, kafka-console-consumer, kafka-avro-console-consumer는 에러가 나든 안 나든 broker랑 상호작용을 하는데, 유독 kafka-avro-console-producer만 문제네요.. 혹시 이런 케이스를 겪어보셨을까요?
안녕하세요, Consumer 서버가 2대라고 가정해보겠습니다. @KafkaListener의 concurrency 값을 설정을 2으로 설정하였다고 가정한다면, 2개의 스레드가 생성이돼서 병렬적으로 파티션을 처리할텐데 위의 설정 없이 그냥 @KafkaListener가 붙은 메서드에 @Async를 통해서 ThreadPool의 크기를 2으로 설정하였다면, 동일하게 동작하게 되는걸까요? 스프링 MVC의 경우 톰캣 기본 설정이 200 정도의 스레드풀을 할당해서 병렬적으로 처리하는 것으로 알고 있는데, Async대신 KafkaListener의 concurrency 설정을 200으로 하는 것이 맞을까요?
안녕하세요. 보통 RestTemplate, WebClient, FeignClient 등으로 외부 요청 등을 시도할 경우에는 timeout 설정을 중요하게 생각하는데, 카프카에서는 Connection Timeout, Read Timeout 등과 같은 셋팅 값을 몇 초로 설정해야할까요? 그리고 몇 초에 해당하는 값을 정하는 기준이 어떻게 될까요?