Co-Talk PRD (Product Requirements Document)
버전 2.0 - 2026-01-29 업데이트
Co-Talk은 “Co”를 통해 다양한 형태의 의미 있는 대화를 연결하는 플랫폼입니다.
- Couple Talk: 커플 간의 깊은 소통
- Community Talk: 커뮤니티의 활발한 대화
- Co-work Talk: 협업을 위한 효율적 소통
- Communication Talk: 모든 형태의 커뮤니케이션
1. 제품 개요
1.1 제품 목적
Co-Talk은 대화에 집중한 커뮤니케이션 플랫폼입니다.
- Couple Talk: 커플 간의 깊은 대화와 소통
- Community Talk: 공통 관심사를 가진 집단 간의 의미 있는 대화
- Co-work Talk: 협업과 업무를 위한 효율적인 커뮤니케이션
초기에는 1:1 대화에 집중하여, 불필요한 기능 없이 진정한 대화 경험을 제공합니다.
특정 목적을 가진 관계(커플, 팀, 커뮤니티 등)에서 대화 자체에 집중할 수 있는 환경을 만듭니다.
1.2 타겟 사용자
- 커플: 깊은 대화와 소통을 중시하는 커플
- 특정 목적 집단: 공통 관심사나 목표를 가진 소규모 그룹
- 협업 팀: 업무나 프로젝트를 위한 효율적인 소통이 필요한 팀
- 대화 중심 사용자: 메신저의 복잡한 기능보다 대화 자체에 집중하고 싶은 사용자
1.3 핵심 가치 제안
- 대화 집중: 불필요한 기능 없이 대화에만 집중하는 깔끔한 인터페이스
- 의미 있는 관계: 특정 목적을 가진 관계에서의 진정한 커뮤니케이션
- 실시간성: 즉각적이고 자연스러운 대화 흐름
- 안정성: 메시지 손실 없는 신뢰할 수 있는 통신
2. 기능 요구사항
2.1 사용자 계정 관리 (P0)
2.1.1 회원가입
- 기능 설명: 새로운 사용자가 서비스에 가입
- 입력: 이메일, 비밀번호, 닉네임
- 출력: 회원가입 성공/실패
- 검증 규칙:
- 이메일 형식 검증
- 비밀번호 최소 8자 이상
- 닉네임 중복 불가
- 예외 처리:
- 중복 이메일: “이미 가입된 이메일입니다”
- 중복 닉네임: “이미 사용 중인 닉네임입니다”
2.1.2 로그인
- 기능 설명: 기존 사용자가 서비스에 접속
- 입력: 이메일, 비밀번호
- 출력: 로그인 성공 시 세션 토큰 발급
- 예외 처리:
- 잘못된 이메일/비밀번호: “이메일 또는 비밀번호가 올바르지 않습니다”
2.1.3 로그아웃
- 기능 설명: 현재 세션 종료
- 출력: 로그인 화면으로 이동
2.1.4 프로필 설정
- 기능 설명: 사용자 기본 정보 설정 및 수정
- 입력: 닉네임, 프로필 사진 (선택)
- 출력: 프로필 정보 저장 완료
- 제약사항:
- 닉네임은 2-20자
- 프로필 사진은 초기에는 텍스트 아바타로 대체 가능
2.2 친구 관리 (P0)
2.2.1 친구 검색
- 기능 설명: 다른 사용자를 검색하여 친구 추가
- 입력: 닉네임, 이메일, 또는 전화번호
- 출력: 검색 결과 리스트 (닉네임, 이메일, 프로필 사진)
- 검색 규칙:
- 부분 일치 검색 지원
- 본인 계정은 검색 결과에서 제외
- 이미 친구인 사용자는 “친구” 표시
2.2.2 친구 요청 보내기
- 기능 설명: 검색한 사용자에게 친구 요청 전송
- 입력: 대상 사용자 ID
- 출력: 친구 요청 전송 완료
- 예외 처리:
- 이미 친구인 경우: “이미 친구입니다”
- 이미 요청을 보낸 경우: “이미 친구 요청을 보냈습니다”
2.2.3 친구 요청 수락/거절
- 기능 설명: 받은 친구 요청에 대한 응답
- 입력: 요청 ID, 수락/거절 선택
- 출력:
- 수락: 친구 목록에 추가, 채팅방 자동 생성
- 거절: 요청 삭제
2.2.4 친구 목록 조회
- 기능 설명: 현재 친구 목록 확인
- 출력: 친구 리스트 (닉네임, 프로필 사진, 최근 메시지 미리보기)
- 정렬: 최근 대화 순으로 정렬
2.2.5 친구 삭제
- 기능 설명: 친구 관계 해제
- 입력: 친구 ID
- 출력: 친구 삭제 완료
- 영향: 채팅방은 유지되지만 친구 목록에서 제거
2.3 1:1 채팅 (P0)
2.3.1 채팅방 생성
- 기능 설명: 친구와의 채팅방 자동 생성
- 트리거: 친구 요청 수락 시 자동 생성
- 출력: 채팅방 ID
2.3.2 채팅방 목록 조회
- 기능 설명: 사용자의 모든 채팅방 목록 확인
- 출력: 채팅방 리스트
- 상대방 닉네임
- 최근 메시지 미리보기 (최대 50자)
- 최근 메시지 시간
- 읽지 않은 메시지 수
- 정렬: 최근 메시지 시간 순 (내림차순)
2.3.3 채팅방 입장
- 기능 설명: 특정 채팅방으로 이동하여 대화 확인
- 입력: 채팅방 ID
- 출력: 채팅방 화면
2.3.4 채팅방 나가기
- 기능 설명: 채팅방에서 나가기 (채팅방 삭제 아님)
- 출력: 채팅 목록으로 이동
- 참고: 채팅방은 유지되며, 다시 입장 가능
2.4 메시지 기능 (P0)
2.4.1 메시지 전송
- 기능 설명: 텍스트 메시지 전송
- 입력: 채팅방 ID, 메시지 내용
- 출력: 전송된 메시지 표시
- 검증 규칙:
- 메시지 내용 필수
- 최대 길이: 1000자
- 빈 메시지 전송 불가
- 메시지 구조:
- 메시지 ID
- 발신자 ID
- 수신자 ID
- 내용
- 전송 시간
- 읽음 여부
2.4.2 메시지 수신
- 기능 설명: 상대방으로부터 메시지 수신
- 출력: 채팅방에 메시지 표시
- 알림: 채팅 목록에 읽지 않은 메시지 수 표시
2.4.3 메시지 히스토리 조회
- 기능 설명: 채팅방 입장 시 이전 메시지 로드
- 입력: 채팅방 ID, 페이지네이션 파라미터
- 출력: 메시지 리스트 (최신순)
- 페이징:
- 초기 로드: 최근 50개
- 스크롤 업: 이전 50개씩 추가 로드
2.4.4 읽음 표시
- 기능 설명: 메시지 읽음 상태 표시
- 동작:
- 상대방이 메시지를 읽으면 “읽음” 표시
- 읽지 않은 메시지는 “1” 표시
- 업데이트 시점: 채팅방 입장 시 자동으로 읽음 처리
2.4.5 메시지 시간 표시
- 기능 설명: 메시지 전송 시간 표시
- 표시 형식:
- 오늘: “오후 3:30”
- 어제: “어제 오후 3:30”
- 이번 주: “월요일 오후 3:30”
- 그 외: “2024.01.15 오후 3:30”
2.5 실시간 통신 (P1)
2.5.1 실시간 메시지 수신
- 기능 설명: WebSocket을 통한 실시간 메시지 전달
- 동작:
- 메시지 전송 즉시 수신자에게 전달
- 채팅방에 있는 경우 즉시 화면에 표시
- 채팅 목록에 있는 경우 목록 업데이트
- 연결 관리:
- 로그인 시 WebSocket 연결
- 로그아웃 시 연결 해제
- 연결 끊김 시 자동 재연결
2.5.2 온라인 상태 표시 (선택)
- 기능 설명: 친구의 온라인/오프라인 상태 표시
- 출력: 친구 목록에 상태 표시
- 우선순위: P1 (초기에는 제외 가능)
3. 사용자 플로우
3.1 신규 사용자 플로우
1
2
3
4
5
6
7
8
9
10
11
12
13
| 1. 회원가입
↓
2. 로그인
↓
3. 프로필 설정 (닉네임)
↓
4. 친구 검색
↓
5. 친구 요청 보내기
↓
6. (상대방이 수락하면) 채팅방 자동 생성
↓
7. 메시지 전송/수신
|
3.2 기존 사용자 플로우
1
2
3
4
5
6
7
| 1. 로그인
↓
2. 채팅 목록 확인
↓
3. 채팅방 선택 또는 새 친구 추가
↓
4. 메시지 주고받기
|
4. 화면 구성
4.1 로그인 화면
- 이메일 입력 필드
- 비밀번호 입력 필드
- 로그인 버튼
- 회원가입 링크
4.2 회원가입 화면
- 이메일 입력 필드
- 비밀번호 입력 필드
- 닉네임 입력 필드
- 회원가입 버튼
4.3 채팅 목록 화면
- 헤더: 프로필 버튼, 친구 추가 버튼
- 채팅방 리스트:
- 상대방 프로필 사진/아바타
- 상대방 닉네임
- 최근 메시지 미리보기
- 시간 표시
- 읽지 않은 메시지 수 배지
4.4 친구 목록 화면
- 헤더: 뒤로가기, “친구” 타이틀
- 친구 리스트:
- 프로필 사진/아바타
- 닉네임
- 최근 메시지 미리보기 (있는 경우)
- 검색 버튼
4.5 친구 검색 화면
- 검색 입력 필드
- 검색 결과 리스트:
- 프로필 사진/아바타
- 닉네임
- 이메일
- 친구 추가 버튼 (또는 “친구” 표시)
4.6 채팅방 화면
- 헤더: 상대방 닉네임, 뒤로가기
- 메시지 영역:
- 내 메시지: 오른쪽 정렬, 파란색 배경
- 상대방 메시지: 왼쪽 정렬, 회색 배경
- 메시지 시간 표시
- 읽음 표시
- 입력 영역:
4.7 프로필 설정 화면
- 프로필 사진/아바타 (초기에는 텍스트 아바타)
- 닉네임 수정 필드
- 저장 버튼
5. 비기능 요구사항
5.1 성능
- 메시지 전송 응답 시간: 1초 이내
- 채팅방 목록 로드: 2초 이내
- 메시지 히스토리 로드: 2초 이내
- 동시 접속자: 초기 1,000명 목표
5.2 보안
- 비밀번호 해시 저장 (bcrypt)
- HTTPS 통신 필수
- JWT 토큰 기반 인증
- SQL Injection 방지
- XSS 방지
5.3 가용성
- 서비스 가동률: 99% 이상
- 메시지 손실 없음 보장
5.4 확장성
- 향후 그룹 채팅 지원 가능한 구조
- 파일 전송 기능 추가 가능한 구조
6. 구현 현황 및 제외 기능
6.1 구현 완료된 기능 ✅
핵심 기능 (P0)
| 기능 | 백엔드 | Flutter | 상태 |
|——|——–|———|——|
| 회원가입/로그인 | ✅ | ✅ | 완료 |
| JWT 인증 (Access + Refresh) | ✅ | ✅ | 완료 |
| 프로필 설정 | ✅ | ✅ | 완료 |
| 친구 검색/추가/삭제 | ✅ | ✅ | 완료 |
| 친구 요청 수락/거절 | ✅ | ✅ | 완료 |
| 1:1 채팅 | ✅ | ✅ | 완료 |
| 실시간 메시지 (WebSocket) | ✅ | ✅ | 완료 |
| 읽음 표시 (카톡 스타일) | ✅ | ✅ | 완료 |
| 메시지 히스토리/페이징 | ✅ | ✅ | 완료 |
확장 기능 (구현 완료)
| 기능 | 백엔드 | Flutter | 상태 |
|——|——–|———|——|
| 파일/이미지 전송 | ✅ | ✅ | 완료 |
| 메시지 삭제/수정 (5분 이내) | ✅ | ✅ | 완료 |
| 메시지 검색 | ✅ | ✅ | 완료 |
| 타이핑 인디케이터 | ✅ | ✅ | 완료 |
| 온라인 상태 표시 | ✅ | ✅ | 완료 |
| 푸시 알림 (FCM) | ✅ | ✅ | 완료 |
| 프로필 사진 업로드 | ✅ | ✅ | 완료 |
| 리액션 (이모지) | ✅ | ✅ | 완료 |
| 메시지 답장 | ✅ | ✅ | 완료 |
| 메시지 전달 | ✅ | ✅ | 완료 |
| Rate Limiting | ✅ | - | 완료 |
6.2 부분 구현 기능 🚧
| 기능 |
백엔드 |
Flutter |
비고 |
| 그룹 채팅 |
✅ API 완료 |
❌ UI 없음 |
그룹 생성 화면 필요 |
6.3 미구현 기능 ❌
| 기능 |
우선순위 |
비고 |
| 이모티콘/스티커 팩 |
P2 |
커스텀 스티커 |
| 음성 메시지 |
P3 |
녹음 및 재생 |
| 영상/음성 통화 |
P3 |
WebRTC 필요 |
| 차단 기능 |
P2 |
사용자 차단 |
6.4 기술 스택 (현재)
| 영역 |
기술 |
| Backend |
Java 25, Spring Boot 3.5, PostgreSQL, Redis |
| Frontend |
Flutter (iOS, Android) |
| 실시간 |
WebSocket (STOMP), Redis Pub/Sub |
| 파일 저장 |
MinIO (S3 호환) |
| 푸시 |
Firebase Cloud Messaging |
| 인증 |
JWT (Access + Refresh Token) |
| 모니터링 |
Prometheus, Zipkin, Loki |
| 배포 |
Docker, Kubernetes |
6.5 플랫폼 전략 (현재)
- 현재: Flutter 모바일 앱 (iOS, Android)
- 향후: Flutter Web/Desktop 확장 가능
7. 성공 지표 (KPI)
7.1 사용자 지표
- 일일 활성 사용자 (DAU)
- 주간 활성 사용자 (WAU)
- 월간 활성 사용자 (MAU)
- 사용자 유지율 (7일, 30일)
7.2 참여 지표
- 일일 메시지 전송 수
- 사용자당 평균 채팅방 수
- 사용자당 평균 친구 수
- 평균 세션 시간
7.3 품질 지표
- 메시지 전송 성공률 (99% 이상)
- 서비스 에러율 (1% 미만)
- 평균 응답 시간
8. 로드맵
✅ Phase 1 - MVP (완료)
- 회원가입/로그인, JWT 인증
- 친구 관리 (검색, 요청, 수락/거절, 삭제)
- 1:1 실시간 채팅
- 읽음 표시 (카톡 스타일)
✅ Phase 2 - 확장 기능 (완료)
- 프로필 사진 업로드
- 파일/이미지 전송
- 메시지 삭제/수정
- 타이핑 인디케이터
- 온라인 상태 표시
- 푸시 알림 (FCM)
- 메시지 검색
- 리액션, 답장, 전달
🚧 Phase 3 - 진행 중
📋 Phase 4 - 예정
9. 리스크 및 대응 방안
9.1 기술적 리스크
- WebSocket 연결 불안정: 자동 재연결 로직 구현
- 메시지 손실: 메시지 큐 및 재전송 메커니즘
9.2 사용자 경험 리스크
- 친구가 없는 초기 사용자: 친구 검색 기능 강화
- 메시지 전송 실패: 명확한 에러 메시지 및 재시도 버튼
10. 참고 사항
- 모든 날짜/시간은 서버 시간 기준 (Asia/Seoul)
- 메시지 ID는 Snowflake ID 사용
- API 날짜 형식: ISO 8601 (
2026-01-29T17:01:34)
- 현재 플랫폼: Flutter 모바일 앱 (iOS, Android)
변경 이력
| 버전 |
날짜 |
변경 내용 |
| 1.0 |
2024-01 |
초기 PRD 작성 |
| 2.0 |
2026-01-29 |
구현 현황 반영, 로드맵 업데이트, 기술 스택 현행화 |