Files
weeklyreport/claude_temp/01_회의록_TODO_작업계획서.md

19 KiB

회의록 + TODO 기능 작업계획서

작성일: 2026-01-10 예상 기간: 5~7일 우선순위: 1 (가장 쉬움)


1. 기능 개요

1.1 핵심 컨셉

  • 두서없이 작성한 회의 내용을 AI가 주제별로 정리
  • 결정/미결정 사항 자동 분류
  • 미결정 사항 중 액션 필요한 것을 TODO로 추출
  • TODO는 "언젠가 할 일" / "검토 필요한 것" / "보류된 것" 성격

1.2 회의록 유형

유형 설명
프로젝트 회의 특정 프로젝트에 종속
내부업무 회의 프로젝트 무관 (일반 내부 회의)

2. 데이터 모델

2.1 회의록 테이블 (wr_meeting)

CREATE TABLE wr_meeting (
    meeting_id SERIAL PRIMARY KEY,
    
    -- 기본 정보
    meeting_title VARCHAR(200) NOT NULL,           -- 회의 제목
    meeting_type VARCHAR(20) NOT NULL,             -- PROJECT: 프로젝트, INTERNAL: 내부업무
    project_id INTEGER REFERENCES wr_project_info(project_id),  -- 프로젝트 (선택)
    
    -- 일시/장소
    meeting_date DATE NOT NULL,                    -- 회의 일자
    start_time TIME,                               -- 시작 시간
    end_time TIME,                                 -- 종료 시간
    location VARCHAR(100),                         -- 장소
    
    -- 내용
    raw_content TEXT,                              -- 원본 내용 (위키 에디터 HTML)
    ai_summary TEXT,                               -- AI 정리 결과 (JSON)
    ai_status VARCHAR(20) DEFAULT 'NONE',          -- NONE: 미분석, PENDING: 미확정, CONFIRMED: 확정
    ai_processed_at TIMESTAMP,                     -- AI 처리 일시
    ai_confirmed_at TIMESTAMP,                     -- 확정 일시
    
    -- 메타
    author_id INTEGER NOT NULL REFERENCES wr_employee_info(employee_id),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_ip VARCHAR(50),
    created_email VARCHAR(100),
    updated_ip VARCHAR(50),
    updated_email VARCHAR(100)
);

-- 인덱스
CREATE INDEX idx_meeting_project ON wr_meeting(project_id);
CREATE INDEX idx_meeting_date ON wr_meeting(meeting_date);
CREATE INDEX idx_meeting_author ON wr_meeting(author_id);

2.2 회의 참석자 테이블 (wr_meeting_attendee)

CREATE TABLE wr_meeting_attendee (
    attendee_id SERIAL PRIMARY KEY,
    meeting_id INTEGER NOT NULL REFERENCES wr_meeting(meeting_id) ON DELETE CASCADE,
    
    -- 내부 직원 (선택)
    employee_id INTEGER REFERENCES wr_employee_info(employee_id),
    
    -- 외부 참석자 (직접 입력)
    external_name VARCHAR(50),                     -- 외부인 이름
    external_company VARCHAR(100),                 -- 외부인 소속
    
    -- 하나는 필수
    CONSTRAINT chk_attendee CHECK (employee_id IS NOT NULL OR external_name IS NOT NULL)
);

CREATE INDEX idx_attendee_meeting ON wr_meeting_attendee(meeting_id);

2.3 회의 안건 테이블 (wr_meeting_agenda)

CREATE TABLE wr_meeting_agenda (
    agenda_id SERIAL PRIMARY KEY,
    meeting_id INTEGER NOT NULL REFERENCES wr_meeting(meeting_id) ON DELETE CASCADE,
    
    agenda_no INTEGER NOT NULL,                    -- 안건 번호 (1, 2, 3...)
    agenda_title VARCHAR(200) NOT NULL,            -- 안건 제목
    agenda_content TEXT,                           -- 안건 상세 내용
    
    -- 결정 상태
    decision_status VARCHAR(20) NOT NULL DEFAULT 'PENDING',  
    -- DECIDED: 결정됨, PENDING: 미결정, IN_PROGRESS: 진행중
    
    decision_content TEXT,                         -- 결정 내용 (결정된 경우)
    
    created_at TIMESTAMP DEFAULT NOW()
);

CREATE INDEX idx_agenda_meeting ON wr_meeting_agenda(meeting_id);

2.4 TODO 테이블 (wr_todo)

