제가 강의에서 이해한 바로는 example/1 과 같은 단일 리턴값에는 캐쉬를 적용해서 db의 부하를 줄일 수 있다고 생각했습니다. 하지만, search?title=딩코&tag=백엔드…” 와 같은 복합 검색 조건을 기반으로, 백만 건 이상의 데이터 중에서 동적 쿼리를 사용해 10개씩 페이지네이션하여 가져오고 있습니다. 이 경우에는 쿼리마다 값이 달라지니 미리 레디스에 값을 반영할 수도 없는 상황입니다. 그리고 DB에서는 10개의 값을 리턴시키는데, 이런 상황에서는 캐시를 사용할 수 없는 건가요? 반드시 인덱스를 통해서만 성능을 확보해야 하나요?
강의를 보고 제 프로젝트에도 적용할려고 그대로 따라 쳤음미다... 로컬에서는 이렇게 프로메테우스에서 검색이 됩니다. 그대로 ec2서버에서도 적용할려고 했는데 이렇게 검색이 되지 않습니다... 설정 차이라고는 로컬에서의 prometheus.yml ec2에서의 prometheus.yml(빨간줄은 무시) 프로메테우스랑 ec2서버랑 연결은 잘되는 거 같아요. executor_thread 같은 쓰레드들은 잘 가져옵니다. 하지만 제가 원하는 쿼리 집계 함수들은 로컬에서는 잘되고 ec2서버에서는 가져올 수가 없는데 뭐가 문제일까요...?
안녕하세요 선생님 강의 정말 잘들었습니다. 제가 이 강의를 듣고 게시판을 직접 만드는 것이 목표였는데, 프론트 코드를 만드는데 어려움을 겪고 있습니다. 혹시 뼈대만이라도 프론트엔드 코드를 제공해 주실 수 있을까요 ? 무리한 부탁인 것을 알고 있지만, 간절하여 질문글로 남깁니다
안녕하세요 쿠케님. 우선 좋은 강의 감사합니다. 다름이 아니라 댓글 무한 depth - 테이블&구현 설계에서 unique index를 작성하는 부분이 나오는데 unique index 대신 index로 구현하고 table 생성 시 path에 unique 제약을 걸어도 효과가 같을지 궁금합니다.
안녕하세요 선생님 ! 선생님 코드로 구현을 완료하고 제가 커스텀 해보고 있는 중에 고민이 있어 질문글 남깁니다. 추천 수가 특정 개수 이상일때 hot article이 되고, 매일 갱신하는 것이 아닌, 한번 hot article이 되면 계속해서 hot article 게시판에 게시하고 싶습니다. 이럴 때 hot article을 데이터베이스에 저장하는 것이 좋을까요 아니면 redis에 저장하는 것이 좋을까요 ? 선생님의 의견이 궁금하여 질문 남깁니다.
안녕하세요 선생님 현재 애플리케이션을 MSA에서 모놀리식으로 바꾸고 있습니다. MSA 에서는 hot-article 애플리케이션에서는 각각의 서비스들과 통신하지 않고 데이터를 저장하기 위해 ArticleCommentCountRepository, ArticleViewCountRepository, ArticleLikeCountRepository 를 따로 만든 것으로 이해했습니다 . 모놀리식에서는 이 3개의 Count Repository를 따로 만들지 않고 각각의 서비스에 있는 Count Repository 에서 가져오는 것이 더 좋을까요, 아니면 아니면 MSA hot-article 패키지에 따로 count repository를 만드는 것이 좋을까요 .. 선생님의 의견이 궁금합니다 .
@Async @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) public void handleEventJoinCompleted(EventJoinCompletedEvent event) { try { kakaoTalkMessageApi.sendEventJoinMessage( event.getPhoneNumber(), event.getEventName() ); } catch (Exception e) { log.error("알림 발송 실패. eventId={}, eventName={}", event.getEventId(), event.getEventName(), e); } } 이 로직은 비동기적으로 이벤트를 처리하는 알림서비스 로직입니다. @TransactionalEventListner(Aftercommit)를 사용하면 메인 로직이 commit 된 이후에 해당 이벤트가 실행하는 걸로 알고있는데 @Asnyc를 붙히지 않았더라도 메인 로직에서 끝마치고 해당 이벤트를 실행하니깐 똑같은 결과가 나오지 않나요? 차이가 궁금합니다!
main 은 id를 가지고 있고, 이를 복제한 replica 들은 main 의 아이디로 그룹화되어 있음 그런데, main 이 어떠한 일로 인해(삭제 등) 새롭게 만들어지면 새로운 id 를 가지게 됨 이때 구 id 를 가지고 그룹화되어 있는 replica 들은 현재의 main 과 id 가 다르니 전체 동기화가 일어남 그러면, [구 id 를 가지고 그룹화되어 있는 replica 들] 은 계속 구버전 id 를 가지게 되는건가요? 아니면, 동기화 후 새로운 id 로 다시 그룹화가 되는 걸까요? 추가로, 강의 초반에 위 내용 관련해서 '카프카와 비슷하다'라는 설명이 나왔는데, 카프카에 대해 잘 모르는 입장에서는 조금 혼란스러울 수 있을 것 같습니다. 가능하시다면 추후 강의를 개선하실 계획이 있으실 경우 이 부분을 조금 더 자세히 설명해주시면 좋을 것 같습니다.
안녕하세요 강사님! Look-Aside 패턴과 Thundering Herd 관련 강의(3:37~) 내용을 듣다가 궁금한 점이 있어 질문드립니다. 캐시-어사이드 패턴에서 캐시 미스가 발생했을 때, 강의 중 보여주신 그림에서는 ‘ 캐시가 직접 DB를 조회하고 데이터를 업데이트한 뒤 서버에 응답까지 전달하는 구조 ’ 처럼 표현해주셔서 다소 혼란스럽습니다. 제가 알고 있기로는 캐시-어사이드 패턴은 캐시 미스 발생 시 애플리케이션(서버)이 직접 DB를 조회하고, 조회한 데이터를 캐시에 갱신(PUT)한 뒤 클라이언트에 응답하는 방식으로 동작하는 것으로 알고 있습니다. 만약 MSA 환경에서 캐시 서버가 별도로 구성되어 있고, 데이터를 API 통신 형태로 제공하는 구조라면 그림으로 그리시면서 설명해주신 부분이 어느 정도 이해가 되지만, 해당 파트가 MSA 를 전제하고 설명하는 맥락은 아닌 것 같아서요. 혹시 이 부분에 대해 제가 잘못 이해한 부분이 있다면 피드백 주시면 감사하겠습니다!
안녕하세요 강사님 ! 강의 잘듣고 있습니다. 강의를 거의 다들었는데, Monolithic Architecture로 마이그레이션 해보고 싶다는 생각이 들어 해보려고 합니다. 각각의 모듈을 하나의 어플리케이션의 패키지로 만들기만 하면 될까요 ? 어느 부분을 신경쓰면 좋을지 간단하게라도 조언해주시면 정말 감사드리겠습니다 .!! 이 강의를 듣기를 진심으로 잘했다는 생각이 듭니다. 좋은 강의 해주셔서 감사드리고 다음 강의도 기대하겠습니다 !!
1. 현재 학습 진도 몇 챕터/몇 강을 수강 중이신가요? 2주차 성능 테스트 챕터까지 수강했습니다. 제목처럼 강의 주요 내용은 아니지만 궁금한 점이 생겨 글 작성하였습니다. 질문에 악의가 없는데, 쓰다보니 공격적인 말투로 느껴지네요... 죄송합니다. 공격이 아니고 제가 공부한 부분과 달라서 어떤 게 맞는지를 여쭙고자 작성한 질문입니다. 작성해주신 포트폴리오 코드를 보면, A Service에서 A Repository, B Repository, C Repository 등을 주입받아 사용하셨는데 이게 올바른 구조인가요?? 상황: 현재 저는 계층형 폴더 구조(Controller, Service, Repository 등)가 아닌 도메인형 폴더 구조(User, Post, Tag 등)를 가져가고 있습니다. 계층형과 도메인형 모두 자신의 도메인이 아닌 다른 도메인의 다른 레이어 파일을 주입받기 보다는 Service는 Service끼리 주입을 받는 게 결합도를 낮추고 리팩토링하기 편한 방향이라고 생각했습니다. 이러다보니 Controller에서 호출하는 함수는 DTO로 통신을 하고, Service끼리 사용하는 함수는 Entity로 통신을 하게 되었습니다. 주석으로 "Interal method"라고 명시를 하였지만, 응답 형식만 다를 뿐 같은 일을 하는 함수도 많아져서 이게 맞는건가 싶은 고민이 있었습니다. 애초에 Repository를 쓰는 것도 여러 파일에서 쉽게 불러쓰기 위해서라는 말도 봤던 것 같아서 뭐가 맞는지 정답이 궁금합니다. TPS 기준이 궁금합니다. 현재 쿠폰 시스템 비슷한 프로젝트를 하고 있는데, "우리 서비스의 TPS가 몇이다"라고 할 때는 가장 주요한 로직 기준으로 측정한 결과일까요? 아니면 모든 API 중 가장 낮은 TPS가 기준이 될까요? 또한 TPS 300이 되기 위해서, 400이 되기 위해서 이런 식으로 말씀해주셨는데, Insert 또는 Update 작업이 포함된 경우 어느정도 TPS가 나오면 적지 않은 수준일까요? 감사합니다.
안녕하세요 Transactional Outbox 모듈 적용 부분을 듣던중에 차이가 발생해서 질문드립니다. 강의에서는 이제 각 나눠진 기능마다 XXXAplication 클래스에 EntityScan과 EnableJpaRRepositories 애노테이션을 달아주는것만으로도 다른패키지에있는 outboxEventPublisher를 사용할 수 있는데 저는 인식을 못합니다. application클래스에 @componentScan(...) 까지 달아주고나서야 비로서 인식이 되기 시작하는데 혹시 뭐가 문제고 무슨 차이가 있는걸까요 ... 찾아봤는데 잘 안보입니다 ㅠㅠ
안녕하세요 ! 좋은 강의 해주셔서 감사합니다. 섹션 4의 댓글 수 구현 강의 3분 39초 경에서 질문 있습니다 . 선생님의 코드에서는 댓글을 물리적 삭제할때만 댓글 수를 decrease를 통해 줄여주고 있는데, 논리적 삭제 시에도 count를 줄여주는 것이 맞다고 생각해서 질문글 남깁니다. 왜 물리적 삭제 시에만 댓글 수를 decrease 하시는 건가요 ?