본문으로 건너뛰기

Plan 도메인 이벤트 스토밍

개요

본 문서는 Plan 도메인의 이벤트 스토밍 워크샵 결과를 정리한 것입니다. Plan 도메인 요구사항 명세서(requirements.md)와 비즈니스 규칙 문서(business-rules.md)를 기반으로 도출된 도메인 이벤트, 명령, 액터, 정책 등을 포함합니다.

바운디드 컨텍스트 참조

Plan 도메인은 다른 도메인(IAM, User, Billing, Audit 등)과 상호작용합니다. 특히 IAM 도메인의 역할(Role) 정보, User 도메인의 사용자 상태 및 플랜 할당, Billing 도메인의 결제 정보에 의존합니다. Group 도메인과는 독립적으로 운영되며, 서로 다른 차원의 권한을 제공합니다. 자세한 내용은 각 도메인 문서를 참조하십시오.

도메인 이벤트

도메인에서 발생하는 중요한 변화나 사실을 나타내는 이벤트들입니다.

1. 플랜(Plan) 생명주기 이벤트

이벤트설명트리거
PlanCreated새 플랜이 생성되었음CreatePlan
PlanRead플랜 정보가 조회되었음GetPlan
PlanUpdated플랜 정보가 수정되었음UpdatePlan
PlanDeleted플랜이 삭제되었음DeletePlan
PlanActivated플랜이 활성화 상태로 변경됨ActivatePlan
PlanDeactivated플랜이 비활성화 상태로 변경됨DeactivatePlan
PlanDeprecated플랜이 폐기 예정 상태로 변경됨DeprecatePlan
PlanArchived플랜이 보관 상태로 변경됨ArchivePlan
PlanValidationFailed플랜 생성/수정 시 유효성 검증 실패CreatePlan, UpdatePlan

2. 플랜 유형 및 분류 이벤트

이벤트설명트리거
TherapeuticPlanCreated치료 플랜이 생성되었음CreateTherapeuticPlan
LimitedAccessPlanCreated제한 접근 플랜이 생성되었음CreateLimitedAccessPlan
SamplePlanCreated샘플 플랜이 생성되었음CreateSamplePlan
DevelopmentPlanCreated개발 플랜이 생성되었음CreateDevelopmentPlan
ClinicianPlanCreated클리니션 플랜이 생성되었음CreateClinicianPlan
GuestAccessPlanCreated게스트 플랜이 생성되었음CreateGuestAccessPlan
PlanTypeChanged플랜 유형이 변경되었음ChangePlanType
PlanCategoryAssigned플랜에 카테고리가 할당되었음AssignPlanCategory

3. 플랜-역할 관계 이벤트

이벤트설명트리거
RoleAssignedToPlan플랜에 역할이 할당되었음AssignRoleToPlan
RoleRevokedFromPlan플랜에서 역할이 해제되었음RevokeRoleFromPlan
PlanRoleValidationFailed플랜-역할 할당 시 검증 실패AssignRoleToPlan
PlanRoleConflictDetected플랜 내 역할 충돌이 감지되었음ValidatePlanRoles
PlanRoleConsistencyRestored플랜 역할 일관성이 복구되었음ResolvePlanRoleConflict

4. 플랜 기능 및 제한사항 이벤트

이벤트설명트리거
PlanFeatureEnabled플랜 기능이 활성화되었음EnablePlanFeature
PlanFeatureDisabled플랜 기능이 비활성화되었음DisablePlanFeature
PlanLimitConfigured플랜 사용 한도가 설정되었음ConfigurePlanLimit
PlanLimitExceeded플랜 사용 한도가 초과되었음자동 모니터링
PlanServiceLevelDefined플랜 서비스 수준이 정의되었음DefinePlanServiceLevel
PlanSLABreach플랜 SLA 위반이 발생했음자동 모니터링

5. 플랜 할당 및 변경 이벤트

