Skip to content

Feature/#92 조회수, 풀이수 통계 업데이트 공통 서비스 구현 #96

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

Merged
merged 4 commits into from
Mar 23, 2025

Conversation

sejoon00
Copy link
Contributor

@sejoon00 sejoon00 commented Mar 16, 2025

💡 Issue

📸 Screenshot

image

📄 Description

  • 문항, 새끼문항, 세트에 대한 조회수, 풀이수 통계를 위한 도메인 설계를 진행하였습니다.

고민사항

  • 각 도메인에 대해서 조회수, 풀이수를 업데이트를 하는 행위는 모두 같았습니다.
  • 업데이트를 해야하는 필드도 같았고 수행하는 로직의 규칙도 같았습니다.
  • 공통 로직임에도 불구하고 각 통계 도메인별로 똑같은 행위를 하는 서비스 구현체가 각각 생기는 것은 유지보수 측면에서 좋아보이지 않았습니다.
    • 예시) ProblemStatisticUpdateService, ChildProblemStatisticUpdateService, ProblemSetStatisticUpdateService
  • 하나의 서비스에서 여러 instance 종류에 상관없이 공통 로직을 수행시키기 위해 아래와 같은 2가지 구조를 고민했습니다.

1. 상속

image

  • 다형성을 구현하기 위해 상속을 고려했으나, DB의 테이블 구조가 상속을 지원하지 않고 이를 하나의 테이블로 구현하거나 공통 부분과 하위 부분을 두 개로 나누어 type을 통해 연결하는 방식이 있었습니다.
  • 하지만 이러한 방식은 확장성에 제약이 있을 것 같았고, 조회수와 풀이수 같은 공통적인 통계가 문항, 새끼문항, 세트 등 다양한 도메인의 내용이 통계라는 한 공통 상위 테이블에 섞여 저장되면 조회 성능에도 문제가 될 수 있었습니다.

2. 합성 (최종 선택)

image

  • 각 도메인이 CountStatistic를 내부로 가지고 있는 합성을 선택하고 StatisticCounter 인터페이스를 구현하게하여 다형성을 구현했습니다.
  • 통계 서비스는 PROBLEM, PROBLEM_SET, CHILD_PROBLEM으로 엔티티를 구분하고
  • VIEW, SUBMIT으로 필드를 구분하여 업데이트합니다.

💬 To Reviewers

  • 이벤트 발행은 추후 구현하겠습니다.

🔗 Reference

@sejoon00 sejoon00 added the Type: Feature [이슈 목적] 새로운 기능 추가 label Mar 16, 2025
@sejoon00 sejoon00 self-assigned this Mar 16, 2025
@seokbeom00
Copy link
Member

좋은 선택인것 같습니다. 사용자 통계쪽도 이벤트 구현할 때 합성 구조를 고려해보겠습니다. 고생하셨습니다!

@sejoon00 sejoon00 merged commit 57c2327 into develop Mar 23, 2025
1 check passed
@sejoon00 sejoon00 deleted the feature/#92 branch March 23, 2025 14:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: Feature [이슈 목적] 새로운 기능 추가
Projects
None yet
Development

Successfully merging this pull request may close these issues.

✨ 통계 도메인 설계
2 participants