CREATE TABLE wr_todo (
    todo_id SERIAL PRIMARY KEY,
    
    -- 출처 (회의록에서 추출 시)
    source_type VARCHAR(20),                       -- MEETING: 회의록, MANUAL: 직접생성
    meeting_id INTEGER REFERENCES wr_meeting(meeting_id),
    agenda_id INTEGER REFERENCES wr_meeting_agenda(agenda_id),
    
    -- 프로젝트 연결 (선택)
    project_id INTEGER REFERENCES wr_project_info(project_id),
    
    -- 내용
    todo_title VARCHAR(300) NOT NULL,              -- TODO 제목
    todo_description TEXT,                         -- 상세 설명
    
    -- 담당/상태
    assignee_id INTEGER REFERENCES wr_employee_info(employee_id),  -- 담당자 (선택)
    todo_status VARCHAR(20) NOT NULL DEFAULT 'PENDING',
    -- PENDING: 대기, COMPLETED: 완료, DISCARDED: 폐기
    
    completed_at TIMESTAMP,                        -- 완료 일시
    discarded_at TIMESTAMP,                        -- 폐기 일시
    discard_reason VARCHAR(200),                   -- 폐기 사유
    
    -- 주간보고 연계
    linked_report_id INTEGER REFERENCES wr_weekly_report(report_id),  -- 연계된 주간보고
    linked_at TIMESTAMP,                           -- 연계 일시
    
    -- 메타
    author_id INTEGER NOT NULL REFERENCES wr_employee_info(employee_id),
    created_at TIMESTAMP DEFAULT NOW(),
    updated_at TIMESTAMP DEFAULT NOW(),
    created_ip VARCHAR(50),
    created_email VARCHAR(100),
    updated_ip VARCHAR(50),
    updated_email VARCHAR(100)
);

-- 인덱스
CREATE INDEX idx_todo_assignee ON wr_todo(assignee_id);
CREATE INDEX idx_todo_status ON wr_todo(todo_status);
CREATE INDEX idx_todo_meeting ON wr_todo(meeting_id);
CREATE INDEX idx_todo_project ON wr_todo(project_id);

3. API 설계

3.1 회의록 API

Method Endpoint 설명
GET /api/meeting/list 회의록 목록 조회
GET /api/meeting/[id]/detail 회의록 상세 조회
POST /api/meeting/create 회의록 작성 (저장 시 AI 분석 자동 실행)
PUT /api/meeting/[id]/update 회의록 수정
DELETE /api/meeting/[id]/delete 회의록 삭제
POST /api/meeting/[id]/reanalyze AI 재분석 실행
POST /api/meeting/[id]/confirm 분석 결과 확정 (→ TODO 생성)

3.2 TODO API

Method Endpoint 설명
GET /api/todo/list TODO 목록 조회
GET /api/todo/my 내 TODO 목록
POST /api/todo/create TODO 직접 생성
PUT /api/todo/[id]/update TODO 수정
PUT /api/todo/[id]/complete TODO 완료 처리
PUT /api/todo/[id]/discard TODO 폐기 처리
DELETE /api/todo/[id]/delete TODO 삭제

3.3 주간보고 연계 API

Method Endpoint 설명
GET /api/todo/suggest-for-report 주간보고 작성 시 유사 TODO 추천
POST /api/todo/[id]/link-report TODO-주간보고 연계 + 완료 처리

4. 화면 설계

4.0 에디터 선택: Tiptap

Vue3 네이티브 지원, 가볍고 커스터마이징 우수한 Tiptap 사용

npm install @tiptap/vue-3 @tiptap/starter-kit @tiptap/extension-link @tiptap/extension-placeholder

4.1 회의록 목록 (/meeting)

  • 필터: 전체 / 프로젝트별 / 내부업무
  • 기간 검색
  • 카드형 또는 테이블형 목록
  • 분석 상태 표시: 미분석 / 미확정 / 확정

4.2 회의록 작성 (/meeting/write)

┌─────────────────────────────────────────────┐
│ 회의록 작성                                  │
├─────────────────────────────────────────────┤
│ 회의 유형: ○ 프로젝트 회의  ○ 내부업무 회의   │
│ 프로젝트:  [선택 (프로젝트 회의 시)]          │
│                                             │
│ 제목:     [_________________________]        │
│ 일시:     [2026-01-10] [14:00] ~ [16:00]    │
│ 장소:     [회의실 A]                         │
│                                             │
│ 참석자:   [내부직원 선택] [+ 외부 추가]       │
│           - 조효성, 서혜원                   │
│           - 홍길동 (고객사)                  │
│                                             │
│ 회의 내용: (Tiptap 위키 에디터)              │
│ ┌─────────────────────────────────────────┐ │
│ │ [B] [I] [U] [H1] [H2] [•] [1.] [Link]   │ │
│ │ ───────────────────────────────────────── │
│ │ 오늘 PIMS 관련해서 얘기했는데...         │ │
│ │ • 화면 디자인은 기존 거 쓰기로 했고      │ │
│ │ • DB 마이그레이션은 아직...              │ │
│ └─────────────────────────────────────────┘ │
│                                             │
│                    [임시저장]  [저장]        │
└─────────────────────────────────────────────┘

