개요
Office Add-in(Word/Excel/PowerPoint/Outlook 등)에서 유료 결제/과금제를 구축하려면
크게 보면 **“어디서 결제하고, 어떻게 권한을 확인할 것인가”**를 설계하는 문제입니다.
Office 애드인은 기본적으로 **웹 기술(HTML/JS + 서버 백엔드)**로 동작하므로,
웹/모바일 서비스에서 쓰는 대부분의 과금 모델을 동일하게 적용할 수 있습니다.
아래에서 대표적인 시나리오와 구현 방법을 정리하겠습니다.
1. 결제·과금 방식의 큰 분류
1) 사용량 기반 vs 기간(구독) 기반
기간 기반(Subscription)
- 월/년 단위 구독(예: Pro 플랜 9.9$/월)
- 기업용: 좌석 수(사용자 수)에 따른 요금제
- 장점: 구현이 단순, SaaS 표준 패턴, 예측 가능한 매출
- 단점: 실제 사용량과 무관하게 비용이 나간다는 인식
사용량 기반(Pay-as-you-go)
- 예: “문서 분석 1,000건까지 무료, 이후 건당 n원”
- API 호출 수, 페이지 수, 변환 횟수 등을 기준으로 측정
- 장점: 사용량과 요금이 직관적으로 연결
- 단점: 사용량 집계/과금 로직/대시보드 구현이 복잡
혼합형
- “월 기본 요금 + 초과 사용량에 대한 사용량 과금”
- 예: 월 10,000건까지 포함 + 초과분 1,000건당 n원
2) 라이선스 단위
- 사용자 단위(User-based): 특정 Microsoft 계정/회사 계정 단위
- 조직/테넌트 단위(Tenant-based): 테넌트 전체 라이선스 후, 내부에서 사용자 수 제한
- 디바이스 단위 (요즘은 드묾): PC 1대 기준
Office Add-in 특성상 “사용자(계정)” 단위가 가장 자연스럽고,
기업 고객 타깃이면 테넌트 + 좌석 수 방식도 고려할 수 있습니다.
2. 결제 채널 선택: MS 마켓플레이스 vs 자체 결제
1) Microsoft AppSource / Microsoft 365 관리 센터를 통한 과금
Office Add-in을 AppSource에 올리고,
“라이선스/구독 상품”을 Microsoft 상점에서 판매하는 방식입니다.
- 장점
- Microsoft 계정/조직 계정으로 결제·청구
- 기업 고객의 구매/배포 플로우와 잘 맞음
- 신뢰도, 구매 장벽↓
- 단점
- 수수료, 정책(환불, 국가 제한 등)에 따라 제약
- 결제 플로우/라인업이 MS 플랫폼에 종속
- 셀프 빌링(송장 커스터마이즈 등)이 어렵거나 제한적
구현 개념:
- AppSource 상에 Offer(플랜)를 정의 (무료, Trial, 유료)
- 고객이 AppSource/관리 센터에서 구독 → 구독/좌석 정보가 라이선스 API 또는 백엔드에서 조회 가능
- Add-in은 로그인한 사용자와 조직 정보를 기반으로 “구독 상태 조회 → 기능 잠금/해제”
이 경로는 대기업/엔터프라이즈 고객을 주요 타깃으로 할 때 특히 유리합니다.
2) 자체 결제 시스템(Stripe, PayPal, 국내 PG 등) 연동
Add-in UI 안에서 웹 기반 결제 페이지로 유도해
Stripe/PayPal/국내 PG(토스페이먼츠, KG이니시스 등)를 직접 연동하는 방법입니다.
- 장점
- 결제 UI/플랜/프로모션을 완전 자율적으로 설계 가능
- 수수료·정책을 어느 정도 스스로 최적화
- 기존 웹/모바일 서비스 Billing을 재사용 가능
- 단점
- 결제/정산/환불/세금/보안/규제(특히 국내 전자결제 관련) 모두 직접 책임
- Office 승인 심사 시, 결제 관련 UX/정책을 잘 설명해야 함
구현 개념:
- Add-in에서 사용자 로그인 (자체 계정 or OAuth)
- 백엔드는 사용자 계정/테넌트 기준으로 Billing 상태·플랜 정보 관리
- “업그레이드/결제” 버튼 클릭 시 → 내부 웹 결제 페이지(Stripe Checkout, PG 결제창 등)로 이동
- 결제 성공 후 → 백엔드 DB에 구독/플랜 업데이트
- Add-in 실행 시마다 백엔드에 플랜·사용량 조회 → 기능 잠금/해제
3. Office Add-in 내부에서의 과금 로직 구성
1) 인증/식별
과금제의 핵심은 “누굴 기준으로 청구할 것인가?”입니다.
- 일반적으로:
- 사용자의 Microsoft 계정(AAD 계정) 또는
- 자체 서비스 계정 (이메일/회사명)
을 기준으로 식별합니다.
구현 흐름 예:
- Office.js로 사용자 계정 정보 획득 (예:
Office.context.mailbox.userProfile등, 호스트에 따라 다름) - 또는, OAuth2/OpenID Connect로 사용자를 로그인시켜 자체 계정/테넌트 ID 확보
- 이 ID를 백엔드에 전달 → Billing DB와 매핑
2) 플랜·권한 체크
Add-in 시작마다(또는 일정 주기):
- 백엔드 API:
/billing/status?userId=xxx&tenantId=yyy - 서버에서 아래 정보 반환:
planType(free, pro, enterprise 등)expiresAt(구독 만료일)usage(이번 달/이번 기간 사용량)limits(이번 플랜에서 허용되는 최대량)
- 프론트(애드인)에서:
- 무료 사용량 초과 시 업그레이드 모달/배너
- 기간 만료 시 일부/전체 기능 잠금, 재결제 유도
3) 사용량(Usage) 집계
사용량 기반 과금을 한다면:
- 클라이언트가 수행하는 핵심 액션마다 백엔드에 로그:
- 예:
/usage/record(문서 분석 1회, 페이지 변환 10페이지 등)
- 예:
- 서버에서:
- 테이블:
Usage(userId, tenantId, actionType, amount, timestamp) - Billing 주기(월/년)별 Aggregation → 요금 계산
- 테이블:
- 최적화:
- 모든 호출을 실시간 전송하면 느려질 수 있으니
- “버퍼링 후 배치 전송” or “주요 액션만 기록” 전략 사용
4. 대표적인 과금 모델 설계 예시
모델 A: Freemium + 구독(가장 무난)
- Free 플랜
- 하루 5회 분석/변환
- 기능 제한(예: 기본 템플릿만)
- Pro 플랜 (월/년 구독)
- 무제한 or 넉넉한 사용량
- 고급 기능(예: AI 분석, 팀 공유)
- Enterprise 플랜
- 테넌트 단위 사용자 수 제한 + 전용 기능
- 별도 영업/견적
구현 포인트:
- 무료 플랜에서도 “가치를 어느 정도 주되, 확실히 차별화된 Pro 기능 제공”
- 업그레이드 버튼은 Add-in UI 곳곳에 자연스럽게 배치(배너, 제한 도달 팝업 등)
모델 B: 사용량 기반 + 최소 기본요금
- 기본 요금: 월 N원 (소량 사용 포함)
- 초과 사용: 1,000건당 n원
- 기업 고객: 일정량 이상이면 별도 할인/약정
구현 포인트:
- 사용량 대시보드 제공 (Add-in 내부 또는 웹 포털)
- “예상 요금 시뮬레이션” 제공 → 불안감 감소
- 요금 상한선(캡) 옵션 제공 시 안심감↑
모델 C: 기업용 좌석 라이선스
- 테넌트 단위로 “10 seats, 50 seats” 등 판매
- 각 좌석은 특정 사용자 계정에 할당
- Add-in은 로그인한 사용자가 좌석이 할당된 사용자 ID인지를 체크
구현 포인트:
- 관리자 포털(웹)에서 라이선스 할당/회수 UI
- AAD/테넌트 ID 활용 시 온보딩 편리
5. 기술 스택/아키텍처 관점
1) 프론트엔드(Office Add-in)
- TypeScript/JavaScript + Office.js
- React/Vue/Angular 등 SPA 형태로 구현 가능
- 주요 기능:
- 사용자 인증 (MS 계정 or 자체 계정)
- 백엔드 Billing API 연동
- 사용량 전송 / 플랜 상태 표시
- 결제 페이지로 리다이렉트(또는 내부 iFrame/팝업)
2) 백엔드
- 아무 언어/프레임워크 (Node, .NET, Python, Go 등)
- 필요 모듈:
- User/Tenant 관리
- Billing(플랜/구독/결제 이력/사용량) DB
- 결제 게이트웨이 연동 모듈(Stripe/PG SDK)
- Webhook 처리 (결제 성공/실패/구독 갱신 등)
- 라이선스 검증 API
데이터 모델 예시(간략):
Users(id, email, tenantId, msUserId, createdAt, ...)Tenants(id, domain, msTenantId, planId, seats, ...)Plans(id, name, type, price, billingCycle, limitsJson, ...)Subscriptions(id, userId/tenantId, planId, status, startAt, endAt, ...)Usage(id, userId, tenantId, actionType, amount, timestamp)
6. 나라별/플랫폼별 이슈
- 국가별 결제 규제
- 한국에서 국내 결제수단을 쓰려면 전자금융/PG 계약, 세금계산서, 현금영수증 등 고려 필요
- 환율·과세(VAT 등)
- 글로벌 판매 시 각국 VAT 규정 고려(특히 EU, 영국 등)
- Stripe Tax 또는 외부 세금 계산 솔루션 활용 가능
- 엔터프라이즈 고객 보안/데이터 위치
- 데이터가 어느 리전에 저장되는지
- SOC2/ISO 등 보안 인증 요구 가능
- 과금보다는 계약/보안 쪽 이슈지만, B2B 세일즈에서 자주 나옴
7. 단계별 로드맵 제안
MVP 단계
- 자체 결제(Stripe 등) + 가장 단순한 구독형(Freemium + Pro 1종)
- 사용자 단위 라이선스만 지원
- 사용량 집계는 대략적인 수준으로 시작
성장 단계
- 기업용 테넌트/좌석 모델 추가
- AppSource를 통한 판매/배포 채널 확대
- 사용량 기반/하이브리드 플랜 실험
고도화 단계
- 관리자 포털 + 상세 사용량 대시보드
- 국가별 가격/통화, 세금 자동 처리
- 프로모션 코드, 쿠폰, 리셀러 플로우 등 추가
8. 실무적으로 “어떻게 시작할지” 정리
먼저 결정할 것
- 타깃: 개인 중심 vs 기업 중심?
- 과금 기준: 기간(구독) vs 사용량 vs 혼합?
- 결제 채널: AppSource vs 자체 결제(Stripe/PG) vs 둘 다?
그 다음 구현 순서
- 사용자/테넌트 식별 로직 설계 (Microsoft 계정 매핑 여부 포함)
- 무료/유료 플랜 정의 (기능 차이, 사용량 제한 등)
- 백엔드 Billing DB 스키마 설계 및 API 작성
- Add-in에서 Billing API 연동 + 플랜에 따라 기능 잠금/해제
- 결제 연동(Stripe/PG or AppSource Offer) 및 테스트
- 로깅/모니터링(에러, 사용량, 결제 실패) 구축
댓글
댓글 쓰기