이벤트설명트리거
PlanAssignedToUser사용자에게 플랜이 할당되었음AssignPlanToUser
GuestPlanAssigned게스트 사용자에게 게스트 플랜이 할당되었음AssignGuestPlan
PlanUnassignedFromUser사용자에게서 플랜이 해제되었음UnassignPlanFromUser
PlanUpgraded플랜이 업그레이드되었음UpgradePlan
PlanDowngraded플랜이 다운그레이드되었음DowngradePlan
PlanMigrationStarted플랜 마이그레이션이 시작되었음StartPlanMigration
PlanMigrationCompleted플랜 마이그레이션이 완료되었음CompletePlanMigration
PlanMigrationFailed플랜 마이그레이션이 실패했음마이그레이션 프로세스 중
PlanChangeScheduled플랜 변경이 예약되었음SchedulePlanChange
GuestPlanExpired게스트 플랜이 만료되었음HandleGuestPlanExpiry
GuestPlanCleanupScheduled게스트 플랜 정리가 예약되었음ScheduleGuestPlanCleanup

6. 플랜 템플릿 및 프리셋 이벤트

이벤트설명트리거
PlanTemplateCreated플랜 템플릿이 생성되었음CreatePlanTemplate
PlanTemplateApplied플랜 템플릿이 적용되었음ApplyPlanTemplate
PlanTemplateUpdated플랜 템플릿이 수정되었음UpdatePlanTemplate
DefaultPlanSet기본 플랜이 설정되었음SetDefaultPlan
PlanCopied플랜이 복사되었음CopyPlan
PlanInheritanceConfigured플랜 상속 관계가 설정되었음ConfigurePlanInheritance

7. 플랜 모니터링 및 분석 이벤트

이벤트설명트리거
PlanUsageMonitored플랜 사용량이 모니터링되었음자동 모니터링
PlanMetricsCalculated플랜 지표가 계산되었음CalculatePlanMetrics
PlanPerformanceAnalyzed플랜 성능이 분석되었음AnalyzePlanPerformance
PlanUsageAlertTriggered플랜 사용량 알림이 발생했음자동 알림 시스템
PlanExpirationWarning플랜 만료 경고가 발생했음자동 알림 시스템
PlanRecommendationGenerated플랜 추천이 생성되었음GeneratePlanRecommendation

8. 플랜 연동 및 통합 이벤트

이벤트설명트리거
PlanBillingIntegrated플랜이 빌링 시스템과 통합되었음IntegratePlanBilling
PlanPaymentStatusUpdated플랜 결제 상태가 업데이트되었음외부 빌링 시스템
PlanCRMSynced플랜이 CRM 시스템과 동기화되었음SyncPlanWithCRM
PlanAnalyticsExported플랜 분석 데이터가 내보내기되었음ExportPlanAnalytics
PlanEventPublished플랜 관련 이벤트가 이벤트 버스에 발행되었음모든 플랜 변경 시

정책(Policies)

시스템의 자동화된 비즈니스 규칙입니다.

1. 플랜 데이터 및 스키마 정책

  • Plan 도메인 관련 모든 데이터는 plan PostgreSQL 스키마에 저장되어야 함
  • 플랜 이름(name)은 시스템 내에서 고유해야 함
  • 플랜 식별자(id)는 생성 후 변경 불가
  • 플랜 코드(code)가 있는 경우 시스템 내에서 고유해야 함

2. 플랜 유형 및 분류 정책

  • 시스템에서 지원하는 표준 플랜 유형은 사전 정의됨 (Therapeutic, Limited Access, Sample, Development, Clinician)
  • 플랜은 사용자 유형(환자/내부 운영자)에 따라 분류됨
  • 플랜은 서비스 수준(Basic/Standard/Premium)에 따라 분류될 수 있음
  • 플랜은 지역별, 언어별로 분류될 수 있음

