AI 채팅 기능 - 유즈 케이스(DDD)

Entity 문서

용어 정리

기본 용어 정리
용어
정의
그룹(Group)
하나의 수업 단위를 의미. 학생·선생님이 소속될 수 있으며, 해당 그룹과 연관된 채팅방(ChatRoom) 이 존재할 수 있음.
채팅방(ChatRoom)
학생과 선생님 간의 N:1 대화가 이루어지는 공간.그룹에 연결될 수도, 연결되지 않을 수도 있음
채팅방 참여자(ChatRoomMember)
해당 채팅방에 실제로 들어와 있는 사람. 학생, 선생님으로 구분
메시지(Message)
채팅방 내에서 주고받는 텍스트/이미지/파일/이모티콘 등.
세션(Session)
“출석체크”, “액티비티 피드백”, 등, AI가 수행해야 할 대화 주제의 단위를 의미함
세션 인스턴스(SessionInstance)
Session(출석체크, 피드백 등)이라는 개념적 템플릿이, 실제 특정 채팅방에서 한 회차로 실행되는 구체적 실체
이슈(Issue)
다양한 도메인(ex. 학습/AI 에이전트/채팅 등)에서 발행된 이슈(이상 징후) 이벤트를 의미
실시간 대시보드(RealTimeDashboard)
UI 계층 / 선생님이 여러 학생의 학습 상황을 한눈에 모니터링할 수 있는 화면.
채팅 대시보드(ChatDashboard)
UI 계층 / 선생님이 여러 학생의 채팅과 학습 상황을 한 눈에 모니터링할 수 있는 화면
AI 답변(aiAnswer)
세션>워크플로우 매니저>액션을 통해 만들어진 LLM 답변을 의미함.
세션 - AI 사용 설정 관련 용어 정리
용어
정의
AI 사용 불가 세션
세션 테이블에서 use_ai 가 false 상태인 경우 → 대화 분류를 위한 세션을 만들었으나, 테스트를 위해 임시로 AI 사용을 막아둔 세션일 때 해당 옵션이 설정됨
AI 수동 발송
채팅방-세션 설정 테이블에서 level이 ‘수동 발송(MANUAL)’인 경우 → AI 답변을 선생님 컨펌을 거쳐야 발송
AI 자동 발송
채팅방-세션 설정 테이블에서 level이 ‘자동 발송(AUTO)’인 경우 → AI 답변을 선생님 승인 없이 즉시 발송
AI 사용 안함
채팅방-세션 설정 테이블에서 level이 ‘사용 안함(OFF)’인 경우 → AI 답변을 생성하지 않음

바운디드 컨텍스트(BC)

그룹

역할: 채팅과는 독립적으로 “수업(그룹)의 라이프사이클”을 관리(그룹 삭제 시 채팅방은 그대로 유지)
주요 모델 : Group
유즈케이스 예시
그룹 생성/삭제
그룹에 학생/선생님 추가/제거/조회

채팅

역할
채팅방과 메시지, 참여자 관리
메시지 전송/읽음/삭제, 알림, “채팅 대시보드” 등 채팅 중심 기능 담당
채팅방 내 세션 설정(특정 AI 세션 사용 여부 등)을 함께 다룰 수 있음
채팅 대시보드(여러 채팅방을 한꺼번에 볼 수 있는 UI)는 채팅 BC가 관리하는 데이터(채팅방·메시지·참여자)를 조회해 표시
“채팅 대시보드”는 도메인 모델(엔티티)이 아닌 애플리케이션 계층에서, 정보를 조회·집계해서 UI로 표현하는 형태
주요 모델
ChatRoom, ChatRoomMember, Message, ChatRoomSessionSetting
대표 유즈케이스
채팅방 생성/삭제/수정
참여자 추가/제거
메시지 전송/읽음/삭제/수정
세션 설정 생성/수정
채팅 대시보드 조회

모니터링

역할
이상 징후(이슈)가 발견되면, 선생님에게 알림을 전송하거나, 이슈 상태를 기록·관리 (예: “이슈 발생/해결 여부”)
AI 도메인, 학습 도메인, 채팅 도메인 등 여러 도메인에서 발생한 이벤트(주로 이슈 조건에 부합하는 이벤트)를 구독
MonitoringIssue로 이슈를 등록/갱신하고, “실시간 대시보드”나 “채팅 대시보드”로 전달될 알림/상태를 담당
알림이 전파되는 위치가 “채팅 대시보드”와 “실시간 대시보드” 모두 될 수 있으므로
Monitoring 에서 “이슈 발생”을 감지하고 이벤트를 전파하면 애플리케이션 계층(실시간 대시보드 UI, 채팅 대시보드 UI 등)에서 이를 구독하여 경고를 띄울 수 있음.
주요 모델
MonitoringIssue (예: 이슈 식별자, 유형, 상태(OPEN/RESOLVED), 관련 사용자/채팅방/그룹, 발생일시 등)
알림·이슈 상태 관리 로직
대표 유즈케이스
이벤트(IssueDetected) 구독 & 이슈 상태 등록
이슈 발생 시, 알림 전송 혹은 표시
이슈 해소(RESOLVE) 처리

AI 에이전트

