Files
sodalive-ios/docs/20261016_유저_크리에이터_채팅_다중행_입력/prd.md
T

5.4 KiB

유저-크리에이터 채팅 다중행 입력 PRD

문서 정보

항목 내용
상태 구현·네이티브 하네스 검증 완료 / 실제 DM 통합 QA 미실행
작성일 2026-10-16
대상 iOS 유저-크리에이터 DM 입력창
결정권자 사용자, 조사 결과에 대한 진행하자 승인
계획 plan-task.md
리뷰 phase1-multiline-input.md
API 계약 기존 SEND_TEXT/textMessage 문자열 유지, 별도 변경 없음

1. 개요와 문제

현재 DM 입력창은 단일 행 TextField라 긴 메시지를 작성하며 앞뒤 문맥을 확인하기 어렵다. 입력창은 한 줄에서 시작해 최대 세 줄까지 확장되고, 그 이상은 입력창 안에서 스크롤해 확인할 수 있어야 한다.

2. 목표와 제외 범위

  • 목표: 내용 손실 없이 최대 세 줄 표시, 초과 내용 스크롤, Return 줄바꿈, 기존 전송 버튼 사용.
  • 제외: AI 채팅·커뮤니티 입력 변경, 글자 수 제한 추가, ViewModel/서버/DTO 변경, 새로운 공용 컴포넌트나 UIKit 래퍼, 날짜 구분선 변경.
  • 현재 브랜치 main을 유지한다. 별도 브랜치·worktree·원격 push는 만들지 않는다.

3. 사용자 흐름과 요구사항

ID 상태 요구사항 수용 기준 연결
INPUT-001 확정 입력 내용에 따라 1~3줄 높이로 자동 확장 1/2/3줄에서 높이가 증가하고 4줄 이상은 더 커지지 않음 P1-T1
INPUT-002 확정 세 줄 초과 내용은 내부 세로 스크롤 긴 내용이 잘리거나 전송 데이터에서 제거되지 않고 앞뒤 확인 가능 P1-T1
INPUT-003 확정 Return은 줄바꿈, 전송은 기존 버튼 Return으로 자동 전송하지 않으며 버튼 전송 후 입력이 비워짐 P1-T1
INPUT-004 확정 기존 전송 가드와 문자열 처리를 유지 미연결 상태 입력 금지, 공백·줄바꿈만 있는 메시지 전송 금지, 본문 중간 줄바꿈 보존 P1-T1
INPUT-005 확정 다중행에 맞춘 전송 버튼 하단 정렬 1~3줄 변화 시 버튼이 입력 영역 하단에 정렬되고 모서리가 글자를 가리지 않음 P1-T1, P1-GATE

4. 기술·UX 제약

  • 대상: SodaLive/Sources/V2/Main/Chat/UserCreatorChat/UserCreatorChatRoomView.swift의 inputBarView.
  • 기존 커뮤니티 입력 패턴처럼 TextField(..., axis: .vertical).lineLimit(1...3) 사용. 최소 iOS16.6에서 지원되는 iOS16 API다.
  • 별도 ScrollView, 문자 수 기준 높이 계산 또는 TextEditor로 교체하지 않는다. 스크롤 인디케이터는 시스템 동작을 사용하며 항상 표시되는 커스텀 바는 추가하지 않는다.
  • 전송 전 양끝 공백·줄바꿈 제거, 전송 시 키보드 닫기와 입력 비우기는 변경하지 않는다.
  • 기존 색상·14pt 글꼴·간격을 유지한다. 모서리는 다중행 글자 보호를 위해 필요하면 기존 커뮤니티의 고정 rounded-rectangle 반경20 패턴을 적용한다(구현 판단).
  • 입력 높이 증가에 따른 대화 영역 축소는 기존 VStack 배치를 따르며, 메시지 목록 스크롤 정책을 새로 설계하지 않는다.

5. 성공 기준

  • 한 줄에서 세 줄까지 확장, 초과 내용 내부 스크롤을 네이티브 UI로 확인했다. 내부 스크롤은 native contentOffset 조작으로 검증했다.
  • 실제 키보드/IME·클립보드 붙여넣기 및 터치 기반 전송·스크롤을 실제 DM에서 확인한다. native Return·삭제·비우기와 긴 문자열 상태 주입은 하네스에서 통과했다.
  • 기존 전송 버튼의 action과 입력 가능 조건을 보존하고 빌드·회귀 검사가 통과했다. 실제 전송 버튼 탭 검증과 구별한다.
  • 네이티브 하네스 검증과 실제 로그인 DM 검증의 범위를 구분해 기록했다.

6. 열린 질문과 외부 조건

제품 결정의 열린 질문은 없다. 서버의 줄바꿈 저장·재조회 보존 및 실제 채팅방에서의 키보드/목록 상호작용은 승인된 테스트 계정·roomId가 필요한 외부 검증이다. 클라이언트 JSON 인코딩만으로 서버 통과를 주장하지 않는다.

7. Decision Log

ID 결정 근거
DEC-001 조사 단계는 읽기 전용, 후속 진행하자부터 구현 사용자 승인 전 구현 금지 및 후속 승인
DEC-002 1~3줄·내부 스크롤·Return 줄바꿈·버튼 전송·하단 정렬 직전 조사 제안에 대한 사용자 승인
DEC-003 현재 main 유지, 제품 소스 한 파일의 최소 변경 사용자 현재 브랜치 작업 지시 및 기존 native 패턴

8. 구현·검증 기록

  • 제품 변경: inputBarView4줄 추가/4줄 삭제, commit 14b415e. 서버·ViewModel·날짜 목록·전송 handler는 변경하지 않았다.
  • 입력 높이1/2/3/4/8줄:17/34/50/50/50pt. 8줄 content134pt, 내부 offset0→84pt에서 전체 문자열 보존. Return은 줄바꿈만 넣고 삭제·초기화 후17pt로 축소됐다.
  • 최종 두 타깃 빌드와 기존12개 검사 스크립트/19회 실행 통과. 별도 신규 비즈니스 로직 테스트를 만들지 않았으며 native 동작·소스22검사 + PNG44검사로 증거를 검증했다.
  • 독립 코드 APPROVE, 최종 입력 캡처22장 시각 PASS. 실제 DM·서버·IME·터치·키보드/목록 연동 검증으로 확대하지 않는다.