3. 플랜 생명주기 정책

  • 플랜은 ACTIVE, INACTIVE, DEPRECATED, ARCHIVED 상태를 가짐
  • 플랜 변경 시 버전 관리를 지원해야 함
  • 이전 버전의 플랜을 사용하는 사용자에 대한 마이그레이션 계획이 필요함
  • 플랜 마이그레이션은 단계적으로 진행되어야 함

4. 플랜-역할 관계 정책

  • 플랜에 여러 역할(Role)을 추가하거나 제거할 수 있어야 함
  • 한 플랜 내에서 상충되는 역할이 할당되지 않도록 검증해야 함
  • 역할 간 의존성을 확인하여 필수 역할이 포함되도록 해야 함
  • 역할 변경 시 플랜의 일관성을 유지해야 함

5. 플랜 기능 및 제한사항 정책

  • 각 플랜은 접근 가능한 기능 목록을 명확히 정의해야 함
  • 기능별 사용 한도(API 호출 횟수, 데이터 용량)를 설정할 수 있음
  • 시간대별 접근 제한을 설정할 수 있음
  • 플랜별 서비스 수준 협약(SLA)을 정의할 수 있음

6. 플랜 할당 및 변경 정책

  • 사용자는 그룹을 통해 간접적으로 플랜에 연결됨
  • 일반적으로 사용자는 특정 시점에 하나의 활성 플랜에만 연결됨
  • 모든 USER 타입 사용자는 플랜에 연결되어야 함
  • 플랜 변경은 비즈니스 규칙에 따라 검증되어야 함
  • 게스트 사용자는 plan.guest.default 또는 지역별 게스트 플랜에 자동 할당되어야 하며, Step-up 완료 시 등록 플랜으로 전환되어야 함
  • 게스트 플랜 만료 시 사용자 접근 범위를 제한하고 정리 작업을 예약해야 함

7. 플랜 템플릿 및 프리셋 정책

  • 시스템에는 최소 하나의 기본 플랜이 존재해야 함
  • 새로운 사용자에게 할당할 기본 플랜을 지정할 수 있음
  • 기본 플랜은 삭제할 수 없음
  • 자주 사용되는 플랜 구성을 템플릿으로 저장할 수 있음

8. 플랜 모니터링 및 분석 정책

  • 플랜별 사용자 수를 실시간으로 모니터링해야 함
  • 플랜별 기능 사용률을 추적해야 함
  • 플랜 사용량이 임계치를 초과할 때 알림을 발송해야 함
  • 플랜 만료 예정 사용자에게 사전 알림을 제공해야 함

9. 보안 및 접근 제어 정책

  • 플랜 정보에 대한 접근은 적절한 권한을 가진 사용자만 가능
  • 플랜 수정은 관리자 권한을 가진 사용자만 수행할 수 있음
  • 민감한 플랜 정보는 암호화하여 저장해야 함
  • 모든 플랜 관련 활동을 감사 로그로 기록해야 함

10. 성능 및 캐싱 정책

  • 플랜 조회 API 평균 응답 시간: < 100ms
  • 플랜 권한 계산 API 평균 응답 시간: < 150ms
  • 플랜 정보를 캐싱하여 조회 성능을 향상시켜야 함
  • 플랜-역할 매핑 정보를 캐싱해야 함

11. 데이터 제약 정책

  • 플랜 이름은 시스템 내에서 고유해야 함
  • 플랜 설명의 최대 길이는 1000자로 제한
  • 플랜에 할당될 수 있는 역할의 최대 개수는 50개로 제한
  • 기본 플랜으로 지정된 플랜은 삭제할 수 없음

명령(Commands)

도메인 이벤트를 발생시키는 사용자 의도나 시스템 동작입니다.

1. 플랜 생명주기 명령

