Skip to content

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
Contributor

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

@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.

✨ 통계 도메인 설계

3 participants