Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

리뷰 수정 #15

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open

리뷰 수정 #15

wants to merge 5 commits into from

Conversation

Com-Sun
Copy link
Collaborator

@Com-Sun Com-Sun commented Sep 15, 2024

  • fix: 인메모리 큐 사용하는 로직 생성자로 이관
  • fix: 조회수 영속화 로직 변경
    • 기존: 스케줄러를 사용해 주기적으로 모든 게시글 업데이트
    • 수정: 주기적으로 업데이트 커맨드 병합 -> 조회 이벤트가 발생한 게시글만 배치 업데이트

Comment

뭔가 고민이 많았던 PR 이었습니다.
Write back 전략 자체는 괜찮은것 같은데, 결국 레디스 데이터를 mysql에 다시 쓰는 과정을 어떻게 할지가 관건이었네요!
다 구현하고보니.. 커맨드를 모아서 짧은 간격으로 배치 업데이트를 하는게 뭔가 괜찮은 방법같기도.. 하네요? ㅎㅎㅎ

배치 save를 위해 Jpa Repository의 save()를 사용하지 않고, entitymanager를 사용했는데요~
0.1초에 한 번씩 배치가 돌아간다고 생각하니 너무 잦은것 같기도 하고..
또 어떻게 보면 겨우 1초에 10번 WRITE하는 것으로 조회수 저장을 최적화 하는거니 괜찮은 것 같기도 하고..
이 부분에 대해서도 의견 주시면 감사드리겠습니다 :)

@Com-Sun Com-Sun self-assigned this Sep 15, 2024
var event = queue.take();
List<UpdateViewCountCommand> commands = new ArrayList<>();
ViewPostEvent event;
while ((event = queue.poll()) != null) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

queue가 계속 차 있는 경우에는 무한 루프에 빠지게 될 것 같네요.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인해주셔서 감사합니다.
Threshold를 설정하도록 변경했습니다 :)

@PostConstruct
public void init() {
executorService.submit(
executorService.scheduleWithFixedDelay(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

executorService가 로직을 제대로 실행한다는 것은 어떻게 테스트 할 수 있을까요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

말씀해주신대로, 비동기 프로세스 생성에 대한 부분과, 비즈니스 로직 처리에대한 부분을 분리하여 각각 테스트하도록 수정했습니다.
감사합니다 :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants