Skip to content

[FIX] 없는 Free 요금제를 시스템 화면에서 걷어낸다 #238 - #242

Closed
hyun030514 wants to merge 2 commits into
developfrom
fix/system-drop-free-plan#238
Closed

hyun030514 wants to merge 2 commits into
developfrom
fix/system-drop-free-plan#238

Conversation

@hyun030514

@hyun030514 hyun030514 commented Aug 9, 2026 •

Copy link
Copy Markdown
Contributor

📋 PR 타입

  • feature — 새로운 기능 추가
  • fix — 버그 수정
  • style — 코드 스타일 수정 (로직 변경 없음)
  • refactor — 리팩토링
  • docs — 문서 수정
  • test — 테스트 코드
  • design — UI/UX 변경
  • chore — 설정/빌드 작업
  • merge

🗂 작업 영역

  • 워크벤치 — 회의 · 캡처 · AI검토 · 회의실
  • 업무 — 보드 · 액션 · 프로젝트 · 인수인계
  • 조직 — 역할별 대시보드 · 사원/회의실 관리 · 구독
  • 공유 셸 · 디자인 시스템 ⚠️ (셸 담당자만, 별도 PR)
  • 공통 · 인프라

🙋 관련 역할

  • OWNER (대표)
  • ADMIN (관리자)
  • LEADER (팀장)
  • MEMBER (사원)
  • SYSTEM (서비스 운영자 — 확장, 데모 제외)
  • 공통

📝 작업 내용

무엇을 · 왜 바꿨는지 작성해 주세요

  • PLAN·Plan·PLAN_LABEL 상수를 지웠습니다. 요금제는 유료 하나뿐이라(CLAUDE.md §요금제) 고를 것이 없습니다. 값만 남겨 두면 화면이 다시 "어느 플랜이냐"를 묻기 시작하고, 그 순간 없는 무료 요금제가 되살아납니다. 자리에는 왜 없는지를 적은 주석을 남겼습니다.
  • "플랜 분포" 도넛 카드를 지웠습니다(카드·차트·로더 3파일). 플랜이 하나면 "분포"라는 개념 자체가 없습니다.
  • 구독 금액을 플랜으로 가르지 않습니다. 예전엔 plan === TEAM이 아니면 0원·결제일 없음으로 쳤는데, 그건 없는 무료 요금제를 전제한 계산이었습니다. 이제 모든 기업이 결제 대상입니다.
  • MRR 보조문구 Team 38개사 → 월 반복 매출. 빈자리를 채우려고 없던 지표를 지어내지 않고, 약어를 풀어 적는 데 썼습니다.
  • ManagedCompany.plan·SubscriptionRecord.plan 필드를 뺐습니다. 어느 화면도 그리지 않던 값이라 화면 변화는 없습니다.

빈 곁 컬럼에 무엇을 뒀는지

도넛이 있던 자리에 "처리 큐" 카드를 뒀습니다 — 새 지표를 만든 게 아니라 이미 있는 값(MonitoringOverview.queue)을 옮겨 온 것입니다. 대시보드의 나머지가 전부 기업·매출 축이라 시스템이 지금 건강한지는 아무 데도 없었는데, 운영자가 처음 여는 화면이니 여기 있는 편이 맞다고 봤습니다.

  • 목 데이터도 두 벌로 두지 않고 MOCK_MONITORING_OVERVIEW.queue를 그대로 참조합니다 — 두 벌이면 같은 순간에 두 화면이 다른 건수를 말합니다.
  • 숫자만 보여주고 재처리 버튼은 두지 않았습니다. 같은 버튼이 두 곳에 있으면 어디서 눌렀는지에 따라 결과가 다른 것처럼 보입니다.
  • "재처리 필요"는 0건이 아닐 때만 빨강입니다(§디자인 토큰 — 색으로 알리는 건 에러뿐). 늘 빨간 줄은 곧 안 읽힙니다.

✅ 작업 체크리스트

