Skip to content

[Refactor/#239] 지표 메타데이터 Registry 중앙화 및 지표 포맷 통합 - #258

Merged
Seojegyeong merged 13 commits into
developfrom
refactor/#239
Jun 23, 2026
Merged

[Refactor/#239] 지표 메타데이터 Registry 중앙화 및 지표 포맷 통합#258
Seojegyeong merged 13 commits into
developfrom
refactor/#239

Conversation

@Seojegyeong

@Seojegyeong Seojegyeong commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

🚨 관련 이슈

#239

✨ 변경사항

  • 🐞 BugFix Something isn't working
  • 💻 CrossBrowsing Browser compatibility
  • 🌏 Deploy Deploy
  • 🎨 Design Markup & styling
  • 📃 Docs Documentation writing and editing (README.md, etc.)
  • ✨ Feature Feature
  • 🔨 Refactor Code refactoring
  • ⚙️ Setting Development environment setup
  • ✅ Test Test related (storybook, jest, etc.)

✏️ 작업 내용

  1. 핵심 아키텍처 - metricRegistry 도입

    • src/utils/dashboard/metricRegistry.ts
    • clicks, impressions, conversion, roas, spend, ctr, cpa, revenue, adSpend 등 지표별 label / format / formatDelta 정의
    • API 필드(clicks, clickChangeRate 등) ↔ Registry 키 매핑
    • KPI 카드용 헬퍼 (getKpiMetric, getMetricKpiTitle)
    • 차트 전용 포맷 (formatCountChartAxis, formatCountChartTooltip) 포함
    • 포맷 규약 정립
      - 정수 카운트 → toLocaleString
      - 비율/퍼센트 → toFixed(2)%
      - KRW 금액 → Math.round + 천 단위 콤마 + ₩
      - 증감률 → toFixed(2)% + 절댓값
  2. KPI 변환 — metricsToKpis 리팩터

    • OVERVIEW_KPI_BINDINGS를 순회하며 API 응답 → StatCard props 변환
    • 포맷 함수를 컴포넌트마다 직접 쓰지 않고 Registry에서 조회
    • 사용처: useOverviewMetrics, SinglePlatformView, PlatformDetailCard
  3. 컴포넌트별 Registry 연동

    • PlatformDetailCard — KPI를 metricsToKpis로 통일 (수동 StatCard 조립 제거)
    • PlatformDetailTable / PlatformRoasTable — 비교 테이블 클릭수 열·포맷 Registry 연동
    • TopPerformanceList — 랭킹 증감률 포맷 Registry 연동
    • BudgetGaugeChart — 예산 금액 포맷 Registry 연동
    • PerformanceEfficiencyChart + config — CTR/CVR/노출 레이블·축·툴팁 포맷 Registry 연동
    • TrafficChart + config — 클릭수 관련 포맷 Registry 연동
    • AllPlatformView / OverviewKpiSection — 범례·레이블 Registry 참조
  4. 데이터·훅 레이어

    • 플랫폼 metrics 캐시 통합 (platformMetricsQuery.ts)
      • 기존 문제: 플랫폼별 지표 API(getOverview(orgId, provider))는 여러 훅·화면에서 동시에 쓰이는데 각 훅이 getOverview를 직접 호출하고 있었음
      • 해결: src/utils/dashboard/platformMetricsQuery.ts를 추가해 조회 로직과 캐시 키를 한곳으로 모음
    • 플랫폼 대시보드 로딩 정리
      • 기존 문제: PlatformDashboard가 setTimeout(1600ms) 기반 가짜 isLoading을 페이지 전체에 내려보냄 → react-query 응답과 무관하게 전 섹션 스켈레톤, 로딩 단위가 페이지 전체로 고정
      • 해결
        • PlatformDashboard의 isLoading state / timer 제거
        • AllPlatformView, SinglePlatformView의 isLoading prop 제거
        • 각 섹션이 자기 훅의 isLoading / isError만 사용 (isRankingsLoading, isAdStatusLoading, isPerformanceLoading, isMetricsLoading 등)
  5. utils 파일 구조 정리

    • auth 컴포넌트, routes, hooks 등 import 경로 @/ 별칭 기준 일괄 수정
  6. mock / dead code 정리

    • platformDashboard.mock.ts — roasRankingMock, performanceEfficiencyMock, budgetStatusMock 등 미사용 export 제거 (트래픽 mock만 유지)
    • budgetGaugeChart.mock.ts 삭제
    • platformIntegrations.mock.ts 미사용 export 정리
    • PlatformSkeleton 미사용 스켈레톤 정리
    • dead export 정리

😅 미완성 작업

N/A

📢 논의 사항 및 참고 사항

  • 지표 포맷 기준 통일
    1. 정수형 카운트 → 천 단위 콤마 (toLocaleString)
    2. 비율/퍼센트 → toFixed(2)%
    3. 금액 (KRW) → Math.round + 천 단위 콤마 + ₩
    4. 증감률 → toFixed(2)% + 절댓값

📝 작업 정리 및 회고

🔗 작업 내용 정리 및 회고

💬 리뷰어 가이드 (P-Rules)
P1: 필수 반영 (Critical) - 버그 가능성, 컨벤션 위반. 해결 전 머지 불가.
P2: 적극 권장 (Recommended) - 더 나은 대안 제시. 가급적 반영 권장.
P3: 제안 (Suggestion) - 아이디어 공유. 반영 여부는 드라이버 자율.
P4: 단순 확인/칭찬 (Nit) - 사소한 오타, 칭찬 등 피드백.

Summary by CodeRabbit

변경 사항

  • 신규 기능

    • 차트에서 CSV 형식으로 데이터 내보내기 기능 추가
  • 개선 사항

    • 대시보드 숫자 포맷 및 통화 표기 일관성 강화
    • 플랫폼 대시보드 로딩 상태 처리 개선
    • 인증 관련 유틸리티 구성 정리
  • 버그 수정

    • 플랫폼 성과 데이터 조회 로직 개선

@Seojegyeong Seojegyeong linked an issue Jun 23, 2026 that may be closed by this pull request
5 tasks
@Seojegyeong Seojegyeong self-assigned this Jun 23, 2026
@Seojegyeong Seojegyeong added the 🔨 Refactor 코드 리팩토링 label Jun 23, 2026
@coderabbitai

coderabbitai Bot commented Jun 23, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

대시보드 지표 포맷/메타 레지스트리(METRIC_REGISTRY)를 신규 생성하고, 차트·테이블·KPI 컴포넌트 전반의 하드코딩 포맷터를 레지스트리 기반으로 교체했다. 플랫폼 대시보드의 타이머 기반 isLoading prop 드릴링을 제거하고, fetchPlatformMetrics 유틸을 추가해 훅들의 데이터 소스를 통일했다. 인증 유틸 import 경로는 @/utils/auth/ 하위로 재구성됐다.

Changes

Dashboard METRIC_REGISTRY 중앙화 및 isLoading prop 제거

Layer / File(s) Summary
metricRegistry 핵심 유틸 및 타입 정의
src/utils/dashboard/metricRegistry.ts
숫자/통화/퍼센트 포맷 헬퍼, 차트 축·툴팁 포맷 함수(formatCountChartAxis, formatCountChartTooltip), 지표 메타 타입, METRIC_REGISTRY 상수, getKpiMetric, OVERVIEW_KPI_BINDINGS, getMetricKpiTitle을 신규 추가했다.
platformMetricsQuery 유틸 및 훅 연동
src/utils/dashboard/platformMetricsQuery.ts, src/hooks/dashboard/usePlatformMetrics.ts, src/hooks/dashboard/usePlatformPerformance.ts, src/hooks/dashboard/useOverviewRoasRankings.ts, src/types/dashboard/overview.ts
platformMetricsQueryFn/fetchPlatformMetrics 유틸을 신규 추가하고, 세 훅의 데이터 소스를 getOverview에서 이 유틸로 교체했다. IPlatformRankingItem의 클릭 지표가 clickRate/ctrDelta에서 clicks/clickDelta로 변경됐다.
metricsToKpis 동적 변환 및 downloadChart 업데이트
src/utils/dashboard/metricsToKpis.ts, src/utils/dashboard/downloadChart.ts
metricsToKpisOVERVIEW_KPI_BINDINGS.map 기반 동적 구성으로 교체됐다. printAsPdf가 삭제되고 downloadChartCsv가 추가됐다.
차트 컴포넌트·설정 레지스트리 기반 포맷터 교체
src/components/dashboard/charts/BudgetGaugeChart.tsx, src/components/dashboard/charts/PerformanceEfficiencyChart.tsx, src/components/dashboard/charts/TrafficChart.tsx, src/components/dashboard/charts/performanceEfficiencyChart.config.ts, src/components/dashboard/charts/trafficChart.config.ts, src/components/dashboard/charts/budgetGaugeChart.mock.ts
세 차트 컴포넌트와 두 config 파일의 하드코딩 라벨·포맷터를 M.* 레지스트리 호출로 교체했다. budgetGaugeChart.mock.ts mock 상수가 삭제됐다.
PlatformDashboard isLoading prop 드릴링 제거
src/pages/dashboard/platform/PlatformDashboard.tsx, src/components/dashboard/platform/AllPlatformView.tsx, src/components/dashboard/platform/SinglePlatformView.tsx, src/components/dashboard/platform/AllPlatformTrafficChart.tsx, src/components/dashboard/platform/PlatformTrafficChart.tsx, src/components/dashboard/platform/skeleton/PlatformSkeleton.tsx
PlatformDashboard에서 타이머 기반 isLoading 상태를 제거하고, 하위 뷰 컴포넌트의 isLoading prop을 모두 제거해 각 훅의 로딩 상태만으로 분기하도록 변경했다. 차트 축·툴팁 포맷터도 레지스트리 유틸로 교체됐다.
플랫폼 테이블·카드·리스트 레지스트리 기반 렌더링
src/components/dashboard/platform/PlatformDetailCard.tsx, src/components/dashboard/platform/PlatformDetailTable.tsx, src/components/dashboard/platform/PlatformRoasTable.tsx, src/components/dashboard/platform/TopPerformanceList.tsx, src/pages/dashboard/overview/sections/OverviewKpiSection.tsx, src/pages/dashboard/platform/platformDashboard.mock.ts
PlatformDetailCardmetricsToKpis+useMemo 기반으로 StatCard를 동적 렌더링하도록 변경됐다. 세 테이블·리스트의 헤더 라벨과 값 포맷이 M.* 기반으로 교체됐다. mock 상수(ROAS 순위/성과 효율/예산 소진)가 삭제됐다.

Auth 유틸 경로 재구성 및 기타 정리

Layer / File(s) Summary
Auth 유틸 경로 재구성 및 기타 import 정리
src/components/auth/common/CommonAuthInput.tsx, src/components/auth/common/PasswordForm.tsx, src/components/auth/flows/find-email/EnterPhoneStep.tsx, src/components/auth/flows/find-email/ShowEmailResultStep.tsx, src/components/auth/flows/signup/ProfileSetupStep.tsx, src/components/workspace/InviteMemberModal.tsx, src/hooks/auth/useEmailVerification.ts, src/pages/auth/Login.tsx, src/routes/AuthRoutes.tsx, src/routes/MainRoutes.tsx, src/pages/integration/platformIntegrations.mock.ts
인증 유틸 import 경로를 @/utils/auth/...로 통일하고, loadable import를 @/lib/loadable로 변경했다. platformConnectionsMock export가 삭제됐다.

추정 코드 리뷰 노력

🎯 4 (Complex) | ⏱️ ~60 minutes

관련 가능성이 있는 이슈

  • ♻️ [Refactor] 지표 메타데이터 Registry 중앙화 #239: 이 PR은 해당 이슈에서 요구한 지표 메타데이터 레지스트리 중앙화를 src/utils/dashboard/metricRegistry.ts 신규 생성과 전체 대시보드 컴포넌트의 METRIC_REGISTRY 기반 포맷팅 전환으로 직접 구현하고 있다.

관련 가능성이 있는 PR

  • WhereYouAd/WhereYouAd-Frontend#129: 이 PR이 수정한 useOverviewRoasRankings의 ROAS 순위 반환 스키마(clicks/clickDelta 교체)와 동일한 훅의 API 연동 흐름을 다룬다.
  • WhereYouAd/WhereYouAd-Frontend#175: AllPlatformView, SinglePlatformView, PlatformDetailTable 등 이 PR이 수정한 파일들에 isLoading 기반 UI와 하드코딩 포맷팅을 도입한 PR이다.
  • WhereYouAd/WhereYouAd-Frontend#204: usePlatformPerformance, usePlatformRoasRankings 훅과 AllPlatformView를 추가한 PR으로, 이 PR이 같은 파일들의 필드 구조와 포맷 방식을 후속 정리하고 있다.

추천 리뷰어

  • YermIm
🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.36% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경사항의 핵심을 명확하게 반영하고 있습니다. 지표 메타데이터 Registry 중앙화 및 포맷 통합이라는 주요 목표를 간결하게 표현했습니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed PR 설명이 요구되는 주요 섹션을 모두 포함하고 있으며, 변경사항이 명확하고 구체적으로 정리되어 있습니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/#239

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jun 23, 2026

Copy link
Copy Markdown

📚 Storybook 배포 완료

항목 링크
📖 Storybook https://69a147b60a56365d9e2185ef-hbmfanazbb.chromatic.com/
🔍 Chromatic https://www.chromatic.com/build?appId=69a147b60a56365d9e2185ef&number=343

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/components/dashboard/platform/SinglePlatformView.tsx (1)

151-154: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

단일 플랫폼 트래픽 차트의 데이터 소스를 mock에서 실데이터로 전환해주세요.

PlatformTrafficChartplatformTrafficMock를 주입하면, 부모의 로딩 드릴링 제거 이후에도 트래픽 섹션만 실서버 상태와 분리된 채 동작합니다. 서버 상태 훅 기반 데이터로 교체해 섹션 간 일관된 로딩/오류/데이터 표시를 맞춰주세요.
As per coding guidelines, "**/*.mock.ts: Mock data: separate into *.mock.ts files. Forbidden: mixing mock data into production APIs and hooks."
As per path instructions, "src/**: 상태 관리: 서버 상태(React Query)와 전역 상태(Zustand)의 분리 여부 확인."

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/dashboard/platform/SinglePlatformView.tsx` around lines 151 -
154, The PlatformTrafficChart component in the SinglePlatformView is currently
using mock data from platformTrafficMock instead of real server state data,
which causes inconsistency with the parent component's loading and error
handling. Replace the platformTrafficMock[platform] data source with an
appropriate server state hook (such as a React Query hook) that fetches the
actual platform traffic data for the given platform prop. Ensure the data passed
to PlatformTrafficChart comes from the same server state management pattern used
elsewhere in the component for consistency in loading, error, and data display
states.

Sources: Coding guidelines, Path instructions

🧹 Nitpick comments (1)
src/hooks/dashboard/useOverviewRoasRankings.ts (1)

19-23: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

toProviderType 정규화 로직을 공용 유틸로 합쳐주세요.

동일한 정규화 함수가 src/components/dashboard/platform/PlatformRoasTable.tsx에도 있어요. 매핑 규칙이 바뀔 때 한쪽만 수정되면 랭킹-메트릭 결합과 표시 로직이 쉽게 어긋날 수 있어서, 공용 유틸로 추출해 두 군데에서 재사용하는 편이 안전합니다.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/hooks/dashboard/useOverviewRoasRankings.ts` around lines 19 - 23, The
`toProviderType` function currently exists as a duplicate in both
useOverviewRoasRankings.ts and PlatformRoasTable.tsx, which creates a
maintenance risk when provider mapping rules change. Extract the
`toProviderType` function into a shared utility module (create a new utility
file if one doesn't exist for provider-related utilities), then import and use
it in both files. Remove the duplicate function definition from
PlatformRoasTable.tsx and replace its usage with the imported utility function
to ensure consistent normalization logic across the codebase.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/dashboard/platform/AllPlatformTrafficChart.tsx`:
- Around line 18-20: The AllPlatformTrafficChart component is directly importing
and using platformTrafficMock, which violates the separation between mock and
production code and prevents server state updates from being reflected. Remove
the import of platformTrafficMock from the mock file and refactor the
AllPlatformTrafficChart component to either accept real data as props from a
parent component or consume data directly through a react-query hook. This
ensures the chart displays actual server data and updates reactively based on
server state changes rather than relying on static mock data.

In `@src/utils/dashboard/metricRegistry.ts`:
- Around line 53-56: The currencyFormat object definition uses formatCurrency
instead of formatCurrencyRounded, which causes decimal places to be exposed for
spend/revenue/adSpend metrics inconsistent with the file's rounding convention.
Replace the formatCurrency reference with formatCurrencyRounded in the
currencyFormat object (lines 53-56). Additionally, apply the same change to all
other similar currency format definitions throughout the file as indicated by
the "Also applies to" comment spanning lines 95-124 to ensure consistent
currency formatting across all metrics.

In `@src/utils/dashboard/metricsToKpis.ts`:
- Around line 5-9: Replace the relative import path `./metricRegistry` in the
import statement for getKpiMetric, getMetricKpiTitle, and OVERVIEW_KPI_BINDINGS
with the `@/` alias path to follow the project's import conventions. Update the
import statement to use the full path starting with `@/` instead of the relative
path notation to maintain consistency with project coding guidelines.

---

Outside diff comments:
In `@src/components/dashboard/platform/SinglePlatformView.tsx`:
- Around line 151-154: The PlatformTrafficChart component in the
SinglePlatformView is currently using mock data from platformTrafficMock instead
of real server state data, which causes inconsistency with the parent
component's loading and error handling. Replace the
platformTrafficMock[platform] data source with an appropriate server state hook
(such as a React Query hook) that fetches the actual platform traffic data for
the given platform prop. Ensure the data passed to PlatformTrafficChart comes
from the same server state management pattern used elsewhere in the component
for consistency in loading, error, and data display states.

---

Nitpick comments:
In `@src/hooks/dashboard/useOverviewRoasRankings.ts`:
- Around line 19-23: The `toProviderType` function currently exists as a
duplicate in both useOverviewRoasRankings.ts and PlatformRoasTable.tsx, which
creates a maintenance risk when provider mapping rules change. Extract the
`toProviderType` function into a shared utility module (create a new utility
file if one doesn't exist for provider-related utilities), then import and use
it in both files. Remove the duplicate function definition from
PlatformRoasTable.tsx and replace its usage with the imported utility function
to ensure consistent normalization logic across the codebase.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7584819a-ed9b-40b9-8766-649073e05aae

📥 Commits

Reviewing files that changed from the base of the PR and between f387a5e and efcaca6.

📒 Files selected for processing (41)
  • src/components/auth/common/CommonAuthInput.tsx
  • src/components/auth/common/PasswordForm.tsx
  • src/components/auth/flows/find-email/EnterPhoneStep.tsx
  • src/components/auth/flows/find-email/ShowEmailResultStep.tsx
  • src/components/auth/flows/signup/ProfileSetupStep.tsx
  • src/components/dashboard/charts/BudgetGaugeChart.tsx
  • src/components/dashboard/charts/PerformanceEfficiencyChart.tsx
  • src/components/dashboard/charts/TrafficChart.tsx
  • src/components/dashboard/charts/budgetGaugeChart.mock.ts
  • src/components/dashboard/charts/performanceEfficiencyChart.config.ts
  • src/components/dashboard/charts/trafficChart.config.ts
  • src/components/dashboard/platform/AllPlatformTrafficChart.tsx
  • src/components/dashboard/platform/AllPlatformView.tsx
  • src/components/dashboard/platform/PlatformDetailCard.tsx
  • src/components/dashboard/platform/PlatformDetailTable.tsx
  • src/components/dashboard/platform/PlatformRoasTable.tsx
  • src/components/dashboard/platform/PlatformTrafficChart.tsx
  • src/components/dashboard/platform/SinglePlatformView.tsx
  • src/components/dashboard/platform/TopPerformanceList.tsx
  • src/components/dashboard/platform/skeleton/PlatformSkeleton.tsx
  • src/components/workspace/InviteMemberModal.tsx
  • src/hooks/auth/useEmailVerification.ts
  • src/hooks/dashboard/useOverviewRoasRankings.ts
  • src/hooks/dashboard/usePlatformMetrics.ts
  • src/hooks/dashboard/usePlatformPerformance.ts
  • src/lib/loadable.tsx
  • src/pages/auth/Login.tsx
  • src/pages/dashboard/overview/sections/OverviewKpiSection.tsx
  • src/pages/dashboard/platform/PlatformDashboard.tsx
  • src/pages/dashboard/platform/platformDashboard.mock.ts
  • src/pages/integration/platformIntegrations.mock.ts
  • src/routes/AuthRoutes.tsx
  • src/routes/MainRoutes.tsx
  • src/types/dashboard/overview.ts
  • src/utils/auth/formatPhoneNumber.ts
  • src/utils/auth/maskEmail.ts
  • src/utils/auth/validation.ts
  • src/utils/dashboard/downloadChart.ts
  • src/utils/dashboard/metricRegistry.ts
  • src/utils/dashboard/metricsToKpis.ts
  • src/utils/dashboard/platformMetricsQuery.ts
💤 Files with no reviewable changes (4)
  • src/components/dashboard/platform/skeleton/PlatformSkeleton.tsx
  • src/components/dashboard/charts/budgetGaugeChart.mock.ts
  • src/pages/integration/platformIntegrations.mock.ts
  • src/utils/dashboard/downloadChart.ts

Comment thread src/components/dashboard/platform/AllPlatformTrafficChart.tsx
Comment thread src/utils/dashboard/metricRegistry.ts Outdated
Comment thread src/utils/dashboard/metricsToKpis.ts Outdated
@Seojegyeong
Seojegyeong requested review from YermIm and jjjsun June 23, 2026 06:30

@jjjsun jjjsun left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

P4: 확인했습니다! 고생하셨어요!

@Seojegyeong
Seojegyeong merged commit 92ce58d into develop Jun 23, 2026
3 checks passed
@Seojegyeong
Seojegyeong deleted the refactor/#239 branch June 23, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔨 Refactor 코드 리팩토링

Projects

None yet

Development

Successfully merging this pull request may close these issues.

♻️ [Refactor] 지표 메타데이터 Registry 중앙화

2 participants