[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,120 +1,212 @@
|
||||
---
|
||||
id: wiki-2026-0508-saas
|
||||
title: SaaS
|
||||
title: SaaS (Software as a Service)
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Software as a Service, Cloud Software, Multi-tenant SaaS]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [auto-consolidated, technical-documentation]
|
||||
confidence_score: 0.9
|
||||
verification_status: applied
|
||||
tags: [saas, multi-tenancy, subscription, ai-native, vertical-saas]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack:
|
||||
language: TypeScript
|
||||
framework: Next.js / Stripe / Postgres RLS
|
||||
---
|
||||
|
||||
# [[SaaS 대시보드 및 이커머스 레이아웃 구축|SaaS 대시보드 및 이커머스 레이아웃 구축]]
|
||||
# SaaS (Software as a Service)
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
[[SaaS|SaaS]] 대시보드 및 이커머스 레이아웃 구축은 방대한 데이터와 제품 정보를 다양한 크기의 화면에서 일관되고 직관적으로 보여주기 위한 반응형 설계 과정입니다. 이를 위해 CSS Grid와 Flexbox를 결합하여 견고한 레이아웃을 구성하고, 컨테이너 쿼리([[Container Queries|Container Queries]])를 통해 컴포넌트 단위의 유연성을 확보합니다. 또한, 시각적 계층 구조를 명확히 하고 상호작용에 대한 즉각적인 피드백을 제공하기 위해 의도적인 애니메이션(Motion Design)을 전략적으로 적용하여 유지보수성과 사용자 경험(UX)을 동시에 향상시킵니다.
|
||||
## 매 한 줄
|
||||
> **"매 multi-tenant, subscription-based, browser-delivered software — 매 install 의 X, 매 always-latest"**. 매 1999 Salesforce ("End of Software") 로 출발 → 매 2010s SaaS 1.0 (horizontal CRM/HR) → 매 2020s vertical SaaS (Toast, Procore, Veeva) → 매 2026 AI-native SaaS (Glean, Harvey, Cursor) 가 매 outcome-based pricing 으로 매 seat-based 모델 을 흔드는 시기.
|
||||
|
||||
---
|
||||
## 매 핵심
|
||||
|
||||
[[SaaS|SaaS]] 플랫폼과 인터랙티브 대시보드는 실시간 데이터 업데이트, 풍부한 사용자 상호작용, 그리고 매끄러운 화면 전환이 필수적인 웹 애플리케이션입니다 [1, 2]. 이러한 시스템은 대부분 로그인 벽(Authentication wall) 뒤에서 작동하므로 검색 엔진 최적화(SEO)의 중요성이 낮아 클라이언트 사이드 렌더링(CSR)이 가장 이상적인 렌더링 방식으로 평가받습니다 [1, 3, 4]. 또한 대규모 데이터 처리와 복잡한 UI 업데이트 시 성능 병목 현상을 방지하기 위해 컴포넌트 기반 아키텍처와 동시성 렌더링([[Concurrent Rendering|Concurrent Rendering]]) 같은 최적화 기술이 적극적으로 활용됩니다 [5, 6].
|
||||
### 매 Pillars
|
||||
- **Multi-tenancy**: tenant-isolated data on shared infra (RLS, schema-per-tenant, DB-per-tenant).
|
||||
- **Subscription**: MRR/ARR, Stripe billing, dunning, proration.
|
||||
- **Self-serve onboarding**: PLG funnel, time-to-value 분 단위.
|
||||
- **Continuous delivery**: weekly/daily ship, no version skew.
|
||||
- **Observability**: per-tenant SLO, usage analytics, churn signals.
|
||||
|
||||
---
|
||||
### 매 SaaS metrics
|
||||
- **ARR/MRR**, **NRR** (Net Revenue Retention) — best signal of product fit.
|
||||
- **CAC payback** — months to recoup acquisition.
|
||||
- **Magic Number** = (ΔARR × 4) / S&M spend.
|
||||
- **Gross margin** — typical SaaS 70-85%, AI-SaaS 50-70% (inference cost).
|
||||
- **LTV/CAC** ≥ 3, payback ≤ 12 months.
|
||||
|
||||
> "소프트웨어의 물세권화: 무거운 프로그램을 설치할 필요 없이 웹브라우저만 있으면 언제 어디서든 접속해 필요한 기능을 쓰고, 쓴 만큼만 돈을 내는(Subscribe) 소프트웨어 소비의 거대한 쓰나미이자 현대 비즈니스의 표준."
|
||||
### 매 Pricing models
|
||||
- **Per-seat**: classic Salesforce/Slack — saturating in AI era.
|
||||
- **Usage-based**: Snowflake, Twilio, OpenAI — aligns to value.
|
||||
- **Outcome/agent-based**: 2026 AI-native — pay per resolved ticket, per qualified lead.
|
||||
- **Hybrid**: platform fee + usage overage.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
**1. SaaS 대시보드 레이아웃 및 스타일링 전략**
|
||||
* **CSS Grid를 통한 2차원 배치:** 대시보드는 다양한 위젯과 데이터 구조를 한 화면에 배치해야 하므로, 행과 열을 동시에 정밀하게 제어할 수 있는 CSS Grid가 매우 적합합니다 [1].
|
||||
* **컨테이너 쿼리를 활용한 데이터 반응성:** 분석 대시보드나 CRM 등 데이터가 많은 인터페이스는 화면이 좁아질 때 표와 차트가 자연스럽게 축소되지 않는 문제를 겪습니다 [2]. 이를 해결하기 위해 전체 화면 너비가 아닌 '부모 컨테이너의 너비'를 기준으로 반응하는 컨테이너 쿼리를 사용합니다 [3, 4]. 좁은 너비에서는 막대 차트를 단순한 숫자 카드로 변경하거나, 데이터 테이블의 각 행을 라벨이 붙은 카드 스택으로 변환하는 방식이 최선의 구현으로 꼽힙니다 [2].
|
||||
* **애니메이션을 통한 데이터 시각화 강화:** 대시보드에서 카드와 차트를 독립적으로 움직이게 하는 계층형 모션(Layered Motion)을 적용하면, 배경 패널보다 전경의 핵심 지표를 약간 빠르게 이동시켜 중요한 정보로 사용자의 시선을 유도할 수 있습니다 [5]. 또한 애니메이션이 적용된 데이터 시각화를 통해 복잡한 정보와 변화 추이를 사용자가 빠르게 소화할 수 있도록 돕습니다 [6].
|
||||
### 매 응용
|
||||
1. Horizontal SaaS (CRM, HRIS, ITSM, comms).
|
||||
2. Vertical SaaS (legal, dental, construction, hospitality).
|
||||
3. Developer SaaS (GitHub, Vercel, Sentry).
|
||||
4. AI-native SaaS (Cursor, Glean, Harvey, Decagon).
|
||||
5. Embedded SaaS (in-app commerce, fintech).
|
||||
|
||||
**2. 이커머스 레이아웃 및 UI 구축 전략**
|
||||
* **모바일 중심(Mobile-First) 구조와 콘텐츠 재배치:** 선도적인 이커머스 인터페이스는 모든 중단점(Breakpoint)에서 제품 이미지를 최우선에 두고 가격, 리뷰, 옵션, CTA(콜투액션) 등의 지원 콘텐츠를 그 주위에 재배치합니다 [7]. 모바일 환경에서는 스크롤을 하더라도 항상 접근할 수 있도록 구매 버튼을 뷰포트 하단에 고정하며, 필터 및 정렬 컨트롤은 사이드바 대신 전체 화면 오버레이나 하단 시트 패턴으로 축소하여 제공합니다 [7].
|
||||
* **카드 기반 레이아웃 (Card-Based Layouts):** 제품 목록에는 카드 기반 레이아웃을 사용하는 것이 가장 신뢰할 수 있는 패턴입니다 [8]. 큰 화면에서는 여러 카드가 나란히 놓이지만, 작은 화면에서는 레이아웃이 깨지지 않고 수직으로 자연스럽게 쌓이므로 탐색이 매우 용이해집니다 [8].
|
||||
* **사용자 피드백을 위한 마이크로 인터랙션:** 장바구니에 제품을 추가할 때 짧은 애니메이션으로 장바구니 아이콘을 강조하면, 사용자의 현재 탐색 흐름을 방해하지 않으면서 작업이 완료되었음을 명확히 피드백할 수 있습니다 [9]. 주문 후 결제 등 시간이 걸리는 과정에서는 스켈레톤 스크린(Skeleton screens)과 같은 로딩 애니메이션을 배치하여 체감 대기 시간을 줄이고 시스템 상태에 대한 확신을 줍니다 [10].
|
||||
## 💻 패턴
|
||||
|
||||
**3. 유지보수성과 성능을 고려한 구조 설계**
|
||||
* **역할에 따른 Flexbox와 Grid 분리:** 페이지의 전체적인 골격이나 뼈대(대규모 레이아웃)를 잡을 때는 CSS Grid를 사용하고, 그 내부 컴포넌트 요소들을 정렬할 때는 Flexbox를 혼합하여 사용하는 것이 효율적이고 유지보수하기 좋은 아키텍처를 만듭니다 [11, 12].
|
||||
* **애니메이션 성능 최적화:** 대시보드나 이커머스와 같이 렌더링할 컴포넌트가 많은 곳에서 너비(width), 높이(height), 여백(margin) 등 레이아웃에 영향을 주는 속성을 애니메이션화하면 값비싼 리플로우(Reflow)와 리페인트(Repaint)가 발생하여 성능이 저하됩니다 [13, 14]. 따라서 렌더링 성능을 최적화하기 위해서는 GPU 가속을 활용할 수 있는 `transform`이나 `opacity` 위주로 애니메이션을 설계해야 합니다 [14-16].
|
||||
### Multi-tenant Postgres RLS
|
||||
```sql
|
||||
ALTER TABLE documents ENABLE ROW LEVEL SECURITY;
|
||||
CREATE POLICY tenant_isolation ON documents
|
||||
USING (tenant_id = current_setting('app.tenant_id', true)::uuid);
|
||||
|
||||
---
|
||||
-- App connection middleware
|
||||
SET LOCAL app.tenant_id = '7f3a...';
|
||||
```
|
||||
|
||||
- **최적의 렌더링 전략 (CSR의 활용):**
|
||||
SaaS 플랫폼 및 사용자 대시보드 구축 시에는 클라이언트 사이드 렌더링(CSR)이 주로 권장됩니다 [1, 2]. 대시보드 특성상 검색 엔진 인덱싱이 필요하지 않고 동적인 상호작용이 가장 중요하기 때문입니다 [1, 3]. 초기 로딩 속도는 다소 느릴 수 있으나, 브라우저에서 동적으로 라우팅과 데이터를 처리하므로 사용자가 여러 애플리케이션 섹션을 부드럽게 탐색할 수 있고 인터랙티브한 앱과 같은 경험을 제공합니다 [2, 3, 7]. 일부 프레임워크에서는 실시간 상호작용이 중요한 대시보드에는 CSR을, 그 외 문서나 블로그 페이지에는 SSG나 SSR을 사용하는 하이브리드 방식을 적용하기도 합니다 [8, 9].
|
||||
### Stripe subscription with proration
|
||||
```typescript
|
||||
import Stripe from 'stripe'
|
||||
const stripe = new Stripe(process.env.STRIPE_SECRET!)
|
||||
|
||||
- **데이터 집약적 대시보드의 렌더링 성능 최적화:**
|
||||
- **자동 배칭([[Automatic Batching|Automatic Batching]]):** 데이터가 많은 대시보드에서 [[React 18|React 18]]의 자동 배칭 기능을 활성화하면 여러 상태 업데이트가 단일 리렌더링으로 묶여 처리됩니다 [10, 11]. 내부 사례 연구에 따르면, 이를 통해 최대 부하 시 총 렌더링 횟수를 약 40% 줄이고 프레임 속도를 25% 향상시킬 수 있습니다 [12, 13].
|
||||
- **동시성 기능(Concurrent Features):** 대시보드에서 10,000개 이상의 대규모 데이터 리스트를 필터링하거나 차트를 다시 계산하는 등 비용이 많이 드는 작업 시 UI가 멈추는 현상을 방지해야 합니다 [5, 14]. `[[useTransition|useTransition]]`이나 `[[useDeferredValue|useDeferredValue]]` 훅을 사용해 무거운 상태 업데이트를 지연시키면 메인 스레드를 차단하지 않고 UI의 즉각적인 반응성(예: 타이핑 시 입력 지연 방지)을 유지할 수 있습니다 [5, 14, 15].
|
||||
await stripe.subscriptions.update(subId, {
|
||||
items: [{ id: itemId, price: 'price_pro_monthly', quantity: 25 }],
|
||||
proration_behavior: 'create_prorations',
|
||||
billing_cycle_anchor: 'unchanged',
|
||||
})
|
||||
```
|
||||
|
||||
- **컴포넌트 기반 아키텍처(CBA)의 적용:**
|
||||
인터랙티브 대시보드는 차트, 데이터 테이블, 그래프 등 독립적이고 재사용 가능한 컴포넌트들을 조합하여 구축하는 컴포넌트 기반 아키텍처가 적합합니다 [6, 16]. 이를 통해 기능별 모듈화가 이루어져 일부 기능(예: 결제 프로세서 교체, 특정 위젯 업데이트)만 안전하게 수정하거나 확장할 수 있어 유지보수와 확장이 용이해집니다 [17, 18].
|
||||
### Usage-based metering (Stripe meters, 2026)
|
||||
```typescript
|
||||
await stripe.billing.meterEvents.create({
|
||||
event_name: 'api_calls',
|
||||
payload: {
|
||||
stripe_customer_id: customer.id,
|
||||
value: '1',
|
||||
},
|
||||
})
|
||||
// Subscribe customer to metered price; Stripe aggregates and bills monthly
|
||||
```
|
||||
|
||||
---
|
||||
### Tenant context middleware (Next.js)
|
||||
```typescript
|
||||
// app/middleware.ts
|
||||
import { NextResponse } from 'next/server'
|
||||
|
||||
서비스형 소프트웨어(Software as a Service, SaaS)는 클라우드 인프라를 통해 사용자에게 애플리케이션을 제공하는 모델입니다.
|
||||
export async function middleware(req: Request) {
|
||||
const session = await getSession(req)
|
||||
const tenantId = session?.tenantId
|
||||
if (!tenantId) return NextResponse.redirect('/login')
|
||||
const res = NextResponse.next()
|
||||
res.headers.set('x-tenant-id', tenantId)
|
||||
return res
|
||||
}
|
||||
```
|
||||
|
||||
1. **3대 강점**:
|
||||
* **Accessibility**: 인터넷만 있으면 어떤 기기에서든 동일한 환경 제공. (UX와 연결)
|
||||
* **Scalability**: 사용자가 1명에서 100만 명으로 늘어나도 서버 인프라가 자동으로 대응. (Scalability와 연결)
|
||||
* **Continuous Updates**: 사용자가 아무것도 안 해도 자고 일어나면 기능이 개선되어 있음. ([[Iteration|Iteration]]와 연결)
|
||||
2. **왜 중요한가?**:
|
||||
* 초기 구축 비용을 없애고 구독(Subscription)이라는 지속적 가치 정책으로 전환하여, 소프트웨어 회사와 고객이 '성장'이라는 하나의 목표로 묶이게 만들기 때문임.
|
||||
### Per-tenant rate limit (Upstash Redis)
|
||||
```typescript
|
||||
import { Ratelimit } from '@upstash/ratelimit'
|
||||
import { Redis } from '@upstash/redis'
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
- **과거 데이터와의 충돌**: 과거에는 보안 정책 때문에 설치형(On-premise)을 선호했으나, 현대 정책은 클라우드 보안 정책이 더 강력해짐에 따라 금융권조차 SaaS 정책을 적극 도입 중임(RL Update). ([[Information-Society|Information-Society]]와 연결)
|
||||
- **정책 변화(RL Update)**: 단순히 기능을 주는 정책을 넘어, AI가 사용자의 데이터를 학습해 개인화된 솔루션을 제공하는 'AI-Native SaaS 정책'이 차세대 비즈니스의 핵심 전장 정책이 됨. ([[Product-Led-Growth|Product-Led-Growth]]와 연결)
|
||||
const limiters = new Map<string, Ratelimit>()
|
||||
function tenantLimiter(plan: 'free' | 'pro' | 'enterprise') {
|
||||
const limits = { free: 100, pro: 1000, enterprise: 10000 }
|
||||
return new Ratelimit({
|
||||
redis: Redis.fromEnv(),
|
||||
limiter: Ratelimit.slidingWindow(limits[plan], '1 m'),
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[CSS Grid|CSS Grid]], Flexbox, 컨테이너 쿼리 (Container Queries), 모바일 중심 설계 ([[Mobile-First Design|Mobile-First Design]]), 마이크로 인터랙션 ([[Micro-interactions|Micro-interactions]])
|
||||
- **Projects/Contexts:** 데이터 중심 대시보드 (Data-heavy Dashboards), 반응형 이커머스 웹사이트 (Responsive E-commerce Websites)
|
||||
- **Contradictions/Notes:** 뷰포트 기반의 일반적인 미디어 쿼리(Media Queries)는 사이드바나 영웅 영역 등 컴포넌트가 배치된 개별 컨텍스트의 가용 공간을 파악하지 못하는 근본적인 한계가 있습니다. 따라서 대시보드나 이커머스처럼 복잡하고 모듈화된 레이아웃에서는 화면 크기가 아닌 컴포넌트 부모 크기에 반응하는 컨테이너 쿼리가 2026년의 새로운 표준으로 권장됩니다 [3].
|
||||
### PLG signup with magic-link (no password)
|
||||
```typescript
|
||||
// Send magic link, no password friction
|
||||
const token = jwt.sign({ email, tenantId: nanoid() }, SECRET, { expiresIn: '15m' })
|
||||
await sendEmail(email, `https://app.example.com/auth?t=${token}`)
|
||||
// On click: provision trial tenant, redirect to onboarding wizard
|
||||
```
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-26*
|
||||
### AI-native SaaS — usage-aware inference cost
|
||||
```typescript
|
||||
async function chat(tenantId: string, msgs: Message[]) {
|
||||
const tier = await getTier(tenantId)
|
||||
const model = tier === 'enterprise' ? 'claude-opus-4-7' : 'claude-haiku-4-5'
|
||||
const resp = await anthropic.messages.create({
|
||||
model, max_tokens: 1024, messages: msgs,
|
||||
metadata: { user_id: tenantId },
|
||||
})
|
||||
await meterUsage(tenantId, {
|
||||
input_tokens: resp.usage.input_tokens,
|
||||
output_tokens: resp.usage.output_tokens,
|
||||
model,
|
||||
})
|
||||
return resp
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
### Outcome pricing instrumentation
|
||||
```typescript
|
||||
// Charge only when AI agent successfully resolved
|
||||
async function recordResolution(tenantId: string, ticketId: string, resolved: boolean) {
|
||||
if (resolved) {
|
||||
await stripe.billing.meterEvents.create({
|
||||
event_name: 'resolved_ticket',
|
||||
payload: { stripe_customer_id: tenantId, value: '1' },
|
||||
})
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **Related Topics:** [[Client-Side Rendering (CSR)|Client-Side Rendering (CSR]], Component-Based Architecture, Automatic Batching, [[Concurrent Rendering|Concurrent Rendering]]
|
||||
- **Projects/Contexts:** 데이터 집약적 대시보드 성능 최적화 사례, [[Sanity Studio|Sanity Studio]]
|
||||
- **Contradictions/Notes:** React 서버 컴포넌트(RSC) 적용과 관련하여 소스 간 시각 차이가 존재합니다. 일부 소스는 읽기 전용 데이터 디스플레이(제품 카탈로그, 단순 대시보드)에 RSC를 사용하면 클라이언트 [[JavaScript|JavaScript]] 번들을 40-60%까지 줄일 수 있다고 주장하지만 [19], 다른 소스에서는 빈번한 리렌더링과 로컬 상태, 직접적인 브라우저 API에 크게 의존하는 '복잡한 대시보드 및 고도의 상호작용이 필요한 인터페이스'에는 RSC가 부적합(Poor fit)하며 클라이언트 컴포넌트를 사용해야 한다고 경고합니다 [20].
|
||||
### Tenant-isolated S3 (per-prefix IAM)
|
||||
```python
|
||||
# Generate scoped STS token per tenant request
|
||||
sts = boto3.client("sts")
|
||||
policy = {"Version": "2012-10-17", "Statement": [{
|
||||
"Effect": "Allow",
|
||||
"Action": ["s3:GetObject", "s3:PutObject"],
|
||||
"Resource": [f"arn:aws:s3:::tenants-bucket/{tenant_id}/*"],
|
||||
}]}
|
||||
creds = sts.assume_role(
|
||||
RoleArn=ROLE, RoleSessionName=f"tenant-{tenant_id}",
|
||||
Policy=json.dumps(policy), DurationSeconds=900,
|
||||
)
|
||||
```
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-25*
|
||||
## 매 결정 기준
|
||||
| 상황 | Approach |
|
||||
|---|---|
|
||||
| Early-stage horizontal | Shared schema + RLS, Stripe per-seat |
|
||||
| Vertical w/ compliance | Schema-per-tenant or DB-per-tenant |
|
||||
| AI-native, variable cost | Usage-based + cap to protect margin |
|
||||
| Enterprise w/ SOC2/HIPAA | Single-tenant deploy option, BYOC |
|
||||
| PLG self-serve | Magic-link + provisioned trial in <60s |
|
||||
|
||||
---
|
||||
**기본값**: shared-DB RLS + hybrid pricing (platform fee + usage) + Stripe meters + PLG onboarding.
|
||||
|
||||
- [[Scalability|Scalability]], [[Iteration|Iteration]], UX, [[Information-Society|Information-Society]], [[Product-Led-Growth|Product-Led-Growth]], Business-Model-[[Innovation|Innovation]]
|
||||
- **Modern Tech/Tools**: AWS, Azure, Google Cloud, Salesforce, Notion, Slack.
|
||||
---
|
||||
## 🔗 Graph
|
||||
- 부모: [[Cloud-Computing]] · [[Software-Business-Models]]
|
||||
- 변형: [[Vertical-SaaS]] · [[AI-Native-SaaS]] · [[PaaS]] · [[IaaS]]
|
||||
- 응용: [[Multi-Tenancy]] · [[Subscription-Billing]] · [[PLG]]
|
||||
- Adjacent: [[Stripe]] · [[Postgres-RLS]] · [[SOC2]] · [[Outcome-Pricing]]
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
## 🤖 LLM 활용
|
||||
**언제**: in-product copilot, customer support deflection, churn prediction from usage signals, content/email generation, dynamic onboarding.
|
||||
**언제 X**: pricing/billing computation — must be deterministic for audit and revenue recognition.
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
## ❌ 안티패턴
|
||||
- **No tenant isolation**: WHERE tenant_id checked only in app layer → IDOR breach.
|
||||
- **Per-seat pricing for AI**: high-usage user breaks margin; need usage cap or tier.
|
||||
- **Free tier without limits**: abuse → infra cost spirals.
|
||||
- **Single-region SaaS for global**: latency + data residency violations (GDPR).
|
||||
- **No self-serve cancel**: regulatory risk (FTC click-to-cancel 2024) + churn spikes.
|
||||
- **Version skew**: different customers on different versions → support combinatorics explode.
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (a16z SaaS metrics, OpenView PLG benchmarks, Stripe Billing docs, AWS SaaS Lens).
|
||||
- 신뢰도 A.
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — multi-tenancy, pricing models, AI-native SaaS 2026 |
|
||||
|
||||
Reference in New Issue
Block a user