* 저장 시 자동으로 AI 분석 실행 → 상세 페이지로 이동

4.3 회의록 상세 보기 (/meeting/[id])

┌─────────────────────────────────────────────────────────┐
│ 📋 PIMS 프로젝트 킥오프 회의                    [수정]  │
├─────────────────────────────────────────────────────────┤
│ 일시: 2026-01-10 14:00~16:00                           │
│ 장소: 회의실 A                                          │
│ 참석자: 조효성, 서혜원, 홍길동(고객사)                  │
├─────────────────────────────────────────────────────────┤
│ 📝 회의 내용                                            │
│ ─────────────────────────────────────────────────────── │
│ (위키 에디터로 작성된 원본 내용 렌더링 - HTML)          │
│                                                         │
│ 오늘 PIMS 관련해서 얘기했는데...                        │
│ • 화면 디자인은 기존 거 쓰기로 했고                     │
│ • DB 마이그레이션은 아직 범위가...                      │
│                                                         │
├─────────────────────────────────────────────────────────┤
│ 🤖 AI 분석 결과                     [재분석] [확정하기] │
│ ─────────────────────────────────────────────────────── │
│                                                         │
│ 1. 화면 디자인                                          │
│    ✅ 결정: 기존 디자인 재사용                          │
│                                                         │
│ 2. DB 마이그레이션                                      │
│    ⏳ 미결정: 범위 미확정, 다음주 재논의                │
│    ☑ TODO: DB 마이그레이션 범위 정의                   │
│                                                         │
│ 3. 테스트 서버                                          │
│    ⏳ 진행중                                            │
│    ☑ TODO: AWS 견적 확인 (@조효성)                     │
│                                                         │
│ ─────────────────────────────────────────────────────── │
│ 상태: ⚠️ 미확정 (확정 시 선택된 TODO가 생성됩니다)      │
└─────────────────────────────────────────────────────────┘

* [확정하기] 클릭 → 체크된 TODO 항목 자동 생성
* 이미 확정된 경우: "✅ 확정됨 (2026-01-10)" 표시, TODO 목록 링크

4.4 회의록 수정 시 플로우

[수정 페이지에서 저장 클릭]
         ↓
    내용 변경 감지?
    ├─ NO → 그냥 저장
    └─ YES ↓
         
┌─────────────────────────────────────┐
│ 회의 내용이 변경되었습니다.         │
│                                     │
│ AI 분석을 다시 실행할까요?          │
│ (기존 분석 결과가 대체됩니다)       │
│                                     │
│      [예, 재분석]  [아니오]         │
└─────────────────────────────────────┘

* 이미 확정된 분석이 있으면 경고: 
  "기존 TODO가 유지됩니다. 새 분석 결과로 추가 TODO를 생성할 수 있습니다."

4.5 AI 분석 상태

상태 설명
미분석 NONE 아직 AI 분석 안됨
미확정 PENDING 분석 완료, 사용자 확정 대기
확정 CONFIRMED 확정됨, TODO 생성 완료

4.6 TODO 목록 (/todo)

  • 필터: 전체 / 내 TODO / 프로젝트별
  • 상태 필터: 대기 / 완료 / 폐기
  • 드래그앤드롭 또는 버튼으로 상태 변경

4.5 주간보고 작성 시 TODO 연계

┌─────────────────────────────────────────────┐
│ 💡 유사한 TODO가 있습니다                    │
├─────────────────────────────────────────────┤
│ 작성 중인 실적:                             │
│ "AWS 테스트 서버 구축 완료"                  │
│                                             │
│ 유사 TODO:                                  │
│ ⏳ "AWS 견적 확인" (1/8 회의에서 생성)       │
│                                             │
│ 이 TODO도 완료 처리할까요?                  │
│              [예, 완료 처리]  [아니오]       │
└─────────────────────────────────────────────┘

5. AI 프롬프트 설계

5.1 회의 내용 정리 프롬프트

당신은 회의록 정리 전문가입니다.
아래 회의 내용을 분석하여 JSON 형식으로 정리해주세요.