기본

  • 브랜치 명명 규칙 준수 (feature/meeting-capture#12 꼴, base develop)
  • 커밋 컨벤션 준수 (type: 제목 #{이슈번호})
  • 아래 Closes # 에 이슈 번호 기입
  • 불필요한 console · 주석 처리된 코드 제거
  • 민감 정보 없음 (토큰 · 키 · .env)

Z 필수

  • 🔐 권한 2축 검사 — 해당 없음(SYSTEM 셸 안쪽 조회 전용, 변경 동작 없음)
  • 🧬 zod — 해당 없음(BE 응답을 새로 받지 않습니다. 목 상수만 손봤습니다)
  • 🕵️ 정직성 — 목 데이터임을 주석에 유지했고, 단가가 아직 가정값(좌석 과금 확정 전)이라는 점을 UNIT_PRICE 주석에 남겼습니다
  • 🎨 디자인 토큰 사용 (생 hex 하드코딩 없음) · 다크 값도 정의됨

품질

  • ⚡ 최적화 — 도넛 차트(recharts, next/dynamic 로더)가 통째로 빠져 대시보드 클라이언트 번들이 줄었습니다
  • ♿ a11y — 카드는 section + h2 + ul/li, 이동은 <Link>, 링크에 포커스 링
  • ♻️ 재사용 확인 — 기존 시스템 카드(stage-timing-card)의 머리·여백 규격을 그대로 따랐습니다
  • 🧪 loading / error / empty 3상태 — 큐는 항상 0 이상의 숫자라 empty 상태가 없습니다(0건도 뜻이 있는 값입니다)
  • 브라우저 전용 API(STT · 녹음) 사용 시 미지원 · 권한거부 안내 있음 — 해당 없음

🔗 연관 이슈

Closes #238


📸 스크린샷 (선택)

Before After
곁 컬럼 = 플랜 분포 Team 38 / Free 24 곁 컬럼 = 처리 큐 대기 4 · 처리 중 2 · 재처리 필요 3

MRR 보조문구도 Team 38개사 → 월 반복 매출로 바뀝니다.


💬 리뷰 포인트

리뷰어가 중점적으로 봐야 할 부분

  • 곁 컬럼을 "처리 큐"로 채운 판단이 맞는지. 비워 두거나 차트를 전폭으로 늘리는 선택지도 있었습니다. 이미 있는 값만 쓴다는 선은 지켰지만, 대시보드에 담을 것인지는 봐 주세요.
  • plan 필드를 타입에서 아예 뺀 것. 나중에 요금제가 다시 여러 개가 되면 되살려야 합니다. 다만 지금 남겨 두면 무료 요금제가 조용히 돌아온다고 판단했습니다.
  • features/billing의 PLAN은 안 건드렸습니다. 이름만 같고 축이 다릅니다(그쪽은 우리 상품 정의, 여기는 운영자가 남의 회사를 볼 때 쓰던 값).

📝 추가 메모

⚠️ design/system-dashboard#239(PR #241)와 page.tsx가 겹칩니다. 두 PR이 같은 대시보드를 손대서, 나중에 머지되는 쪽에서 작은 충돌이 납니다 — plan-distribution-card.tsx는 이 PR에서 삭제된 파일이라 "삭제 채택"으로 풀면 됩니다.

⚠️ 좌석 과금(UNIT_PRICE = 9,900 × 인원)은 이 PR 범위 밖입니다. CLAUDE.md §요금제는 "인원은 과금 단위가 아니다"(2026-08-04)라고 못 박았는데 목 계산은 아직 인원 곱셈입니다. Free 제거와 별개 사안이라 손대지 않았습니다.

Summary by CodeRabbit

  • 새 기능

    • 대시보드에 파이프라인 대기열 현황을 추가했습니다.
    • 처리 대기, 처리 중, 재처리 필요 건수와 평균 처리 시간을 확인할 수 있습니다.
    • 시스템 모니터링 화면으로 바로 이동할 수 있습니다.
  • 변경 사항

    • 요금제 분포 카드와 관련 차트를 제거했습니다.
    • MRR 카드 설명을 월 반복 매출 기준으로 변경했습니다.
    • 구독 요금이 인원 수 기준으로 일관되게 계산됩니다.

요금제는 유료 하나뿐인데(CLAUDE.md §요금제) 운영자 화면이 아직 Free를 보여줬다.
대시보드는 "62개사 중 24개사가 무료"라고 말했고, 구독 금액도 `plan === TEAM`이
아니면 0원으로 쳤다 — 운영자가 잘못된 회사 현황을 보고 판단하게 된다.
PR #75가 범위 밖으로 미뤄 둔 항목이다.

- 상수: `PLAN`·`Plan`·`PLAN_LABEL`을 지운다. 값을 남겨 두면 화면이 "어느 플랜이냐"를
  다시 묻기 시작하고, 그 순간 없는 무료 요금제가 되살아난다.
- 플랜 분포 도넛: 플랜이 하나면 "분포"라는 개념이 없다 — 카드·차트·로더를 지운다.
- 구독 금액: 플랜으로 가르지 않는다. 모든 기업이 결제 대상이라 0원짜리 구독은 없다.
  테스트도 "0원도 결제일 없는 건도 없다"로 바꿔 되살아나면 빨개진다.
- MRR 보조문구 `Team N개사` → `월 반복 매출`. 자리를 채우려고 없던 지표를 지어내지 않는다.

빈 곁 컬럼에는 **이미 있는 값**을 옮겨 왔다(처리 큐 — 시스템 모니터링과 같은 소스).
대시보드의 나머지가 전부 기업·매출 축이라 시스템이 지금 건강한지는 아무 데도 없었다.
@coderabbitai

coderabbitai Bot commented Aug 9, 2026 •

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@hyun030514, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 38 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 06ad61bf-b93e-4e93-b3a8-c51dd776c110

📥 Commits

Reviewing files that changed from the base of the PR and between 196db7d and 9684c51.

📒 Files selected for processing (1)
  • src/features/system/components/pipeline-queue-card.tsx
📝 Walkthrough

Walkthrough

시스템 대시보드에서 플랜 분포 카드를 제거하고 파이프라인 큐 카드를 표시합니다. 플랜 관련 타입, 상수, 목 데이터, 차트 컴포넌트를 삭제했습니다. 구독 목 데이터는 모든 기업에 인원별 단일 요금을 적용합니다.

Changes

시스템 대시보드 전환

Layer / File(s) Summary
플랜 모델 및 청구 계약 정리
src/constants/system.ts, src/features/system/types.ts, src/features/system/mock/companies.ts, src/features/system/mock/billing.ts, src/features/system/mock/billing.test.ts
플랜 상수, 타입, 기업·구독 레코드의 plan 필드를 제거했습니다. 모든 구독 금액을 인원 수×₩9,900으로 계산하고 청구일을 설정하도록 변경했습니다.
대시보드 데이터 연결
src/features/system/mock/dashboard.ts, src/app/(system)/system/(dashboard)/page.tsx
대시보드 데이터에서 플랜 분포를 제거하고 모니터링 목 데이터의 pipelineQueue를 연결했습니다.
파이프라인 큐 카드 표시
src/features/system/components/pipeline-queue-card.tsx, src/features/system/components/plan-distribution-card.tsx, src/features/system/components/plan-donut-chart-loader.tsx, src/features/system/components/plan-donut-chart.tsx, src/app/(system)/system/(dashboard)/page.tsx
파이프라인 큐 카드가 대기, 처리 중, 실패 건수와 평균 처리 시간을 표시합니다. 기존 플랜 분포 카드와 도넛 차트 컴포넌트를 제거했습니다. MRR 카드의 보조 문구를 월 반복 매출 설명으로 변경했습니다.

Estimated code review effort: 2 (Simple) | ~15 minutes

Sequence Diagram(s)

sequenceDiagram
  participant DashboardPage
  participant DashboardOverview
  participant PipelineQueueCard
  DashboardPage->>DashboardOverview: pipelineQueue 조회
  DashboardOverview->>PipelineQueueCard: PipelineQueueSummary 전달
  PipelineQueueCard-->>DashboardPage: 큐 상태 카드 표시
Loading

Possibly related PRs

  • Z-Groupware/FRONTEND#75: SYSTEM 영역에서 플랜 개념을 제거하는 변경과 직접 연결됩니다.
  • Z-Groupware/FRONTEND#71: 모니터링 타입과 목 데이터를 기반으로 pipelineQueue를 대시보드에 연결합니다.
  • Z-Groupware/FRONTEND#35: 이번 변경에서 제거한 플랜 분포 대시보드 구현과 직접 연결됩니다.

Suggested reviewers: zana0422-creator, callmeeterhist

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Linked Issues check ⚠️ Warning Free 요금제 제거 요구는 충족하지만, 이슈가 금지한 대체 지표로 처리 큐 카드를 추가했습니다 [#238]. 파이프라인 큐 카드 추가를 제거하고, 플랜 분포 카드 삭제 후 레이아웃만 정리합니다.
Out of Scope Changes check ⚠️ Warning 기존 모니터링 큐 카드를 대시보드에 추가한 변경은 Free 요금제 제거 범위를 벗어납니다. 파이프라인 큐 카드와 관련 데이터 연결을 별도 PR로 분리하거나 이번 PR에서 제거합니다.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 SYSTEM 화면에서 존재하지 않는 Free 요금제를 제거하는 PR의 핵심 변경을 명확하게 설명합니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ 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 fix/system-drop-free-plan#238

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

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

🧹 Nitpick comments (1)
src/features/system/components/pipeline-queue-card.tsx (1)

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

PipelineQueueCardProps 인터페이스를 분리하십시오.

현재 인라인 props 타입은 명시적 props interface 요구사항에 맞지 않습니다. PipelineQueueCardProps를 정의하고 컴포넌트 인수에 적용하십시오.

수정 예시
+interface PipelineQueueCardProps {
+  queue: PipelineQueueSummary;
+}
+
-export function PipelineQueueCard({ queue }: { queue: PipelineQueueSummary }) {
+export function PipelineQueueCard({ queue }: PipelineQueueCardProps) {

As per coding guidelines, “Use explicit props interfaces” 규칙을 적용하십시오.

🤖 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/features/system/components/pipeline-queue-card.tsx` at line 16, Define a
named PipelineQueueCardProps interface containing the queue:
PipelineQueueSummary prop, then update PipelineQueueCard to use that interface
instead of the inline argument type.

Source: Coding guidelines

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

Nitpick comments:
In `@src/features/system/components/pipeline-queue-card.tsx`:
- Line 16: Define a named PipelineQueueCardProps interface containing the queue:
PipelineQueueSummary prop, then update PipelineQueueCard to use that interface
instead of the inline argument type.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f77b074a-fb62-4dfd-9957-5397d735c1b6

📥 Commits

Reviewing files that changed from the base of the PR and between 2d2e6e0 and 196db7d.

📒 Files selected for processing (11)
  • src/app/(system)/system/(dashboard)/page.tsx
  • src/constants/system.ts
  • src/features/system/components/pipeline-queue-card.tsx
  • src/features/system/components/plan-distribution-card.tsx
  • src/features/system/components/plan-donut-chart-loader.tsx
  • src/features/system/components/plan-donut-chart.tsx
  • src/features/system/mock/billing.test.ts
  • src/features/system/mock/billing.ts
  • src/features/system/mock/companies.ts
  • src/features/system/mock/dashboard.ts
  • src/features/system/types.ts
💤 Files with no reviewable changes (3)
  • src/features/system/components/plan-donut-chart-loader.tsx
  • src/features/system/components/plan-distribution-card.tsx
  • src/features/system/components/plan-donut-chart.tsx

- 숫자를 `items-baseline`으로 맞추고 있었다. 왼쪽이 라벨+보조 **두 줄**이라
  첫 줄 베이스라인에 붙이면 숫자만 위로 떠 보인다 — `items-center`로 바꾼다.
- 목록을 가운데로 모으고 있었다(`justify-center`). 첫 줄이 옆 차트 카드 내용보다
  한참 내려가 두 카드가 서로 다른 높이에서 시작하는 것처럼 보였다 —
  `justify-between`으로 고르게 벌린다.

브라우저에서 재서 확인했다: 두 카드 높이 314px로 같고, 세 줄 모두 높이 36px에
간격 35~36px, 좌우 열(1182·1380)도 어긋나지 않는다.
@hyun030514

Copy link
Copy Markdown
Contributor Author

내용이 #241에 그대로 합쳐졌습니다 — 같은 화면을 두 PR이 나눠 갖고 있어 곁 컬럼을 디자인 쪽에서 다듬을 수 없었습니다. 이 브랜치의 커밋은 전부 #241에 들어 있고, #241이 Closes #238을 갖습니다. 리뷰는 #241 하나만 봐 주세요.

@hyun030514 hyun030514 closed this Aug 9, 2026
@hyun030514 hyun030514 self-assigned this Aug 9, 2026
@hyun030514 hyun030514 added this to Z Aug 9, 2026
@github-project-automation github-project-automation Bot moved this to Done in Z Aug 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[FIX] 요금제는 유료 하나뿐인데 시스템 화면이 Free를 보여준다

1 participant