명령설명영향
CreatePlan새 플랜 생성PlanCreated 또는 PlanValidationFailed 이벤트 발생
GetPlan플랜 정보 조회PlanRead 이벤트 발생
UpdatePlan플랜 정보 수정PlanUpdated 또는 PlanValidationFailed 이벤트 발생
DeletePlan플랜 삭제PlanDeleted 이벤트 발생
ActivatePlan플랜 활성화PlanActivated 이벤트 발생
DeactivatePlan플랜 비활성화PlanDeactivated 이벤트 발생
DeprecatePlan플랜 폐기 예정 설정PlanDeprecated 이벤트 발생
ArchivePlan플랜 보관PlanArchived 이벤트 발생

2. 플랜 유형 및 분류 명령

명령설명영향
CreateTherapeuticPlan치료 플랜 생성TherapeuticPlanCreated 이벤트 발생
CreateLimitedAccessPlan제한 접근 플랜 생성LimitedAccessPlanCreated 이벤트 발생
CreateSamplePlan샘플 플랜 생성SamplePlanCreated 이벤트 발생
CreateDevelopmentPlan개발 플랜 생성DevelopmentPlanCreated 이벤트 발생
CreateClinicianPlan클리니션 플랜 생성ClinicianPlanCreated 이벤트 발생
ChangePlanType플랜 유형 변경PlanTypeChanged 이벤트 발생
AssignPlanCategory플랜 카테고리 할당PlanCategoryAssigned 이벤트 발생

3. 플랜-역할 관계 명령

명령설명영향
AssignRoleToPlan플랜에 역할 할당RoleAssignedToPlan 또는 PlanRoleValidationFailed 이벤트 발생
RevokeRoleFromPlan플랜에서 역할 해제RoleRevokedFromPlan 이벤트 발생
ValidatePlanRoles플랜 역할 일관성 검증PlanRoleConflictDetected 또는 PlanRoleConsistencyRestored 이벤트 발생
ResolvePlanRoleConflict플랜 역할 충돌 해결PlanRoleConsistencyRestored 이벤트 발생

4. 플랜 기능 및 제한사항 명령

명령설명영향
EnablePlanFeature플랜 기능 활성화PlanFeatureEnabled 이벤트 발생
DisablePlanFeature플랜 기능 비활성화PlanFeatureDisabled 이벤트 발생
ConfigurePlanLimit플랜 사용 한도 설정PlanLimitConfigured 이벤트 발생
DefinePlanServiceLevel플랜 서비스 수준 정의PlanServiceLevelDefined 이벤트 발생

5. 플랜 할당 및 변경 명령

명령설명영향
AssignPlanToUser사용자에게 플랜 할당PlanAssignedToUser 이벤트 발생
AssignGuestPlan게스트 사용자에게 게스트 플랜 할당GuestPlanAssigned 이벤트 발생
UnassignPlanFromUser사용자에게서 플랜 해제PlanUnassignedFromUser 이벤트 발생
UpgradePlan플랜 업그레이드PlanUpgraded 이벤트 발생
DowngradePlan플랜 다운그레이드PlanDowngraded 이벤트 발생
StartPlanMigration플랜 마이그레이션 시작PlanMigrationStarted 이벤트 발생
CompletePlanMigration플랜 마이그레이션 완료PlanMigrationCompleted 이벤트 발생
SchedulePlanChange플랜 변경 예약PlanChangeScheduled 이벤트 발생
HandleGuestPlanExpiry게스트 플랜 만료 처리GuestPlanExpired 이벤트 발생
ScheduleGuestPlanCleanup게스트 플랜 정리 예약GuestPlanCleanupScheduled 이벤트 발생

6. 플랜 템플릿 및 프리셋 명령

명령설명영향
CreatePlanTemplate플랜 템플릿 생성PlanTemplateCreated 이벤트 발생
ApplyPlanTemplate플랜 템플릿 적용PlanTemplateApplied 이벤트 발생
UpdatePlanTemplate플랜 템플릿 수정PlanTemplateUpdated 이벤트 발생
SetDefaultPlan기본 플랜 설정DefaultPlanSet 이벤트 발생
CopyPlan플랜 복사PlanCopied 이벤트 발생
ConfigurePlanInheritance플랜 상속 관계 설정PlanInheritanceConfigured 이벤트 발생

