Questionnaire 도메인 이벤트 스토밍
본 문서는 Questionnaire 도메인의 이벤트 스토밍 워크샵 결과를 정리한 것입니다. 설문 관리, 설문 진행, 설문 응답, 설문 결과 및 피드백, 설문 스케줄링 등과 관련된 도메인 이벤트, 명령, 액터, 정책 등을 포함합니다.
바운디드 컨텍스트 참조
- Questionnaire 도메인은 사용자의 수면건강조사(설문) 데이터의 마스터 역할을 수행하며 여러 다른 도메인과 상호작용합니다.
- User 도메인: 사용자 식별 및 사용자 주기(UserCycle) 정보 참조.
- Authentication 도메인: 사용자 인증 및 권한 확인.
- Notification 도메인: 설문 참여 알림 전송.
- Report 도메인: 설문 결과를 바탕으로 한 보고서 생성.
- 상세한 컨텍스트 매핑은 각 도메인의
bounded-context.md 또는 requirements.md 문서를 참조하세요.
도메인 이벤트
도메인에서 발생하는 중요한 변화나 사실을 나타내는 이벤트들입니다.
1. 설문 관리 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| QuestionnaireCreated | 새 설문이 생성되었음 | CreateQuestionnaire |
| QuestionnaireUpdated | 설문 정보가 업데이트되었음 | UpdateQuestionnaire |
| QuestionnaireDeleted | 설문이 삭제되었음 | DeleteQuestionnaire |
| QuestionCreated | 설문 문항이 생성되었음 | CreateQuestion |
| QuestionUpdated | 설문 문항이 업데이트되었음 | UpdateQuestion |
| QuestionDeleted | 설문 문항이 삭제되었음 | DeleteQuestion |
| QuestionnaireRoundScheduled | 설문 회차가 예약되었음 | ScheduleQuestionnaireRound |
| QuestionnaireRoundStarted | 설문 회차가 시작되었음 | StartQuestionnaireRound |
| QuestionnaireRoundCompleted | 설문 회차가 완료되었음 (결과 요약 및 차트 데이터 생성 포함) | CompleteQuestionnaireRoundAndGenerateSummary |
| QuestionnaireRoundSkipped | 설문 회차가 사용자에 의해 나중에 하기로 선택되었음 | SkipQuestionnaireRound |
| QuestionnaireRoundExpired | 설문 회차의 유효 기간이 만료되었음 | 시스템 스케줄러(7일 경과 등) |
| QuestionnaireVersionCreated | 설문의 새 버전이 생성되었음 | CreateQuestionnaireVersion |
| QuestionnaireVersionActivated | 설문 버전이 활성화되었음 | ActivateQuestionnaireVersion |
| QuestionnaireVersionDeactivated | 설문 버전이 비활성화되었음 | DeactivateQuestionnaireVersion |
2. 설문 진행 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| QuestionnaireResponseCompleted | 전체 설문 응답이 제출 및 완료되었음 | SubmitFullQuestionnaireResponse |
| QuestionnaireResponseValidated | 설문 응답이 검증되었음 | ValidateQuestionnaireResponse (제출 시 내부 로직) |
| QuestionnaireResponseInvalid | 설문 응답 검증에 실패했음 | ValidateQuestionnaireResponse (오류 발생, 제출 시 내부 로직) |
3. 설문 결과 이벤트
| 이벤트 | 설명 | 트리거 |
|---|
| QuestionnaireScoreCalculated | 설문 점수가 계산되었음 | CalculateQuestionnaireScore |
| QuestionnaireFeedbackGenerated | 설문 피드백이 생성되었음 | GenerateQuestionnaireFeedback |
| QuestionnaireReportGenerated | 설문 보고서가 생성되었음 | GenerateQuestionnaireReport |
| QuestionnaireChartGenerated | 설문 결과 차트가 생성되었음 | GenerateQuestionnaireChart, CompleteQuestionnaireRoundAndGenerateSummary |
| FinalReportGenerated | 최종 보고서(모든 회차)가 생성되었음 | GenerateFinalReport |
| QuestionnaireChartGenerated | 설문 결과 차트가 생성되었음 | GenerateQuestionnaireChart |
| QuestionnaireReportExported | 설문 보고서가 PDF로 내보내기되었음 | ExportQuestionnaireReport |
4. 데이터 관리 이벤트 (GDPR 관련)
| 이벤트 | 설명 | 트리거 |
|---|
| QuestionnaireDataArchived | 비활성 사용자의 설문 데이터가 아카이빙되었음 | ArchiveQuestionnaireData (시스템 배치 또는 관리자 요청) |
| QuestionnaireDataRestored | 아카이빙된 설문 데이터가 복원되었음 | RestoreQuestionnaireData (사용자 재활성화 또는 관리자 요청) |
| QuestionnaireDataDeleted | 사용자의 설문 데이터가 삭제되었음 (탈퇴 또는 요청 시) | DeleteQuestionnaireData (사용자 요청 또는 관리자 요청) |
| QuestionnaireDataAnonymized | 설문 데이터가 익명화 처리되었음 (통계/연구 목적 등) | AnonymizeQuestionnaireData (자동 또는 관리자 요청) |
| DataRetentionPeriodElapsed | 데이터 보관 기간이 만료되었음 (자동 삭제/익명화 트리거) | 시스템 스케줄러 (5년 경과) |
| StartQuestionnaireRound | 설문 회차 시작 | QuestionnaireRoundStarted 이벤트 발생 |
| CompleteQuestionnaireRound | 설문 회차 완료 처리 | QuestionnaireRoundCompleted 이벤트 발생 |
| CompleteQuestionnaireRoundAndGenerateSummary | 설문 회차 완료 처리 및 결과 요약/차트 생성 | QuestionnaireRoundCompleted, QuestionnaireChartGenerated 이벤트 발생 |
| SkipQuestionnaireRound | 설문 회차 나중에 하기 처리 | QuestionnaireRoundSkipped 이벤트 발생 |
| CheckQuestionnaireSchedule | 사용자의 설문 일정 확인 | 설문 스케줄 정보 반환 |
정책(Policies)
시스템의 자동화된 비즈니스 규칙입니다.
설문 관리 정책
- 설문은 총 4회 실시되며, 각 회차별 시점이 정해져 있음:
- 1회차: 회원 가입 시 (필수, 스킵 불가)
- 2회차: 5주차(29-35일) 접속 중 최초 1회 (스킵 가능)
- 3회차: 9주차(57-63일) 접속 중 최초 1회 (스킵 가능)
- 4회차: 사용 종료 후(91일 이후) 접속 중 최초 1회 (필수, 스킵 불가)
- 설문의 진행 순서는 항상 동일하게 유지되어야 함 (ISI → DBAS-16 → PHQ9 → GAD7 → PSS → WIS).
- 이전 설문이 완료되어야 다음 설문 진행 가능.
설문 버전 관리 정책
- 각 설문 유형별로 활성화된 버전은 항상 유일해야 함 (동시에 두 개 이상의 버전이 활성화될 수 없음).
- 설문 버전 변경 시 이전 버전으로 수집된 데이터의 일관성을 유지해야 함.
- 설문 메타데이터 변경 이력은 불변하게 관리되어야 함.
- 사용자에게는 항상 최신 활성화된 버전의 설문이 제공되어야 함.
- 앱은 설문을 로컬에 캐싱하고, 서버의 최신 버전과 다를 경우 자동으로 갱신해야 함.
- 버전 변경은 사용자에게 직접적으로 노출되지 않고 자연스럽게 적용되어야 함.
설문 진행 정책
- 설문 중간 단계 응답은 저장되지 않고, 설문 단위로만 저장됨.
- 설문 응답 데이터 유효성 검증 규칙 적용.
- 완료된 설문은 수정 불가.
'나중에 하기' 정책
- '나중에 하기'는 2회차, 3회차 설문에만 제공됨.
- '나중에 하기' 선택 시 해당 설문은 7일간 유효함 (노출 시점부터 Day 7의 23시59분59초까지).
- 2회차 설문은 42일차까지만 '나중에 하기' 유효.
- 3회차 설문은 70일차까지만 '나중에 하기' 유효.
- 지정된 기간이 지나면 설문 기회 소멸.
설문 결과 정책
- 각 설문 유형별로 정의된 점수 계산 규칙 적용.
- 설문 완료 시 즉시 결과 피드백 제공.
- 설문 결과는 사용자별, 회차별로 이력 관리.
- 모든 회차 설문 완료 시 최종 보고서 생성.
Data Management & Privacy Policies (GDPR)
- 데이터 보관 기간: 설문 데이터는 5년간 보관 후 자동 파기 또는 익명화.
- 비활성 사용자 처리:
- 6개월간 비활성 시 'inactive' 상태로 표시.
- inactive 상태 1년 경과 시 데이터 아카이빙 (콜드 스토리지로 이동).
- 데이터 삭제: 사용자 탈퇴 또는 명시적 삭제 요청 시 개인 식별 정보 포함 모든 데이터 즉시 영구 삭제.
- 익명화: 완전 삭제 요청 없을 시, 통계/연구 목적으로 익명화하여 보관 가능 (재식별 불가 처리).
- 데이터 복원: 아카이빙된 사용자가 재활성화되면 데이터 자동 복원.
- 데이터 이동성: 사용자 요청 시 자신의 모든 설문 데이터를 표준 형식(JSON, CSV)으로 추출/제공.
- 보안 요구사항:
- 데이터 저장 시 AES-256 이상, 전송 시 TLS 1.2 이상 암호화.
- 콜드 스토리지 데이터 이중 암호화.
- 역할 기반 최소 권한 접근 제어 및 감사 로깅.
- 데이터 침해 시 GDPR 규정에 따른 통보 프로세스 준수.
다국어 지원 정책
- 설문 콘텐츠(제목, 설명, 문항)는 한국어/영어/독일어로 제공.
- 설문 결과 피드백은 한국어와 독일어로 제공.
- 사용자 선호 언어 설정에 따라 콘텐츠 제공.
성능 및 품질 정책
- 설문 결과 계산 및 저장은 3초 이내 완료.
- 설문 데이터 조회 API는 1초 이내 응답.
- 동시 사용자 100명 이상 처리 가능.
명령(Commands)
도메인 이벤트를 발생시키는 사용자 의도나 시스템 동작입니다.
1. 설문 관리 명령
| 명령 | 설명 | 영향 |
|---|
| CreateQuestionnaire | 새 설문 생성 | QuestionnaireCreated 이벤트 발생 |
| UpdateQuestionnaire | 설문 정보 업데이트 | QuestionnaireUpdated 이벤트 발생 |
| DeleteQuestionnaire | 설문 삭제 | QuestionnaireDeleted 이벤트 발생 |
| CreateQuestion | 설문 문항 생성 | QuestionCreated 이벤트 발생 |
| UpdateQuestion | 설문 문항 업데이트 | QuestionUpdated 이벤트 발생 |
| DeleteQuestion | 설문 문항 삭제 | QuestionDeleted 이벤트 발생 |
| ScheduleQuestionnaireRound | 설문 회차 예약 | QuestionnaireRoundScheduled 이벤트 발생 |
| StartQuestionnaireRound | 설문 회차 시작 | QuestionnaireRoundStarted 이벤트 발생 |
| CompleteQuestionnaireRound | 설문 회차 완료 처리 | QuestionnaireRoundCompleted 이벤트 발생 |
| SkipQuestionnaireRound | 설문 회차 나중에 하기 처리 | QuestionnaireRoundSkipped 이벤트 발생 |
| CheckQuestionnaireSchedule | 사용자의 설문 일정 확인 | 설문 스케줄 정보 반환 |
| CreateQuestionnaireVersion | 설문의 새 버전 생성 | QuestionnaireVersionCreated 이벤트 발생 |
| ActivateQuestionnaireVersion | 설문 버전 활성화 | QuestionnaireVersionActivated 이벤트 발생 |
| DeactivateQuestionnaireVersion | 설문 버전 비활성화 | QuestionnaireVersionDeactivated 이벤트 발생 |
| GetQuestionnaireVersions | 설문의 버전 목록 조회 | 설문 버전 정보 반환 |
2. 설문 진행 명령
| 명령 | 설명 | 영향 |
|---|
| SubmitFullQuestionnaireResponse | 전체 설문 응답 제출 | QuestionnaireResponseCompleted 이벤트 발생 (성공 시) |
| GetQuestionnaireProgress | 설문 진행 상태 조회 (제출된 응답 기준) | 설문 진행 상태 정보 반환 |
3. 설문 결과 명령
| 명령 | 설명 | 영향 |
|---|
| CalculateQuestionnaireScore | 설문 점수 계산 | QuestionnaireScoreCalculated 이벤트 발생 |
| GenerateQuestionnaireFeedback | 설문 피드백 생성 | QuestionnaireFeedbackGenerated 이벤트 발생 |
| GenerateQuestionnaireReport | 설문 보고서 생성 | QuestionnaireReportGenerated 이벤트 발생 |
| GenerateFinalReport | 최종 보고서(모든 회차) 생성 | FinalReportGenerated 이벤트 발생 |
| GenerateQuestionnaireChart | 설문 결과 차트 생성 | QuestionnaireChartGenerated 이벤트 발생 |
| ExportQuestionnaireReport | 설문 보고서 PDF 내보내기 | QuestionnaireReportExported 이벤트 발생 |
| GetQuestionnaireResults | 설문 결과 조회 | 설문 결과 정보 반환 |
| GetQuestionnaireHistory | 설문 이력 조회 | 설문 이력 정보 반환 |
| GetCumulativeQuestionnaireResults | 회차별 누적 설문 결과 조회 | 특정 회차까지의 누적 설문 결과 정보 반환 |
4. 데이터 관리 명령 (GDPR 관련)
| 명령 | 설명 | 영향 |
|---|
| ArchiveQuestionnaireData | 비활성 사용자의 설문 데이터 아카이빙 요청 | QuestionnaireDataArchived 이벤트 발생 |
| RestoreQuestionnaireData | 아카이빙된 설문 데이터 복원 요청 | QuestionnaireDataRestored 이벤트 발생 |
| DeleteQuestionnaireData | 사용자 설문 데이터 삭제 요청 (탈퇴/요청 시) | QuestionnaireDataDeleted 이벤트 발생 |
| AnonymizeQuestionnaireData | 설문 데이터 익명화 처리 요청 | QuestionnaireDataAnonymized 이벤트 발생 |
| ExportQuestionnaireData | 사용자 설문 데이터 내보내기 요청 (이동성 권리) | 데이터 추출 파일 생성 (이벤트 발생은 선택 사항) |
액터(Actors)
시스템과 상호작용하는 주체들입니다.
내부 액터
| 액터 | 설명 | 주요 명령 |
|---|
| 일반 사용자 (User) | 모바일 앱 등 서비스 이용자 | StartQuestionnaireResponse, SubmitQuestionResponse, SkipQuestionnaireRound |
| 시스템 관리자 (Admin) | 시스템 운영 및 설문 관리자 | CreateQuestionnaire, UpdateQuestionnaire, CreateQuestion, CreateQuestionnaireVersion, ActivateQuestionnaireVersion |
| 고객 지원 담당자 | 사용자 지원 및 문제 해결 담당자 | GetQuestionnaireResults, GetQuestionnaireHistory |
| 시스템 (System) | 자동화된 프로세스 실행 주체 | ScheduleQuestionnaireRound, CalculateQuestionnaireScore, GenerateQuestionnaireFeedback |
외부 시스템/도메인 액터
| 액터 | 설명 | 주요 상호작용 |
|---|
| User 도메인 | 사용자 정보 및 주기 관리 | 사용자 식별, 주기 정보(dayIndex) 참조, 설문 시점 판단을 위한 정보 제공 |
| Authentication 도메인 | 인증/인가 및 관련 기능 담당 | 사용자 인증, 권한 검증 |
| Notification 도메인 | 알림 발송 담당 | 설문 참여 필요 시 알림 발송 |
| Report 도메인 | 보고서 생성 및 관리 담당 | 설문 결과 데이터 수신, 보고서 생성, PDF 변환 |
6. GDPR Compliance & Data Lifecycle Management
문제: 데이터 보관 기간 준수, 삭제/익명화 처리, 아카이빙/복원, 데이터 이동성 보장 등 GDPR 요구사항 준수 및 데이터 생명주기 관리의 복잡성.
해결책:
- 데이터 상태(활성, 비활성, 아카이빙됨, 삭제됨)를 명확히 관리하고 상태 전이를 자동화하는 배치 작업 구현.
- 데이터베이스(주 DB, 콜드 스토리지) 전반에 걸쳐 사용자 데이터 식별 및 처리를 위한 일관된 메커니즘.
- 삭제/익명화/추출 요청 처리를 위한 전용 API 및 워크플로우 구축.
- 모든 데이터 처리 활동에 대한 상세한 감사 로그 기록.
- 정기적인 시스템 감사 및 테스트를 통한 규정 준수 검증.
변경 이력