강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

윤중진님의 프로필 이미지
윤중진

작성한 질문수

통계성 엔티티 구조

작성

·

267

0

안녕하세요. 제가 현재 상황은 다음과 같습니다.

엔티티 구성


TaskEntity: 업무(수입) 엔티티로서,

  • 업무(수입) 날짜

  • 업무(수입) 금액

  • 업무 카테고리

  • UserEntity와 N:1 매핑

  • CategoryEntity와 1:1 매핑

SpendEntity: 비용(또는 환불) 엔티티로서,

  • 비용(또는 환불) 발생 날짜

  • 비용(또는 환불) 금액

  • 비용인지 환불인지

  • UserEntity와 N:1 매핑

  • CategoryEntity와 1:1 매핑

CategoryEntity: 카테고리 엔티티로서,

  • 카테고리 이름

  • UserEntity와 N:1 매핑

현재 이런 상황입니다.

제가 하고 싶은 통계 로직은 다음과 같습니다.

  1. 최근 1년간 월 별 수입 개수와 총 금액

  2. 최근 1년간 월 별 비용 개수와 총 금액

  3. 최근 1년간 월 별 환불 개수와 총 금액

  4. 현재 시간 기준 이번 달의 카테고리 별 수입 정보

    1. 카테고리 별 수입 건 수

    2. 카테고리 별 수입 총 금액

  5. 올해 총 순수익(올해 업무 금액 - (올해 비용 금액 + 올해 환불 금액))

  6. 작년 총 순수익(작년 업무 금액 - (작년 비용 금액 + 작년 환불 금액))

 

제가 고민하고 있는 부분은 다음과 같습니다.

  1. StatisticsEntity의 이름으로 엔티티를 만든다

    1. 해당 월(Integer month)

    2. 수입 개수(Long incomeCount)

    3. 수입 양(Long imcomeAmount)

    4. 비용 개수(Long spendCount)

    5. 비용 양(Long spendAmount)

    6. 환불 개수(Long refundCount)

    7. 환불 양(Long refundAmount)

    8. 가장 수입 금액이 높은 카테고리(..?..)

    9. 카테고리 별 정보(카테고리 이름과 카테고리 별 금액, 개수) (..?..)

이 부분에서 가장 수입이 높은 카테고리와, 카테고리 별 정보 필드를 어떻게 구성해야 할 지(연관 관계 등) 막막합니다.

  1. StatisticsEntity의 나머지 필드를 채워 넣을 때 쿼리를 어떻게 날려야 할 지 애매하다.

제가 생각한 방법으로는, TaskRepository와 SpendRepository에서 필요한 부분을 최근 1년, group by month로 find해서 StatisticsEntity에 집어넣는다.

이 부분이 효율적인 건지, 다른 방법이 있는지 궁금합니다.

 

댓글 달아주시거나, 오픈 채팅 방문 해주시면 감사하겠습니다.

https://open.kakao.com/o/sqXBWEjf

답변 1

0

안녕하세요, 인프런 AI 인턴이에요.

해당 프로젝트에서는 StatisticsEntity를 만들어 월별 수입, 비용, 환불 등의 정보를 담을 예정으로 보입니다. StatisticsEntity는 월, 수입 개수, 수입 금액, 비용 개수, 비용 금액, 환불 개수, 환불 금액 필드를 가지는 것으로 이해했습니다.

가장 수입이 높은 카테고리와 카테고리 별 정보 필드를 구성하려면, TaskEntity에 있는 업무 카테고리를 기준으로 grouping해서 해당 카테고리의 수입을 계산해야 합니다. 이렇게 계산한 데이터를 바탕으로 가장 수입이 높은 카테고리와 카테고리 별 정보 필드를 채워넣을 수 있습니다.

TaskRepository와 SpendRepository에서 필요한 데이터를 최근 1년, group by month 기준으로 조회해서 StatisticsEntity에 저장하는 방법은 효율적인 방법입니다. 그러나 해당 방법보다 더 효율적인 방법이 있는지, 최적화할 부분이 있는지는 프로젝트 전체 구조와 상황에 따라 다르므로 정확한 답변은 어렵습니다.

더 자세한 상담이 필요하시다면 오픈 채팅 방문을 권장합니다. 감사합니다.

윤중진님의 프로필 이미지
윤중진

작성한 질문수

질문하기