## 입력
- 회의 제목: {title}
- 프로젝트: {project_name}
- 참석자: {attendees}
- 원본 내용:
{raw_content}

## 출력 형식
{
  "agendas": [
    {
      "no": 1,
      "title": "안건 제목",
      "content": "상세 내용",
      "status": "DECIDED | PENDING | IN_PROGRESS",
      "decision": "결정 내용 (결정된 경우)",
      "todos": [
        {
          "title": "TODO 제목",
          "assignee": "담당자명 또는 null",
          "reason": "TODO로 추출한 이유"
        }
      ]
    }
  ],
  "summary": "전체 회의 요약 (2-3문장)"
}

## 규칙
1. 안건은 주제별로 분리하여 넘버링
2. 결정된 사항은 DECIDED, 추후 논의는 PENDING, 진행중은 IN_PROGRESS
3. 미결정/진행중 사항 중 액션이 필요한 것은 todos로 추출
4. 담당자가 언급되면 assignee에 기록 (없으면 null)
5. JSON 외 다른 텍스트 출력 금지

6. 작업 일정

Phase 1: 기본 구조 (2일) 완료

  • 시작: 2026-01-11 17:05
  • 완료: 2026-01-11 17:45
  • 소요시간: 40분

작업 내용:

  • DB 테이블 생성 (meeting, attendee, agenda, todo) 기존 존재
  • Tiptap 에디터 컴포넌트 구성 ⚠️ textarea로 구현 (Tiptap 설치 필요)
  • 회의록 CRUD API
  • 회의록 목록/작성 화면

생성된 파일:

  • backend/api/meeting/list.get.ts
  • backend/api/meeting/create.post.ts
  • backend/api/meeting/[id]/detail.get.ts
  • backend/api/meeting/[id]/update.put.ts
  • backend/api/meeting/[id]/delete.delete.ts
  • frontend/meeting/index.vue
  • frontend/meeting/write.vue
  • frontend/meeting/[id].vue

Phase 2: AI 분석 연동 (2일)

  • 시작:
  • 완료:
  • 소요시간:

작업 내용:

  • 회의 내용 AI 분석 API (저장 시 자동 실행)
  • AI 정리 결과 → 안건 + TODO 추출 로직
  • 회의록 상세 화면 (원본 + AI 분석 결과)
  • 분석 결과 확정 기능 (→ TODO 자동 생성)

Phase 3: TODO 기능 (2일)

  • 시작:
  • 완료:
  • 소요시간:

작업 내용:

  • TODO CRUD API
  • TODO 목록/상세 화면
  • 상태 변경 기능 (대기/완료/폐기)
  • 담당자 지정 기능

Phase 4: 주간보고 연계 (1일)

  • 시작:
  • 완료:
  • 소요시간:

작업 내용:

  • 주간보고 작성 시 유사 TODO 감지 (AI)
  • TODO 완료 연계 처리 (확인 후 업데이트)
  • 테스트 및 버그 수정

작업 완료 결과

Phase별 작업 시간

Phase 작업 내용 시작 완료 소요시간
1 기본 구조 (DB, API, 화면) 01-11 17:05 01-11 17:45 40분
2 AI 분석 연동 - - -
3 TODO 기능 - - -
4 주간보고 연계 - - -
총 소요시간 -

생성/수정된 파일

구분 파일 작업
DB wr_meeting 신규 테이블
DB wr_meeting_attendee 신규 테이블
DB wr_meeting_agenda 신규 테이블
DB wr_todo 신규 테이블
API backend/api/meeting/*.ts 신규
API backend/api/todo/*.ts 신규
Frontend frontend/pages/meeting/*.vue 신규
Frontend frontend/pages/todo/*.vue 신규
Frontend frontend/components/editor/TiptapEditor.vue 신규
Utils backend/utils/openai.ts 수정 (프롬프트 추가)

7. 기술 스택

  • Backend: Nitro (H3) + PostgreSQL
  • Frontend: Nuxt3 + Vue3 + Bootstrap 5
  • 에디터: Tiptap (WYSIWYG 위키 에디터)
  • AI: OpenAI GPT-4o-mini
  • 인증: 기존 세션 기반 (requireAuth)

8. 향후 확장 고려

  1. 첨부파일: 회의자료/사진 업로드 (2단계)
  2. 알림: TODO 담당자에게 알림 발송
  3. 반복 회의: 정기 회의 템플릿
  4. 회의록 공유: 참석자 이메일 발송
  5. 음성 회의록: 녹음 파일 → 텍스트 변환 (STT)