본 문서는 IAM(Identity and Access Management) 도메인의 이벤트 스토밍 워크샵 결과를 정리한 것입니다. 도메인 요구사항 명세서(requirements.md)와 비즈니스 규칙 문서(business-rules.md)를 기반으로 도출된 도메인 이벤트, 명령, 액터, 정책 등을 포함합니다.
바운디드 컨텍스트 참조
IAM 도메인은 다른 도메인(User, Plan, Group, Audit, Auth 등)과 상호작용합니다. 특히 User 도메인의 사용자 정보, Plan 도메인의 플랜 정보, Group 도메인의 그룹 정보, Audit 도메인의 감사 로깅, Auth 도메인의 인증 정보에 의존합니다. Plan과 Group 도메인과는 이벤트 기반 연동을 통해 권한 관리를 수행합니다. 자세한 내용은 각 도메인 문서를 참조하십시오.
도메인 이벤트
도메인에서 발생하는 중요한 변화나 사실을 나타내는 이벤트들입니다.
1. 권한(Permission) 생명주기 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| PermissionCreated | 새 권한이 생성되었음 | CreatePermission |
| PermissionRead | 권한 정보가 조회되었음 | GetPermission |
| PermissionUpdated | 권한 정보가 수정되었음 | UpdatePermission |
| PermissionDeleted | 권한이 삭제되었음 | DeletePermission |
| PermissionVerified | 사용자의 특정 권한 보유가 확인되었음 | VerifyPermission |
| PermissionVerificationFailed | 사용자의 특정 권한 보유 확인에 실패했음 | VerifyPermission |
| PermissionValidationFailed | 권한 생성/수정 시 유효성 검증 실패 (예: 이름 중복) | CreatePermission, UpdatePermission |
2. 역할(Role) 생명주기 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| RoleCreated | 새 역할이 생성되었음 | CreateRole |
| RoleRead | 역할 정보가 조회되었음 | GetRole |
| RoleUpdated | 역할 정보가 수정되었음 | UpdateRole |
| RoleDeleted | 역할이 삭제되었음 | DeleteRole |
| RoleActivated | 역할이 활성화 상태로 변경됨 | UpdateRoleStatus |
| RoleDeactivated | 역할이 비활성화 상태로 변경됨 | UpdateRoleStatus |
| PermissionsAssignedToRole | 역할에 권한이 할당되었음 | AssignPermissionToRole |
| PermissionsRevokedFromRole | 역할에서 권한이 해제되었음 | RevokePermissionFromRole |
| RoleValidationFailed | 역할 생성/수정 시 유효성 검증 실패 (예: 이름 중복, 순환 참조) | CreateRole, UpdateRole |
3. 정책(Policy) 생명주기 이벤트 (참고: 현재 시스템은 명시적 정책 관리 대신 Plan/Role 기반으로 운영)
| 이벤트 | 설명 | 트리거 |
|---|
| PolicyCreated | 새 정책이 생성되었음 | CreatePolicy |
| PolicyRead | 정책 정보가 조회되었음 | GetPolicy |
| PolicyUpdated | 정책 정보가 수정되었음 | UpdatePolicy |
| PolicyDeleted | 정책이 삭제되었음 | DeletePolicy |
| PolicyEvaluated | 정책 조건에 따라 접근 허용/거부 평가됨 | EvaluatePolicy |
| PolicyEvaluationResultCached | 정책 평가 결과가 캐싱됨 | 정책 평가 성공 |
4. 플랜(Plan) 도메인 연동 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| PlanRoleMappingUpdated | 플랜-역할 매핑 정보가 업데이트되었음 | Plan 도메인 연동 |
| PlanBasedPermissionsCalculated | 플랜 기반 권한이 계산되었음 | CalculatePlanBasedPermissions |
| PlanPermissionCacheInvalidated | 플랜 권한 캐시가 무효화되었음 | Plan 변경 이벤트 수신 |
| PlanRoleAssignmentValidated | 플랜-역할 할당이 검증되었음 | ValidatePlanRoleAssignment |
| PlanAuthorizationUpdated | 플랜 기반 인가 정보가 업데이트되었음 | Plan 도메인 이벤트 수신 |
5. 그룹(Group) 도메인 연동 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| GroupBasedPermissionsCalculated | 그룹 기반 권한이 계산되었음 | CalculateGroupBasedPermissions |
| GroupRoleMappingUpdated | 그룹-역할 매핑 정보가 업데이트되었음 | Group 도메인 연동 |
| GroupPermissionCacheInvalidated | 그룹 권한 캐시가 무효화되었음 | Group 변경 이벤트 수신 |
| UserGroupPermissionUpdated | 사용자-그룹 기반 권한이 업데이트되었음 | Group 도메인 이벤트 수신 |
| GroupAuthorizationUpdated | 그룹 기반 인가 정보가 업데이트되었음 | Group 도메인 이벤트 수신 |
6. 접근 제어 및 사용자 관련 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| UserEffectivePermissionsCalculated | 사용자의 최종 유효 권한 목록이 계산되었음 | CalculateEffectivePermissions |
| UserEffectivePermissionsRead | 사용자의 유효 권한 목록이 조회되었음 | GetUserEffectivePermissions |
| UserPlanIdentified | 사용자가 속한 플랜이 식별되었음 (그룹을 통해) | GetUserPlan |
| AccessControlDecisionMade | 접근 제어 결정이 내려짐 (허용/거부) | 권한 검증 또는 정책 평가 시 |
| IdentityLevelEvaluated | 토큰의 identityLevel이 평가되었음 | EvaluateIdentityLevelPolicy |
| IdentityLevelPolicyApplied | identityLevel 조건이 적용되었음 | EvaluateIdentityLevelPolicy |
| IdentityLevelCacheInvalidated | identityLevel 기반 권한 캐시가 무효화되었음 | auth.identity-level.changed, CacheInvalidation |
| AuditLogRecorded | IAM 관련 중요 작업이 감사 로그에 기록되었음 | 모든 CRUD 및 할당/해제/검증 작업 |
7. 사용자 유형 관련 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| UserTypeAssigned | 사용자에게 특정 유형이 할당됨 | AssignUserType |
| UserTypeChanged | 사용자 유형이 변경됨 | ChangeUserType |
| OperationUserPermissionsCalculated | 내부 운영자 사용자의 유효 권한이 계산됨 | CalculateOperationUserPermissions |
| PatientUserPermissionsCalculated | 환자 사용자의 유효 권한이 계산됨 | CalculatePatientUserPermissions |
| UserSchemaChanged | 사용자 데이터 저장 스키마가 변경됨 (유형 변경에 따라) | ChangeUserType |
| UserDataMigrated | 사용자 유형 변경에 따라 데이터가 마이그레이션됨 | MigrateUserData |
8. 서비스 간 인증 관련 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| ServiceAccountTokenIssued | Service Account용 JWT 토큰이 발급되었음 | IssueServiceAccountToken |
| ServiceAccountTokenVerified | Service Account JWT 토큰이 검증되었음 | VerifyServiceAccountToken |
| ServiceAccountTokenVerificationFailed | Service Account JWT 토큰 검증에 실패했음 | VerifyServiceAccountToken |
| ServiceAccountTokenReissued | Service Account JWT 토큰이 재발급되었음 (refresh token 미지원) | ReissueServiceAccountToken |
| ServiceAccountTokenRevoked | Service Account JWT 토큰이 무효화되었음 | RevokeServiceAccountToken |
| ServiceAccountApiKeyGenerated | Service Account API 키가 생성되었음 | GenerateServiceAccountApiKey |
| ServiceAccountApiKeyRegenerated | Service Account API 키가 재생성되었음 | RegenerateServiceAccountApiKey |
| ServiceAccountPermissionsEvaluated | Service Account 권한이 평가되었음 | EvaluateServiceAccountPermissions |
| ServiceAccountAnomalousActivityDetected | Service Account의 이상 활동이 감지되었음 | 자동 모니터링 시스템 |
| ServiceAccountRateLimitExceeded | Service Account의 Rate Limit이 초과되었음 | Rate Limiting 시스템 |
정책(Policies)
시스템의 자동화된 비즈니스 규칙입니다. (business-rules.md 및 requirements.md 기반)
1. 데이터 및 스키마 정책
- IAM 관련 모든 데이터는
iam PostgreSQL 스키마에 저장되어야 함 (규칙 1.1)
- User 정보는 사용자 유형에 따라 다른 스키마를 참조함: (규칙 1.1)
- 고객(환자) 사용자: User 도메인(
private 스키마)
- 내부 운영자, 의료진 등: User 도메인(
operation 스키마)
- 권한 ID, 역할 이름, 플랜 이름, 그룹 이름은 시스템 내 고유해야 함 (규칙 1.2, 10.1)
- 권한 ID는 생성 후 변경 불가 (규칙 2.2, 10.1)
- 그룹은 반드시 하나의 플랜과 연결되어야 함 (규칙 5.3, 10.2)
- 역할 계층 구조 내 순환 참조 금지 (규칙 3.2, 10.2)
- Prisma 스키마의
onDelete: Cascade 규칙 적용 (규칙 10.2)
2. 감사 로깅 정책
- 모든 권한, 역할, 플랜, 그룹 데이터 접근 및 변경은 감사 로그 기록 (규칙 1.3)
- 권한 검증 시도 및 결과는 감사 로그 기록 (규칙 1.3)
- 역할 할당 및 해제는 감사 로그 기록 (규칙 1.3)
- API 호출 상세 감사 로그 기록 (규칙 8.3)
3. 권한 관리 정책
- 권한 이름(ID)은
{domain}:{resource}:{action} 형식 준수 (규칙 2.1)
- 권한 계층 구조는 현재 미사용 (최대 3단계 제한 가능성 언급) (규칙 2.2, 요구사항 3.1)
4. 역할 관리 정책
- 역할은 활성/비활성 상태 관리 (규칙 3.2)
- 역할 변경 이력 관리 필요 (규칙 3.2)
- 한 사용자/그룹에 할당 가능한 역할 최대 개수 제한 (예: 100개) (요구사항 3.1)
5. 플랜 관리 정책
- 플랜은 활성/비활성 상태 관리 (규칙 4.2)
- 주로 환자(Patient) 역할의 서비스 이용 수준 정의에 사용 (요구사항 1.5.1)
6. 그룹 관리 정책
- 그룹은 역할 할당 및 정책 적용 단위로 사용 가능 (규칙 5.1)
- 모든 사용자는 최소 하나 이상의 그룹에 속해야 함 (User 도메인 요구사항 연계) (규칙 6.2)
7. 접근 제어 결정 정책
- 사용자의 최종 권한은
User -> Group -> Plan -> Role -> Permission 경로로 파생 (규칙 7.1)
- 정책 충돌 시 정의된 규칙(예: Deny-overrides)에 따라 해결 (요구사항 1.4 - 현재 Plan/Role 기반)
- Access Token의
identityLevel을 평가하여 게스트 토큰에는 게스트 허용 목록만 적용 (규칙 7.1, 7.2)
- identityLevel 변경 이벤트(
auth.identity-level.changed) 수신 시 권한/캐시를 즉시 무효화 (규칙 7.2)
8. 보안 정책
- 모든 API 요청은 인증 및 인가 필수 (규칙 8.1)
- RBAC 지원 및 최소 권한 원칙 적용 (규칙 8.1)
- 민감 정보 암호화 저장 (필요시) (규칙 8.2)
- 데이터 무결성 보장 (규칙 8.2)
- API 입력값 검증 (규칙 8.3)
- Rate Limiting 적용 (규칙 8.3, 11.1)
- 특정 IP 주소 접근 제어 가능 (요구사항 2.1)
9. 성능 및 캐싱 정책
- 권한 검증 API 평균 응답 시간 목표 (< 50ms) (규칙 9.1)
- 할당/관리 API 평균 응답 시간 목표 (< 500ms) (규칙 9.1)
- 권한 검증 결과 캐싱 (규칙 9.3)
- 역할-권한, 플랜-역할, 사용자-그룹 매핑 정보 캐싱 (규칙 9.3)
- 캐시 무효화 전략 필요 (규칙 9.3)
- 캐시 TTL은 사용자 유형별로 차등 적용 (Service Account: 5분, Regular User: 15분) (규칙 11.1)
10. API 호출 제한 정책
- 사용자 유형별 Rate Limit, 동시 요청 수, 배치 처리 제한 적용 (규칙 11.1)
- Service Account: 분당 1000 요청, 동시 100, 배치 1000
- Regular User: 분당 100 요청, 동시 10, 배치 100
11. 사용자 유형 분리 정책
- 고객(환자)와 내부 운영자는 다른 스키마에 저장되지만 IAM 도메인에서는 동일한 권한 모델 적용
- 사용자 유형이 변경될 경우 적절한 데이터 마이그레이션 프로세스 필요
- 내부 운영자 유형(ADMIN, OPERATOR, CLINICIAN, SERVICE_ACCOUNT)에 따라 기본 역할 자동 할당
- 내부 운영자는 환자에게 접근할 수 있으나, 환자는 내부 운영자에게 접근 불가
- 사용자 유형 변경은 SYSTEM_ADMIN 권한을 가진 사용자만 가능
- 사용자 유형에 따라 역할-권한 계산 방식 동일하게 적용
12. 서비스 간 인증 정책
- Service Account는 API 키 기반 인증을 사용하며 비밀번호는 사용하지 않음 (규칙 1.9)
- Service Account는 refresh token을 지원하지 않음 - 토큰 만료 시 API Key로 새로운 JWT 토큰 발급 (규칙 1.9)
- JWT 토큰은 SHA-256 해시와 RS256/ES256 서명 알고리즘 사용 (규칙 1.9)
- Service Account 토큰 검증은 30ms 이내 완료되어야 함 (규칙 1.9)
- 초당 2000건의 Service Account 토큰 검증 처리 가능해야 함 (규칙 1.9)
- Service Account별 Rate Limiting 적용 (분당 1000 요청) (규칙 1.9)
- Service Account 토큰 및 권한 정보는 5분간 캐싱 (규칙 1.9)
- 최소 권한 원칙에 따라 Service Account 권한 관리 (규칙 1.9)
- Service Account 이상 패턴 감지 및 자동 차단 (규칙 1.9)
- Service Account 생명주기 관리 (생성, 활성화, 비활성화, 삭제) (규칙 1.9)
- 서비스별 격리 및 네임스페이스 적용 (규칙 1.9)
- JWT 토큰 전파 및 체이닝 지원 (규칙 1.9)
명령(Commands)
도메인 이벤트를 발생시키는 사용자 의도나 시스템 동작입니다.
1. 권한(Permission) 명령
| 명령 | 설명 | 영향 |
|---|
| CreatePermission | 새 권한 생성 | PermissionCreated 또는 PermissionValidationFailed 이벤트 발생 |
| GetPermission | 권한 정보 조회 | PermissionRead 이벤트 발생 |
| UpdatePermission | 권한 정보 수정 | PermissionUpdated 또는 PermissionValidationFailed 이벤트 발생 |
| DeletePermission | 권한 삭제 | PermissionDeleted 이벤트 발생 |
| VerifyPermission | 사용자 권한 검증 | PermissionVerified 또는 PermissionVerificationFailed 이벤트 발생 |
2. 역할(Role) 명령
| 명령 | 설명 | 영향 |
|---|
| CreateRole | 새 역할 생성 | RoleCreated 또는 RoleValidationFailed 이벤트 발생 |
| GetRole | 역할 정보 조회 | RoleRead 이벤트 발생 |
| UpdateRole | 역할 정보 수정 | RoleUpdated 또는 RoleValidationFailed 이벤트 발생 |
| DeleteRole | 역할 삭제 | RoleDeleted 이벤트 발생 |
| UpdateRoleStatus | 역할 상태(활성/비활성) 변경 | RoleActivated 또는 RoleDeactivated 이벤트 발생 |
| AssignPermissionToRole | 역할에 권한 할당 | PermissionsAssignedToRole 이벤트 발생 |
| RevokePermissionFromRole | 역할에서 권한 해제 | PermissionsRevokedFromRole 이벤트 발생 |
3. 정책(Policy) 명령 (참고: 현재 시스템은 명시적 정책 관리 대신 Plan/Role 기반)
| 명령 | 설명 | 영향 |
|---|
| CreatePolicy | 새 정책 생성 | PolicyCreated 이벤트 발생 |
| GetPolicy | 정책 정보 조회 | PolicyRead 이벤트 발생 |
| UpdatePolicy | 정책 정보 수정 | PolicyUpdated 이벤트 발생 |
| DeletePolicy | 정책 삭제 | PolicyDeleted 이벤트 발생 |
| EvaluatePolicy | 정책 평가 | PolicyEvaluated 이벤트 발생 |
4. 플랜(Plan) 도메인 연동 명령
| 명령 | 설명 | 영향 |
|---|
| CalculatePlanBasedPermissions | 플랜 기반 권한 계산 | PlanBasedPermissionsCalculated 이벤트 발생 |
| ValidatePlanRoleAssignment | 플랜-역할 할당 검증 | PlanRoleAssignmentValidated 이벤트 발생 |
| InvalidatePlanPermissionCache | 플랜 권한 캐시 무효화 | PlanPermissionCacheInvalidated 이벤트 발생 |
| UpdatePlanRoleMapping | 플랜-역할 매핑 업데이트 | PlanRoleMappingUpdated 이벤트 발생 |
| SyncPlanAuthorization | 플랜 기반 인가 정보 동기화 | PlanAuthorizationUpdated 이벤트 발생 |
5. 그룹(Group) 도메인 연동 명령
| 명령 | 설명 | 영향 |
|---|
| CalculateGroupBasedPermissions | 그룹 기반 권한 계산 | GroupBasedPermissionsCalculated 이벤트 발생 |
| InvalidateGroupPermissionCache | 그룹 권한 캐시 무효화 | GroupPermissionCacheInvalidated 이벤트 발생 |
| UpdateGroupRoleMapping | 그룹-역할 매핑 업데이트 | GroupRoleMappingUpdated 이벤트 발생 |
| SyncGroupAuthorization | 그룹 기반 인가 정보 동기화 | GroupAuthorizationUpdated 이벤트 발생 |
| UpdateUserGroupPermissions | 사용자-그룹 기반 권한 업데이트 | UserGroupPermissionUpdated 이벤트 발생 |
6. 접근 제어 및 사용자 관련 명령
| 명령 | 설명 | 영향 |
|---|
| CalculateEffectivePermissions | 사용자의 유효 권한 계산 | UserEffectivePermissionsCalculated 이벤트 발생 |
| GetUserEffectivePermissions | 사용자의 유효 권한 목록 조회 | UserEffectivePermissionsRead 이벤트 발생 |
| GetUserPlan | 사용자가 속한 플랜 조회 | UserPlanIdentified 이벤트 발생 |
| EvaluateIdentityLevelPolicy | identityLevel 조건 기반 정책 평가 | IdentityLevelEvaluated 또는 IdentityLevelPolicyApplied 이벤트 발생 |
| InvalidateIdentityLevelCache | identityLevel 관련 캐시 무효화 | IdentityLevelCacheInvalidated 이벤트 발생 |
| RecordAuditLog | 감사 로그 기록 (내부 명령) | AuditLogRecorded 이벤트 발생 |
7. 사용자 유형 관련 명령
| 명령 | 설명 | 영향 |
|---|
| AssignUserType | 사용자에게 유형 할당 | UserTypeAssigned 이벤트 발생 |
| ChangeUserType | 사용자 유형 변경 | UserTypeChanged, UserSchemaChanged 이벤트 발생 |
| MigrateUserData | 사용자 데이터 마이그레이션 | UserDataMigrated 이벤트 발생 |
| CalculateOperationUserPermissions | 내부 운영자 권한 계산 | OperationUserPermissionsCalculated 이벤트 발생 |
| CalculatePatientUserPermissions | 환자 사용자 권한 계산 | PatientUserPermissionsCalculated 이벤트 발생 |
8. 서비스 간 인증 명령
| 명령 | 설명 | 영향 |
|---|
| IssueServiceAccountToken | Service Account용 JWT 토큰 발급 | ServiceAccountTokenIssued 이벤트 발생 |
| VerifyServiceAccountToken | Service Account JWT 토큰 검증 | ServiceAccountTokenVerified 또는 ServiceAccountTokenVerificationFailed 이벤트 발생 |
| ReissueServiceAccountToken | Service Account JWT 토큰 재발급 (refresh token 미지원) | ServiceAccountTokenReissued 이벤트 발생 |
| RevokeServiceAccountToken | Service Account JWT 토큰 무효화 | ServiceAccountTokenRevoked 이벤트 발생 |
| GenerateServiceAccountApiKey | Service Account API 키 생성 | ServiceAccountApiKeyGenerated 이벤트 발생 |
| RegenerateServiceAccountApiKey | Service Account API 키 재생성 | ServiceAccountApiKeyRegenerated 이벤트 발생 |
| EvaluateServiceAccountPermissions | Service Account 권한 평가 | ServiceAccountPermissionsEvaluated 이벤트 발생 |
| CreateServiceAccount | Service Account 생성 | UserTypeAssigned 이벤트 발생 (SERVICE_ACCOUNT 유형) |
| UpdateServiceAccount | Service Account 정보 수정 | 관련 사용자 정보 업데이트 이벤트 발생 |
| DeactivateServiceAccount | Service Account 비활성화 | 관련 토큰 무효화 및 상태 변경 이벤트 발생 |
액터(Actors)
시스템과 상호작용하는 주체들입니다. (요구사항 1.1, 2.5 기반)
내부 액터
| 액터 | 설명 | 주요 명령 |
|---|
| System Admin | 시스템 전체 관리자 | 모든 IAM 리소스 CRUD, 사용자 권한 할당/해제, 시스템 정책 관리, 사용자 유형 관리 |
| IAM Admin | IAM 기능 관리자 | 권한/역할/정책 생성/수정 (삭제 제외), 범위 내 사용자 권한 관리, 감사 로그 조회 |
| Regular User | 일반 사용자(환자) | 자신의 권한/역할 조회, 권한 검증 요청, 제한된 권한 위임 |
| Operation User | 내부 운영자 | 자신의 권한/역할 조회, 할당된 범위 내 시스템 관리 |
| Clinician | 의료진 | 환자 데이터 접근, 특화된 의료 권한 사용 |
외부 액터 (시스템)
| 액터 | 설명 | 주요 명령 |
|---|
| Service Account | 다른 서비스/시스템 | API 통한 권한 검증, 권한 조회, 캐시 관리, 정책 평가, JWT 토큰 발급/검증/갱신, API 키 관리 |
| Plan Service | 플랜 관리 시스템 | 플랜 정보 제공, 플랜-역할 매핑 정보 연동, 플랜 변경 이벤트 발행 |
| Group Service | 그룹 관리 시스템 | 그룹 정보 제공, 사용자-그룹 매핑 정보 연동, 그룹 변경 이벤트 발행 |
| User Service | 사용자 정보 제공 시스템 | 사용자 정보 조회 (ID, 상태, 그룹 등) |
| Auth Service | 인증 정보 제공 시스템 | 인증된 사용자 정보 확인 |
| Audit Service | 감사 로그 기록 시스템 | RecordAuditLog (내부 호출) |
| Billing Service | 빌링 정보 연동 시스템 | 플랜 결제 상태 정보 제공 |
집계(Aggregates)
연관된 엔티티와 값 객체들의 클러스터입니다. (domain-model.md 및 비즈니스 규칙 기반)
Permission 집계
- 루트: Permission
- 값 객체: PermissionId (string,
{domain}:{resource}:{action}), Description
- 불변식:
- Permission ID는 고유하며 변경 불가 (규칙 1.2, 2.2)
Role 집계
- 루트: Role
- 엔티티: RolePermission (연관 테이블)
- 값 객체: RoleName (string, unique), Description, IsActive (boolean)
- 참조: Permission (다대다)
- 불변식:
- Role 이름은 고유해야 함 (규칙 1.2)
- Role은 활성/비활성 상태를 가짐 (규칙 3.2)
- Role에 할당된 Permission 목록 관리
- 순환 참조 금지 (규칙 3.2, 10.2)
PlanIntegration 집계 (Plan 도메인 연동)
- 루트: PlanIntegration
- 엔티티: PlanRoleMapping, PlanPermissionCache
- 값 객체: PlanId (Plan 도메인 참조), RoleMappingStatus, CacheStatus
- 참조: Role (IAM 도메인), Plan (Plan 도메인)
- 불변식:
- Plan 정보는 Plan 도메인에서 관리됨
- Plan-Role 매핑의 일관성 유지
- Plan 기반 권한 계산의 정확성
GroupIntegration 집계 (Group 도메인 연동)
- 루트: GroupIntegration
- 엔티티: GroupRoleMapping, GroupPermissionCache
- 값 객체: GroupId (Group 도메인 참조), RoleMappingStatus, CacheStatus
- 참조: Role (IAM 도메인), Group (Group 도메인)
- 불변식:
- Group 정보는 Group 도메인에서 관리됨
- Group-Role 매핑의 일관성 유지
- Group 기반 권한 계산의 정확성
UserAccess 집계 (가상 집계 - 사용자 권한 계산용)
- 루트: User (ID 참조)
- 참조: Group (다대다), Plan (직접 참조), Role (그룹 및 플랜 통해 참조), Permission (역할 통해 간접 참조)
- 값 객체: EffectivePermissions (
Set<PermissionId>), UserType
- 불변식:
- 사용자의 유효 권한은 두 경로로 계산됨:
- 조직/기능적 권한:
User -> Group -> Role -> Permission
- 서비스 수준 권한:
User -> Plan -> Role -> Permission
- 최종 권한은 두 경로의 권한을 병합하여 결정됨
- 모든 사용자는 최소 하나 이상의 그룹에 속해야 함 (규칙 6.2)
- 사용자 유형(환자/내부 운영자)에 따라 서로 다른 스키마의 사용자 데이터 참조
UserType 집계
- 루트: UserType
- 값 객체: TypeEnum (PATIENT, ADMIN, OPERATOR, CLINICIAN, SERVICE_ACCOUNT)
- 불변식:
- 사용자는 하나의 유형만 가질 수 있음
- 유형에 따라 접근 가능한 데이터와 기능이 결정됨
- 유형 변경은 승인된 관리자만 수행 가능
핫스팟 및 해결책
1. 권한 검증 성능
- 문제: 빈번한 권한 검증 요청으로 인한 성능 저하 가능성 (요구사항 2.2 처리량 목표 높음)
- 해결책:
- 캐싱: 권한 평가 결과, 역할-권한, 플랜-역할, 사용자-그룹 매핑 정보 캐싱 (규칙 9.3)
- 최적화된 쿼리: 유효 권한 계산 로직 및 데이터베이스 쿼리 최적화
- 비동기 처리: 대량 검증 요청 시 비동기 처리 고려
2. 복잡한 권한 파생 로직
- 문제:
User -> Group -> Plan -> Role -> Permission 경로의 복잡성으로 인한 유지보수 및 디버깅 어려움
- 해결책:
- 명확한 서비스 분리: 각 단계별(사용자-그룹 매핑, 그룹-플랜 매핑, 플랜-역할 매핑 등) 책임 분리 (domain-model.md 서비스 참조)
- 테스트 강화: 권한 파생 로직에 대한 단위 테스트 및 통합 테스트 철저히 수행
- 시각화 도구: (필요시) 사용자 권한 파생 과정을 시각화하는 도구 개발 고려
3. 캐시 일관성 유지
- 문제: 역할, 플랜, 그룹 할당 변경 시 캐시된 데이터와의 불일치 발생 가능성
- 해결책:
- 적절한 캐시 무효화 전략: 관련 데이터 변경 시 연관된 캐시 명시적 무효화 (Event-driven 방식 고려)
- TTL 설정: 캐시 TTL을 적절히 설정하여 데이터 최신성 보장 (규칙 11.1)
4. Plan 및 Group 도메인 연동 복잡성
- 문제: Plan과 Group 도메인 분리로 인한 도메인 간 연동 복잡성 증가
- 해결책:
- 이벤트 기반 연동: Plan/Group 도메인 변경 이벤트를 구독하여 IAM 정보 동기화
- 캐시 무효화 전략: 도메인 변경 시 관련 권한 캐시의 적절한 무효화
- 일관성 보장: 분산 도메인 간 데이터 일관성 유지 메커니즘 구현
5. 외부 도메인 의존성 관리
- 문제: User, Plan, Group, Auth, Audit 등 다수 도메인 의존성으로 인한 결합도 증가 및 장애 전파 위험
- 해결책:
- 비동기 통신: 도메인 간 통신 시 비동기 메시징(이벤트 발행/구독) 활용 고려
- API 계약: 명확한 API 계약 정의 및 버전 관리
- 회복성 설계: 외부 도메인 장애 시 대체 로직 또는 Graceful Degradation 구현
6. 사용자 유형 분리에 따른 권한 계산
- 문제: 서로 다른 스키마에 저장된 사용자 데이터에 대한 일관된 권한 계산 어려움
- 해결책:
- 추상화된 사용자 조회 인터페이스: 유형에 관계없이 동일한 방식으로 사용자 정보 접근
- 스키마 구분 처리 계층: 쿼리 생성 시 적절한 스키마 선택 로직 적용
- 권한 계산 알고리즘 통일: 동일한 알고리즘으로 모든 유형의 사용자 권한 계산
- 데이터 접근 캐싱 최적화: 유형별 데이터 접근 패턴 고려하여 캐시 설계
7. 서비스 간 인증 토큰 관리
- 문제: JWT 토큰의 보안성과 성능 간의 균형, 토큰 무효화 및 재발급 메커니즘의 복잡성
- 해결책:
- 토큰 캐싱 전략: 검증된 토큰 정보를 적절한 TTL(5분)로 캐싱하여 성능 향상
- 토큰 블랙리스트: 무효화된 토큰을 블랙리스트로 관리하여 보안 강화
- 자동 재발급 메커니즘: refresh token 미지원으로 토큰 만료 전 API Key를 사용한 자동 재발급으로 서비스 중단 방지
- 강력한 서명 알고리즘: RS256/ES256 사용으로 보안성 확보
8. Service Account 권한 관리
- 문제: Service Account별 세밀한 권한 제어와 최소 권한 원칙 적용의 어려움
- 해결책:
- 네임스페이스 기반 격리: 서비스별 권한 범위 명확히 분리
- 권한 템플릿: 서비스 유형별 표준 권한 템플릿 제공
- 정기적 권한 검토: 자동화된 권한 사용 분석 및 불필요한 권한 제거
- 권한 상속 체계: 서비스 계층에 따른 권한 상속 구조 설계
9. MAO 티어/동의/라우팅 이벤트
- TierEvaluated: 토큰의
tier/allowed_domains/data_persistence가 정책 입력으로 평가됨
- ConsentVersionMismatch: consent_version 불일치로 접근 거부 및 재동의 요구
- GuestRoutingDenied: guest/anonymous가 민감 리소스 접근 시 Deny-overrides 처리
- RequiredTierNotMet: 에이전트/툴
requiredTier 조건 불충족 이벤트
- PolicyCacheInvalidatedByTierChange: guest→member 승격 또는 consent 업데이트로 정책 캐시 무효화
변경 이력
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|
| 0.1.0 | 2025-04-20 | bok@weltcorp.com | 최초 문서 생성 |
| 0.2.0 | 2025-01-27 | bok@weltcorp.com | Group-Plan 독립성 반영: 권한 계산 경로 분리, GroupIntegration 집계 수정 |
| 0.2.0 | 2025-05-07 | bok@weltcorp.com | 사용자 유형 분리(환자/내부 운영자) 관련 내용 추가 |
| 0.3.0 | 2025-06-13 | bok@weltcorp.com | 서비스 간 인증 관련 이벤트, 명령, 정책, 핫스팟 추가 |
| 0.4.0 | 2025-07-16 | bok@weltcorp.com | Plan 및 Group 관련 내용을 별도 도메인으로 분리, 도메인 연동 방식으로 수정 (4절, 5절 수정, 집계 및 핫스팟 업데이트) |
| 0.5.0 | 2025-10-27 | assistant | identityLevel 평가 이벤트/명령 추가, 게스트 토큰 캐시 무효화 정책 반영 |
| 0.6.0 | 2025-11-26 | bok@weltcorp.com | MAO 라우팅을 위한 tier/consent/allowed_domains/data_persistence 이벤트 및 requiredTier 미충족/guest 차단 이벤트 추가 |