7. 플랜 모니터링 및 분석 명령

명령설명영향
CalculatePlanMetrics플랜 지표 계산PlanMetricsCalculated 이벤트 발생
AnalyzePlanPerformance플랜 성능 분석PlanPerformanceAnalyzed 이벤트 발생
GeneratePlanRecommendation플랜 추천 생성PlanRecommendationGenerated 이벤트 발생

8. 플랜 연동 및 통합 명령

명령설명영향
IntegratePlanBilling플랜 빌링 시스템 통합PlanBillingIntegrated 이벤트 발생
SyncPlanWithCRM플랜 CRM 시스템 동기화PlanCRMSynced 이벤트 발생
ExportPlanAnalytics플랜 분석 데이터 내보내기PlanAnalyticsExported 이벤트 발생

액터(Actors)

시스템과 상호작용하는 주체들입니다.

내부 액터

액터설명주요 명령
Plan Manager플랜 관리자플랜 CRUD, 플랜 유형 관리, 플랜-역할 매핑, 플랜 템플릿 관리
System Admin시스템 관리자모든 플랜 관리 권한, 플랜 정책 설정, 기본 플랜 관리
Business Analyst비즈니스 분석가플랜 성능 분석, 플랜 추천, 플랜 지표 조회
Product Manager제품 관리자플랜 기능 정의, 플랜 서비스 수준 설정, 플랜 로드맵 관리

외부 액터 (시스템)

액터설명주요 명령
IAM Service권한 관리 시스템플랜-역할 매핑 조회, 플랜 기반 권한 계산
Group Service그룹 관리 시스템그룹-플랜 연결 정보 조회
User Service사용자 정보 시스템사용자-플랜 할당 정보 조회
Billing Service빌링 시스템플랜 결제 상태 업데이트, 플랜 과금 정보 연동
CRM ServiceCRM 시스템플랜 고객 정보 동기화
Analytics Service분석 시스템플랜 사용 데이터 수집, 플랜 성능 지표 제공
Notification Service알림 시스템플랜 관련 알림 발송
Audit Service감사 로그 시스템플랜 관련 감사 로그 기록

집계(Aggregates)

연관된 엔티티와 값 객체들의 클러스터입니다.

Plan 집계

  • 루트: Plan
  • 엔티티: PlanRole (연관 테이블), PlanFeature, PlanLimit
  • 값 객체: PlanName (string, unique), PlanCode (string, unique), Description, PlanType, PlanStatus, ServiceLevel
  • 참조: Role (IAM 도메인, 다대다)
  • 불변식:
    • Plan 이름은 고유해야 함
    • Plan은 ACTIVE, INACTIVE, DEPRECATED, ARCHIVED 상태를 가짐
    • Plan에 할당된 Role 목록 관리
    • Plan 기능과 제한사항의 일관성 유지

PlanTemplate 집계

  • 루트: PlanTemplate
  • 엔티티: TemplatePlanRole, TemplateFeature
  • 값 객체: TemplateName, TemplateVersion, TemplateDescription
  • 참조: Plan (생성 기반), Role (IAM 도메인)
  • 불변식:
    • Template 이름은 고유해야 함
    • Template 버전 관리 일관성
    • Template 기반 Plan 생성의 일관성

PlanAssignment 집계

  • 루트: PlanAssignment
  • 엔티티: AssignmentHistory
  • 값 객체: AssignmentDate, ExpirationDate, AssignmentStatus
  • 참조: Plan, User (User 도메인)
  • 불변식:
    • 사용자는 특정 시점에 하나의 활성 플랜만 가짐
    • 플랜 할당 이력의 일관성
    • 플랜 변경 시 마이그레이션 규칙 준수