역할
AI 세션(Session), 세션 인스턴스(SessionInstance) 정의 및 관리
AI 자동 응답 로직 (채팅 메시지에 대한 AI 답변)
이상 징후(이슈) 감지(“AI가 해결 못하는 상태” 등) → 이슈 감지 및 이벤트 발행 → 모니터링 BC에서는 해당 이벤트를 받아 후속 처리
주요 모델: Session, SessionInstance, SessionInstanceMessage
주요 기능: AI 응답 생성
Chat과 “메시지 주고받기”로 상호작용하지만, “대화 로직/시퀀스”는 AI 에이전트 내부에 존재

유즈 케이스

1. 그룹(Group) BC

그룹

1-1. 그룹 생성

1-2. 그룹 삭제

1-3. 그룹 인원 생성(학생/선생님 추가 및 이관)

1-4. 그룹 인원 삭제(학생/선생님 제거 및 이관)

출석 정보

1-5. 출석 정보 생성 (수업 시작) 5/16일 릴리즈 범위 제외

1-6. 출석 정보 업데이트 (수업 종료) 5/16일 릴리즈 범위 제외

2. 채팅(Chat) BC

채팅방

2-1. 채팅방 생성

2-2. 채팅방 조회

2-3. 채팅방 업데이트 5/16일 릴리즈 범위 제외

채팅방-참여자

2-4. 채팅방 참여자 생성

2-5. 채팅방 참여자 조회

2-6. 채팅방 참여자의 마지막 읽은 메시지 업데이트

2-7. 채팅방 참여자 삭제

(부록) 채팅방 참여자 생성/삭제 트리거별 시나리오 모아보기
메시지

2-8. 메시지 생성

2-9. 메시지 조회

2-10. 메시지 수정 5/16일 릴리즈 범위 제외

2-11. 메시지 삭제 5/16일 릴리즈 범위에서는 BE에서 구조만 우선 고려

채팅방-세션 설정

2-12. 채팅방-세션 설정 생성

2-13. 채팅방-세션 설정 업데이트

이모티콘

2-14. 이모티콘 조회 5/16일 릴리즈 범위 제외

2-15. 이모티콘 메시지 생성 5/16일 릴리즈 범위 제외

3. 모니터링(Monitoring) BC

3-1. 이슈 인스턴스 생성

3-2. 이슈 인스턴스 조회

3-3. 이슈 인스턴스 업데이트

4. AI Agent BC

세션 인스턴스

4-1. 세션 인스턴스 생성 BE에서만 구현

4-2. 세션 인스턴스 조회

AI 답변

4-3. AI 답변 생성

4-4. AI 답변 조회

AI 답변-상태

4-5. AI 답변-상태 생성

AI 답변 - 메시지

4-6. AI 답변 - 메시지 생성

기타

4-7. AI 사용 일시중지/재개

불변식 정리

그룹 (Group)

1.
그룹을 삭제(소프트 삭제)해도, 이미 연결된 채팅방은 그대로 유지된다
Group와 ChatRoom은 느슨한 연결. 그룹이 사라져도 ChatRoom 자체가 삭제되진 않음
2.
그룹에는 선생님이 최소 1명 이상 존재해야 한다
“수업”이라는 개념상 선생님 없는 그룹은 무효.
인원 제거 로직에서 이를 보장
3.
그룹 삭제 후에는 인원 추가/제거가 불가능하다
삭제된 그룹은 더 이상 운영되지 않는다는 전제

채팅방 (ChatRoom)

1.
채팅방에는 최소 한 명 이상의 선생님이 존재해야 한다
수업(그룹)에서 선생님이 전원 제거되지 않도록 정책을 둠.
만약 이 제약을 위반하면 대화 진행이 불가능해진다.
2.
소프트 삭제(deleted_at)된 채팅방에는 새 메시지를 전송할 수 없다
이미 비활성 상태가 된 방에는 대화를 이어가지 않는다는 정책
UI나 서버 로직에서 전송 자체를 막도록 처리
3.
채팅방 생성 시점에는 “적어도 1명의 참여자”가 있어야 한다

채팅방 참여자 (ChatRoomMember)

1.
(그룹, 채팅방, 사용자) 조합은 중복으로 존재할 수 없다
하나의 방에 같은 사용자(아이디)가 또다시 Insert되는 일은 금지
기존 참여자가 소프트 삭제 상태에서 다시 입장할 경우 delete된 건 다시 복구하지 않고, 새로운 row를 만듬
2.
참여자가 소프트 삭제된(deleted_at 설정) 이후에는 ‘읽음 상태’나 메시지 전송 등 행동 불가
이미 채팅방을 떠난 사람은 그 방의 기능을 이용할 수 없다.

메시지 (Message)

1.
메시지를 작성하는 사람은 ChatRoomMember여야 한다 (외부인 불가)
즉, 방에 참여하지 않은 사용자는 메시지 Insert 권한이 없음
메시지의 chat_room_member_id가 반드시 유효해야 한다.
2.
삭제된(deleted_at) 메시지는 ‘삭제됨’ 상태로 UI에 표시
DB에 레코드는 남지만, 실제 대화에서는 “이 메시지는 삭제되었습니다”로 표기
3.
메시지 삭제 권한은 작성자 본인과 선생님만 갖는다.
선생님 권한이 없는 경우, 본인지 작성한 메시지 이외의 상대방 메시지 삭제 불가
4.
메시지 수정 권한은 선생님만 제한적으로 갖는다.
일반 학생은 수정 불가

채팅방-세션 설정(chatRoomSessionSetting)

1.
세션 설정 level이 ‘자동 발송 혹은 수동 발송’ 상태일 때만 AI가 자동 응답을 생성한다
“level”이 사용 안함인 경우 메시지 생성을 하지 않음