PlanMetrics 집계

  • 루트: PlanMetrics
  • 엔티티: UsageStatistics, PerformanceMetrics
  • 값 객체: MetricDate, UserCount, FeatureUsage, SatisfactionScore
  • 참조: Plan
  • 불변식:
    • 지표 데이터의 정확성
    • 시계열 데이터의 일관성
    • 집계 데이터의 무결성

핫스팟 및 해결책

1. 플랜-역할 매핑의 복잡성

  • 문제: 플랜과 역할 간의 복잡한 매핑 관계로 인한 권한 계산 복잡도 증가
  • 해결책:
    • 명확한 매핑 규칙: 플랜 유형별 표준 역할 세트 정의
    • 검증 로직 강화: 플랜-역할 할당 시 충돌 검증 및 의존성 확인
    • 캐싱 전략: 플랜-역할 매핑 정보 캐싱으로 성능 향상

2. 플랜 마이그레이션의 복잡성

  • 문제: 플랜 변경 시 기존 사용자들의 서비스 연속성 보장 어려움
  • 해결책:
    • 단계적 마이그레이션: 점진적 플랜 전환으로 서비스 중단 최소화
    • 백워드 호환성: 이전 플랜 기능의 호환성 유지
    • 롤백 메커니즘: 마이그레이션 실패 시 롤백 기능 제공

3. 플랜 성능 모니터링

  • 문제: 실시간 플랜 사용량 모니터링과 분석의 성능 부담
  • 해결책:
    • 비동기 처리: 지표 계산과 분석을 비동기로 처리
    • 배치 처리: 대량 데이터 분석을 배치 작업으로 수행
    • 캐싱 활용: 자주 조회되는 지표 정보 캐싱

4. 외부 시스템 연동

  • 문제: Billing, CRM 등 외부 시스템과의 연동으로 인한 결합도 증가
  • 해결책:
    • 이벤트 기반 통신: 플랜 변경 이벤트를 통한 비동기 연동
    • API 계약 관리: 명확한 API 계약 정의 및 버전 관리
    • 회복성 설계: 외부 시스템 장애 시 대체 로직 구현

5. 플랜 데이터 일관성

  • 문제: 분산된 플랜 관련 데이터의 일관성 유지 어려움
  • 해결책:
    • 트랜잭션 관리: 플랜 변경 시 관련 데이터의 트랜잭션 일관성 보장
    • 이벤트 소싱: 플랜 변경 이벤트를 통한 데이터 일관성 추적
    • 보상 트랜잭션: 분산 트랜잭션 실패 시 보상 로직 구현

6. 플랜 확장성

  • 문제: 새로운 플랜 유형이나 기능 추가 시 시스템 확장성 문제
  • 해결책:
    • 플러그인 아키텍처: 새로운 플랜 유형을 플러그인 방식으로 추가
    • 설정 기반 관리: 플랜 기능과 제한사항을 설정으로 관리
    • 템플릿 시스템: 플랜 템플릿을 통한 신속한 플랜 생성

7. 플랜 보안

  • 문제: 플랜 정보의 보안과 접근 제어
  • 해결책:
    • 세밀한 권한 제어: 플랜 관리 기능별 세밀한 권한 설정
    • 데이터 암호화: 민감한 플랜 정보의 암호화 저장
    • 감사 로깅: 모든 플랜 관련 활동의 상세 로깅

변경 이력

버전날짜작성자변경 내용
0.1.02025-01-27bok@weltcorp.com최초 문서 생성 (IAM 도메인에서 분리)
0.2.02025-01-27bok@weltcorp.comGroup-Plan 독립성 반영: 바운디드 컨텍스트 수정, PlanAssignment 집계에서 Group 참조 제거
0.3.02025-10-27assistant게스트 플랜 이벤트/명령 및 만료/정리 정책 추가