문서 안의 팀 결정 필요 표시는 아직 팀 합의가 안 된 항목입니다. 팀 회의에서 이 표시만 훑으면 결정 안건 리스트가 됩니다. 원본은 같은 저장소의 마크다운 문서(01~06)이며, 결정 사항은 양쪽에 함께 반영하세요.
DOCUMENT 01
프로젝트계획서
1. 프로젝트 개요
사람과의 대화를 AI가 대신 기억하고 관계 맥락을 축적해, 다음 만남에서 자연스럽게 이어갈 수 있도록 돕는 서비스
배경
현대인은 만나는 사람과 기억해야 할 대화가 계속 늘어나지만, 뇌의 용량은 그대로다. 지난 대화는 흐릿해지고, 같은 질문을 반복하고, 관계의 맥락이 끊어진다.
기존 도구(메모 앱, 회의록, 채팅 기록)는 정보를 문서 단위 로 저장한다. 정보가 사람을 따라 축적되지 않아, 필요할 때 찾아내는 일은 여전히 사람의 몫이다.
이 문제는 기억력의 문제가 아니라 구조의 문제 다. 해결 방향은 정보를 사람 기준으로 구조화 하는 것이다.
핵심 컨셉
대화 → 요약 → 사람 매핑 → 날짜별 기록 → 관계 기억 축적
기록의 기본 단위가 다르다: 기존 서비스는 회의/문서 단위, 우리는 사람 단위
주 사용 장면은 1:1 대화 (영업 미팅, 커피챗, 상담, 인터뷰)
입력은 녹음 단일 채널 : 1:1 대화 녹음 + 개인 녹음(본인 단독 음성 메모) 2가지 (기록 부담 최소화)
2. 경쟁 지형과 차별점
구분 대표 서비스 기록 단위 주 채널
미팅 AI 클로바노트, Granola, Otter, Fathom 회의 단위 음성
노트 앱 Notion, Evernote 문서 단위 텍스트
AI 네이티브 CRM Lightfield, Day AI, folk 사람/딜 단위 이메일·캘린더 등 디지털 흔적
명함/인맥 리멤버 사람 단위 명함
본 서비스 — 사람 단위 대면·음성 (1:1 대화)
해외 AI 네이티브 CRM은 이메일 등 디지털 채널의 자동 수집에 집중한다. 한국의 관계 형성은 대면·전화·커피챗 비중이 높아 디지털 흔적에 남지 않는 영역이 크다. 음성 우선 + 대면 1:1 + 사람 단위 축적 이 본 서비스의 포지션이다.
주의할 통념: 기록 도구가 죽는 첫 번째 이유는 기능 부족이 아니라 입력 부담 이다. 녹음 시작을 얼마나 무의식적으로 만드느냐가 리텐션의 핵심 변수다.
3. 목표와 성공 기준
MVP 출시 — 1:1 대화 녹음 → AI 요약 → 사람별 타임라인 축적이 동작하는 모바일 앱
클로즈드 베타 운영 — 30~50명 규모, 유지율과 녹음 빈도 측정
모두의 창업 프로그램 산출물 제출 — P-S-S-D 사업계획서, 활동보고서
지표 정의 목표
유지율 베타 시작 후 N주차 잔존 사용자 비율 팀 결정 필요
녹음 빈도 사용자당 주간 대화 기록 수 팀 결정 필요
재조회율 기록한 인물 정보를 다시 열람하는 비율 팀 결정 필요
4. 범위
MVP 범위 (In Scope)
인물 등록/관리 (수동)
1:1 대화 녹음 (상대방 동의 절차 포함)
개인 녹음 (상대방 없이 본인 단독 음성 메모 — 동의 절차 불필요)
STT (음성 → 텍스트 변환)
AI 요약 및 키워드 추출
사람별 타임라인 축적 및 조회
회의(다자 대화)는 별도 항목으로 기록하여 1:1 구조를 해치지 않음
확장 범위 (Out of Scope — MVP 이후 백로그)
MVP 검증 결과에 따라 우선순위를 재조정한다. MVP 단계에서는 설계에 반영하지 않는다.
캘린더·메신저·연락처 연동 (자동 기록)
스마트워치 앱 (녹음 시작 편의성)
스마트글래스 (실시간 정보 표시), 안면 스캔
장소 저장 기능 (미팅 장소, 함께 간 곳)
회의록 전용 기능 고도화, 화자 구분
다국어 지원 (영어/일본어/중국어)
유료 플랜 (인물 수 제한, STT 분량 제한 기반)
5. 리스크 관리
# 리스크 영향 대응
R1 녹음 습관이 형성되지 않아 리텐션 저하 (기록 도구의 최대 사망 원인) 높음 녹음 시작 동선 최소화 설계, 베타에서 녹음 빈도 최우선 측정, 인터뷰로 동선 검증
R2 녹음 동의의 심리적 허들 높음 동의 요청 UX 연구 (인터뷰 항목에 포함), 동의 없으면 녹음이 시작되지 않는 구조를 기본 원칙으로 유지
R3 법적 리스크: 개인 메모 수준을 넘어 업무 목적 체계적 DB화로 판단될 경우 개인정보보호법 적용 중간 서비스화 단계에서 법적 재검토 (모두의 창업 법률 멘토링 활용), 최소 수집 원칙, B2B 확장 전 별도 검토
R4 AI API(STT·LLM·임베딩·리랭커) 비용 중간 검증 단계는 지원 API(무료)로 비용 0. 전환 후 사용량 상한 설정, 요금제 설계는 베타 데이터 기반으로 결정
R5 자본력 있는 경쟁사의 유사 기능 출시 (Lightfield 등) 중간 대면·음성·한국어 시장에 집중, 사람 단위 축적 데이터의 선점 효과
R6 프로그램 일정 (멘토링 7/22 종료) 대비 산출물 지연 중간 사업계획서를 개발과 병행하여 우선 작성
산출물
본 문서 6종 (프로젝트계획서, 요구사항정의서, 아키텍처정의서, 화면기능정의서, 백엔드작업일정, 기술스택)
P-S-S-D 사업계획서 (문제 인식 → 실현가능성 → 성장전략 → 향후 발전방안)
활동보고서 (프로그램 양식)
MVP 앱 및 소스코드 저장소 (저장소 분리 예정, 팀 결정 필요 )
DOCUMENT 02
요구사항정의서
1. 사용자 정의
핵심 타겟 (Primary)
사람과의 대화 및 관계 관리가 업무 성과와 직접 연결되는 직군.
회의가 많은 직군 (PM, 기획자)
영업 및 고객 미팅 직군
인터뷰어 / 상담사 / HR 담당자
확장 타겟 (Secondary)
다양한 사람을 자주 만나는 사용자
이전 대화를 기억하고 자연스럽게 이어가고 싶은 모든 개인
유저 스토리
ID 스토리
US-01 영업 담당자로서, 고객 미팅 직후 별도 타이핑 없이 대화 내용이 정리되기를 원한다. 미팅 사이에 기록할 여유가 없기 때문이다.
US-02 PM으로서, 다음 미팅 전에 상대방과의 지난 논의 맥락을 1분 안에 확인하고 싶다. 같은 질문을 반복하지 않기 위해서다.
US-03 상담사로서, 특정 인물을 검색하면 그 사람과의 모든 대화 이력이 시간순으로 보이기를 원한다. 파일을 뒤지고 싶지 않기 때문이다.
US-04 사용자로서, 녹음 전에 상대방 동의를 확인하는 절차가 명확하기를 원한다. 법적·윤리적 문제를 피하기 위해서다.
US-05 사용자로서, AI가 정리한 요약이 틀렸을 때 직접 수정할 수 있기를 원한다. 잘못된 기억이 축적되면 안 되기 때문이다.
2. 기능 요구사항 (Functional Requirements)
우선순위: 필수 MVP 출시 조건 · 권장 MVP 내 포함 목표 · 선택 여유 시
인물 관리
ID 요구사항 우선순위
FR-101 사용자는 인물을 등록할 수 있다 (이름 필수; 역할/직무, 소속, 관심사, 메모 선택) 필수
FR-102 사용자는 인물 정보를 수정·삭제할 수 있다. 인물 삭제 시 연결된 대화 기록 처리 방식을 확인받는다 필수
FR-103 사용자는 인물 목록을 조회하고 이름으로 검색할 수 있다 필수
FR-104 동명이인을 구분할 수 있다 (소속/메모 등 부가 정보로 식별) 권장
대화 기록 (입력)
ID 요구사항 우선순위
FR-201 사용자는 인물을 선택하고 1:1 대화 녹음을 시작할 수 있다 필수
FR-202 1:1 대화 녹음은 시작 전 상대방 동의 확인 단계를 거쳐야 하며, 동의 확인 없이 녹음이 시작되지 않는다 (법적 검토 문서의 기본 원칙)필수
FR-203 사용자는 녹음을 일시정지/재개/종료할 수 있다 필수
FR-205 다자 회의는 "회의" 유형으로 구분하여 기록할 수 있다 (1:1 타임라인 구조와 분리) 권장
FR-206 녹음 중 앱이 중단되어도 그 시점까지의 녹음이 보존된다 권장
FR-207 사용자는 인물을 선택하고 개인 녹음 (상대방 없이 본인 단독 음성 메모)을 시작할 수 있다. 개인 녹음은 동의 확인 단계를 거치지 않는다 필수
FR-204 (텍스트 입력)는 MVP 범위 조정으로 삭제됨 (2026-07-06). 입력은 녹음 단일 채널로 통일.
변환 및 AI 처리
ID 요구사항 우선순위
FR-301 시스템은 녹음된 음성을 텍스트로 변환한다 (STT, 한국어 우선) 필수
FR-302 시스템은 변환된 텍스트에서 요약을 생성한다 필수
FR-303 시스템은 키워드(관심사, 주요 이슈)를 추출한다 필수
FR-304 시스템은 추출 결과를 해당 인물의 프로필 정보(관심사/키워드)에 반영할 것을 제안한다 권장
FR-305 사용자는 AI 처리 결과(요약, 키워드)를 저장 전에 확인하고 수정할 수 있다 필수
FR-306 AI 처리 실패 시(네트워크, API 오류) 원본 음성은 보존되고 재시도할 수 있다 필수
타임라인 및 조회
ID 요구사항 우선순위
FR-401 확정된 기록은 해당 인물의 타임라인에 날짜순으로 축적된다 필수
FR-402 사용자는 인물 상세 화면에서 프로필과 타임라인을 함께 조회할 수 있다 필수
FR-403 사용자는 개별 기록의 상세(요약 전문, 키워드)를 조회할 수 있다 필수
FR-404 사용자는 타임라인의 개별 기록을 수정·삭제할 수 있다 필수
FR-405 사용자는 키워드 또는 자연어("여행 얘기했던 사람")로 기록을 검색할 수 있다 — 시맨틱 검색, 인물 무관 전체 검색 (03 아키텍처 검색 흐름) 권장
FR-406 원본 녹음 파일 재생 기능 선택
계정 및 데이터 관리
ID 요구사항 우선순위
FR-501 사용자는 계정을 생성하고 로그인할 수 있다 (방식: 팀 결정 필요 이메일/소셜) 필수
FR-502 사용자는 자신의 전체 데이터를 삭제(탈퇴)할 수 있다 필수
FR-503 원본 음성 파일의 보존 정책을 설정할 수 있다 (요약 후 자동 삭제 / 보존) 권장
3. 비기능 요구사항 (Non-Functional Requirements)
ID 분류 요구사항
NFR-01 보안 대화 기록·인물 정보는 저장 시 암호화한다. 전송 구간은 TLS를 사용한다
NFR-02 개인정보 최소 수집 원칙. 서비스 제공에 불필요한 개인정보는 수집하지 않는다
NFR-03 개인정보 사용자 데이터는 본인만 접근 가능하다. 공유·조직 기능은 MVP 범위 외이며, 도입 시 개인정보보호법 재검토를 선행한다 (법적 검토 문서 참조)
NFR-04 성능 10분 분량 녹음 기준, 요약 완료까지 팀 결정 필요, 예: 2분 이내를 목표로 한다. 처리 중에도 앱 사용이 가능해야 한다 (비동기 처리)
NFR-05 플랫폼 모바일 앱 우선 (Android, iOS). 웹은 확장 범위
NFR-06 언어 한국어 STT/요약 품질을 우선한다. 다국어는 확장 범위
NFR-07 비용 AI API(STT·LLM·임베딩·리랭커) 호출량을 측정·제한할 수 있어야 한다 (사용자당 상한 설정 가능 구조)
NFR-08 신뢰성 녹음 원본은 AI 처리 성공 여부와 무관하게 유실되지 않는다
4. 제약사항 및 용어
제약사항
타인이 포함된 대화 의 동의 없는 녹음 기능은 제공하지 않는다 (제품 원칙이자 리스크 관리). 개인 녹음(본인 단독, FR-207)은 상대방이 없으므로 예외
MVP는 개인 사용 목적으로 한정한다. 제3자 공유·조직 단위 기능은 법적 재검토 전까지 구현하지 않는다
지원 기기: 스마트폰 (태블릿/워치/글래스는 확장 범위)
용어 정의
용어 정의
인물 (Person) 사용자가 관계를 기억하려는 대상. 본 서비스의 기본 축적 단위
대화 기록 (Conversation) 한 번의 기록 단위. 유형은 1:1 대화 녹음 또는 개인 녹음
개인 녹음 상대방 없이 사용자 본인이 특정 인물에 대한 생각·메모를 말로 남기는 녹음. 동의 절차 불필요
타임라인 (Timeline) 특정 인물에 대한 대화 기록의 시간순 목록
관계 맥락 타임라인과 프로필(관심사, 이슈)이 누적되어 형성되는 인물별 종합 정보
DOCUMENT 03
아키텍처정의서
1. 설계 원칙
사람 단위 데이터 모델. 모든 기록은 Person에 귀속된다. 회의/문서 단위 구조를 만들지 않는다 (제품 차별점을 스키마 수준에서 보장).
입력 유실 금지. 녹음 원본은 AI 처리 파이프라인과 분리 저장한다. AI 처리는 실패·재시도 가능한 비동기 작업으로 취급한다.
동의 우선. 동의 확인은 클라이언트 UX가 아니라 도메인 규칙이다. 1:1 대화 유형 에서 동의 플래그 없는 녹음 세션은 서버가 거부한다 (개인 녹음은 본인 단독이므로 예외).
확장 기능은 스키마만 열어둔다. 캘린더 연동, 장소, 워치 등은 MVP에 구현하지 않되, 데이터 모델이 막지 않도록만 설계한다.
외부 AI 서비스 교체 가능. 외부 AI API(STT·LLM·임베딩·리랭커)는 전부 어댑터 뒤에 두어 공급자 교체가 코드 한 곳 수정으로 끝나게 한다 (지원 API 종료 대비 + 비용 협상력 확보).
2. 시스템 구성도
모바일 앱 Android / iOS 화면 · 녹음 모듈 · 로컬 임시 저장
↓ HTTPS (음성 업로드 · API 호출)
API 서버 인증 · 도메인 로직 (인물/기록/타임라인)
작업 큐 AI 처리 작업 대기
비동기 워커 STT → 요약 파이프라인
↓ 워커가 외부 API 호출 · 결과를 저장소에 기록
STT API 외부 서비스
LLM API 외부 서비스
임베딩/리랭커 API 외부 서비스 · 시맨틱 검색
주 DB 인물 · 기록 · 타임라인
오브젝트 스토리지 음성 파일
3. 핵심 파이프라인
앱 인물 선택 → 기록 유형 선택 (1:1 대화 / 개인 녹음) → 1:1 대화인 경우에만 동의 확인 → 녹음
앱 녹음 종료 → 음성 파일 업로드 (+ 유형, 동의 플래그, 인물 ID, 일시)
서버 원본 저장 (오브젝트 스토리지) + Conversation 레코드 생성 상태: PENDING
워커 STT 호출 → 전사 텍스트 저장 상태: TRANSCRIBED
워커 LLM 호출 → 요약·키워드·프로필 반영 제안 생성 상태: SUMMARIZED
앱 사용자에게 결과 제시 → 확인/수정 → 확정 상태: CONFIRMED
각 단계 실패 시 상태를 FAILED_*로 기록하고 원본을 보존, 재시도 가능 (FR-306, NFR-08)
개인 녹음은 동의 확인 단계만 건너뛰며 , 2단계 이후 파이프라인은 1:1 대화와 동일
장시간 녹음 대비 : STT API는 실행 시간 제한(504)이 있으므로, 일정 길이 이상의 오디오는 분할(청킹) 후 전사하고 결과를 이어 붙인다 (BE-14에서 기준 확정)
시맨틱 검색 흐름 (FR-405)
임베딩 + 리랭커로 "그때 여행 얘기했던 사람" 같은 자연어 검색을 지원한다.
[색인] 기록 확정(CONFIRMED) 시 → 요약(+필요시 전사 청크) 임베딩 생성 → pgvector 저장
[검색] 검색어 → 쿼리 임베딩 → pgvector 유사도 상위 N 후보 → 리랭커(/api/rerank) 재정렬 → 결과
벡터 저장은 PostgreSQL pgvector 확장 사용 — 별도 벡터 DB 불필요 (DB 단독 운용 원칙 유지)
임베딩 생성은 확정 시점의 비동기 잡으로 처리 (실패해도 기록 자체는 유효)
임베딩·리랭커 어댑터도 STT와 동일하게 교체 가능 구조로 (지원 종료 후 대체 확정 전까지)
4. 데이터 모델 차후 재정리
⚠️ 아래 모델은 방향성을 보여주는 참고 초안 이며 확정본이 아니다. 개발 착수 전 재정리한다 (ADR-7). 지금 단계에서 이 스키마대로 작성하지 말 것.
기획 문서의 데이터 구조(Person → 기본 정보/역할/관심사/Timeline/관계 맥락)를 정규화한 것.
id PK
user_id FK → USER
name 이름
role 역할/직무
affiliation 소속
memo 메모
id PK
person_id FK → PERSON
type ONE_ON_ONE | PERSONAL | MEETING
status PENDING … CONFIRMED
consent_confirmed 동의 확인 (ONE_ON_ONE 필수)
occurred_at 대화 일시
id PK
conversation_id FK
object_key 스토리지 경로
duration_sec 길이
transcript STT 결과
retention KEEP | DELETE_AFTER_SUMMARY
id PK
conversation_id FK
summary 사용자 수정 반영본
summary_original AI 원본
keywords JSON
profile_suggestions 프로필 반영 제안
id PK
person_id FK → PERSON
keyword 키워드
source_conversation_id FK
관계: USER 1—N PERSON · PERSON 1—N CONVERSATION · CONVERSATION 1—1 RECORDING · CONVERSATION 1—1 SUMMARY · PERSON 1—N PERSON_KEYWORD
설계 메모
타임라인은 별도 테이블이 아니라 CONVERSATION.occurred_at 기준 조회 뷰다 (상태 CONFIRMED만 노출)
type = ONE_ON_ONE이면서 consent_confirmed = false인 생성 요청은 서버가 거부한다 (설계 원칙 3). PERSONAL(개인 녹음)은 동의 플래그 불필요
SUMMARY.summary_original을 보존해 사용자 수정본과 AI 원본을 구분한다 (품질 개선 데이터로 활용)
확장 대비 여지: PERSON에 연락처/장소 컬럼 추가 가능, CONVERSATION.type에 값 추가 가능. MVP에서는 구현하지 않는다
5. 기술 스택
영역 선택 비고
모바일 앱 Flutter (확정) 녹음 품질·백그라운드 녹음 플러그인(record, flutter_background_service 등) 사전 검증 필수
API 서버 Spring Boot / Java (확정) API 전용 서버. AI API 호출(STT·LLM·임베딩)은 비동기 잡으로 분리
주 DB PostgreSQL (확정, 단독 운용) + pgvector 확장전사 원본 포함 전부 저장. 1시간 전사문 ≈ 100~200KB, TEXT 한도는 필드당 1GB이며 2KB 초과 값은 TOAST가 자동 압축·분리 저장. 임베딩 벡터는 pgvector로 저장 (시맨틱 검색)
오브젝트 스토리지 S3 호환 (AWS S3 / Cloudflare R2 / NCP Object Storage) 음성 파일. 국내 리전 권장 (개인정보)
작업 큐 Spring 기준: @Async+DB 잡 테이블 → 필요 시 Redis 큐로 승격 MVP는 단순한 것 우선. Kafka 등은 과설계
STT AI API 오마카세 /api/stt (지원, 2026-08-말까지) → 9월부터 클로바 스피치 또는 Whisper로 전환전환이 확정이므로 어댑터 인터페이스 필수 (설계 원칙 5). 전환 선정 기준: 한국어 인식률·단가 (ADR-2 / BE-24). 스펙 상세는 06 기술스택 4절
임베딩·리랭커 (검색) AI API 오마카세 /api/embedding, /api/rerank 시맨틱 검색용 (3절 검색 흐름). 지원 종료 후 대체 공급자 BE-24와 함께 결정
LLM (요약/추출) OpenAI API (테스트 기간) 어댑터 뒤에 두어 이후 전환 비용 최소화. ⚠️ 입력 데이터의 학습 활용 약관 확인 필수 (지원 API 포함)
인증 소셜 로그인 (카카오/구글) + 자체 이메일 타겟이 국내 직장인이면 카카오 우선 고려. ADR-4
인프라 AWS (방향 확정) 세부 구성(Lightsail / EC2+RDS / Elastic Beanstalk) 미정 — 학습 후 배포 전 결정 (ADR-6). 개발 단계는 로컬 Docker로 충분
전사문 한국어 전문검색(FR-405 확장)을 도입하게 되면 pg_trgm 또는 형태소 분석 확장이 필요하다. 검색 고도화 시점에 검토.
6. 보안 및 개인정보 설계
항목 설계
전송 암호화 전 구간 TLS
저장 암호화 DB 레벨 암호화 + 음성 파일 서버측 암호화(SSE). 민감 텍스트 필드 애플리케이션 레벨 암호화는 팀 결정 필요
접근 통제 모든 데이터는 user_id 스코프. 사용자 간 데이터 접근 경로 자체를 만들지 않음 (MVP)
원본 음성 사용자 설정에 따라 요약 확정 후 자동 삭제 옵션 (RECORDING.retention)
삭제권 탈퇴 시 전체 데이터 즉시 삭제 (스토리지 포함). 소프트 삭제(일정 기간 보관 후 완전 삭제) 여부 팀 결정 필요
AI 학습 방지 AI API(STT·LLM·임베딩·리랭커) 호출 시 데이터가 공급자 학습에 사용되지 않는 옵션/약관 확인 후 사용. 특히 무료/지원 API는 학습 활용 약관이 흔하므로 실사용자 데이터 전송 전 반드시 확인, 베타 사용자에게 고지
법적 경계 개인 메모 용도 한정. 조직 공유·체계적 DB화 기능 도입 시 개인정보보호법 재검토 선행 (법적 검토 문서 참조)
7. 결정 대기 목록 (ADR 백로그)
결정할 때마다 adr/ 디렉터리에 한 장씩 기록 권장.
# 결정 사항 상태
ADR-1 모바일 프레임워크 선택 ✅ 결정 — Flutter (2026-07-06)
ADR-2 AI API 공급자 부분 결정 — 개발·테스트: AI API 오마카세(STT·임베딩·리랭커, ~2026-08-말) + OpenAI LLM. 지원 종료 후 전환처(STT: 클로바 vs Whisper, 임베딩·리랭커 대체 포함)는 8월말 전 결정 (BE-24)
ADR-3 백엔드 프레임워크/언어 ✅ 결정 — Spring Boot / Java (2026-07-06)
ADR-4 인증 방식 미정 — 앱 개발 전
ADR-5 원본 음성 기본 보존 정책 (기본값: 삭제 vs 보존) 미정 — 앱 개발 전
ADR-6 인프라/배포 대상 부분 결정 — AWS 방향 확정 (2026-07-08). 세부 구성(Lightsail/EC2+RDS/EB)은 학습 후 배포 전 결정
ADR-7 DB 구성 확정 / 데이터 모델 재정리 DB는 ✅ 결정 — PostgreSQL 단독 + pgvector (2026-07-08 갱신). 데이터 모델 재정리는 미정 — 개발 착수 전, 임베딩 저장 테이블 포함
DOCUMENT 04
화면기능정의서
1. 화면 목록
ID 화면명 목적 관련 요구사항
SCR-01 온보딩/로그인 계정 생성, 서비스 소개, 약관 동의 FR-501
SCR-02 홈 (인물 목록) 등록된 인물 조회·검색, 주요 진입점 FR-103
SCR-03 인물 등록/편집 인물 정보 입력·수정 FR-101, FR-102
SCR-04 인물 상세 (타임라인) 프로필 + 대화 이력 시간순 조회, 기록 유형 선택 진입점 FR-401~403
SCR-05 녹음 동의 확인 1:1 대화 녹음에 한해 시작 전 상대방 동의 확인FR-202
SCR-06 녹음 진행 녹음 제어 (1:1 대화 / 개인 녹음 공용) FR-201, FR-203, FR-206, FR-207
SCR-07 AI 결과 확인/편집 요약·키워드 검수 후 확정 FR-305, FR-304
SCR-08 기록 상세 확정된 개별 기록 조회·수정·삭제 FR-403, FR-404
SCR-09 검색 키워드·자연어로 전체 기록 검색 (시맨틱) FR-405
SCR-10 설정 계정, 음성 보존 정책, 데이터 삭제, 로그아웃 FR-502, FR-503
2. 핵심 플로우
1:1 대화 녹음 플로우
SCR-02홈 → 인물 선택 →
SCR-04인물 상세 → + 기록 (1:1 대화) →
SCR-05동의 확인 →
SCR-06녹음 진행 → AI 처리 (비동기) →
SCR-07결과 확인/편집 → 확정 →
SCR-04타임라인 반영
개인 녹음 플로우
상대방이 없는 본인 단독 음성 메모. 동의 확인(SCR-05)을 거치지 않는 것 이 1:1 플로우와의 유일한 차이다.
SCR-02홈 → 인물 선택 →
SCR-04인물 상세 → + 기록 (개인 녹음) →
SCR-06녹음 진행 동의 단계 없음 → AI 처리 (비동기) →
SCR-07결과 확인/편집 → 확정 →
SCR-04타임라인 반영
다음 만남 전 조회 플로우
SCR-02홈 → 인물 검색 →
SCR-04인물 상세 → 최근 이슈 · 관심사 · 지난 대화 요약 즉시 확인
이 플로우가 서비스의 핵심 가치 순간이다. 3탭·10초 이내에 "지난번에 무슨 얘기 했더라"가 해결되어야 한다.
3. 화면별 상세 정의
구성 요소 서비스 소개 슬라이드 (최초 1회), 이용약관·개인정보처리방침 동의 체크, 로그인 버튼 (방식 팀 결정 필요 )
기능 로그인/회원가입, 약관 동의 수집 (필수/선택 구분), 마이크 권한 요청 (최초 녹음 시점으로 지연 가능)
예외 로그인 실패, 네트워크 오류 시 재시도 안내. 필수 약관 미동의 시 진행 불가
구성 요소 인물 카드 리스트 (이름, 소속/역할, 마지막 대화 일시, 최근 키워드 1~2개), 검색바, 인물 추가 버튼, 설정 진입
기능 인물 목록 조회 (정렬: 최근 대화순 기본), 이름 검색, 인물 추가
이동 인물 카드 → SCR-04 · 추가 → SCR-03 · 검색바 → SCR-09
빈 상태 인물 0명: 첫 인물 등록 유도 문구 + 버튼 (온보딩 직후 상태)
상태 표시 AI 처리 중인 기록이 있는 인물은 카드에 처리 중 인디케이터
SCR-03 인물 등록/편집 FR-101, FR-102
구성 요소 입력 필드: 이름(필수), 역할/직무, 소속, 메모. 관심사/키워드(자동 축적, 편집 가능)
이동 저장 → SCR-04 (신규) 또는 이전 화면
예외 삭제 시 확인 다이얼로그: 연결된 대화 기록 함께 삭제 여부 명시 (FR-102). 동명이인 등록 시 경고 없이 허용하되 소속으로 구분 표시
SCR-04 인물 상세 (타임라인) FR-401~403
이 앱의 중심 화면. "사람 한 명을 떠올리면 그 사람에 대한 모든 것이 따라온다"를 구현한다.
구성 요소 상단: 프로필 (이름, 역할, 소속, 관심사 키워드 칩) · 중단: 타임라인 (날짜별 기록 카드 — 일시, 유형 배지(1:1/개인), 요약 첫 줄, 키워드) · 하단: 기록 추가 버튼
기능 타임라인 시간역순 조회, 기록 카드 탭 → 상세, 프로필 편집 진입, 기록 추가 시 유형 선택 (1:1 대화 녹음 / 개인 녹음)
이동 기록 추가(1:1 대화) → SCR-05 · 기록 추가(개인 녹음) → SCR-06 직행 · 기록 카드 → SCR-08 · 프로필 편집 → SCR-03
상태 표시 처리 중(PENDING/TRANSCRIBED) 기록은 타임라인 상단에 처리 중 카드로 표시, 실패 시 재시도 버튼 (FR-306)
SCR-05 녹음 동의 확인 (1:1 대화 전용) FR-202
법적 검토 문서의 기본 원칙("동의 없이는 녹음이 시작되지 않는 구조")을 구현하는 화면. 우회 경로를 두지 않는다. 개인 녹음(본인 단독)은 이 화면을 거치지 않는다.
구성 요소 동의 안내 문구 (예: "상대방에게 기록을 위해 녹음함을 알리고 동의를 받았나요?"), 동의 확인 버튼, 취소
기능 동의 확인 체크 → 녹음 시작 가능. 동의 플래그는 기록에 저장됨 (consent_confirmed)
이동 동의 확인 → SCR-06 · 취소 → 이전 화면
설계 노트 문구 톤은 사용자 검증(인터뷰)에서 심리적 허들을 관찰 후 다듬는다. 반복 사용자를 위한 축약 UX(예: 확인 1탭)는 허용하되 생략은 불가
SCR-06 녹음 진행 (1:1 대화 / 개인 녹음 공용) FR-201, FR-203, FR-206, FR-207
구성 요소 기록 유형 표시 (1:1 대화 / 개인 녹음), 경과 시간, 파형 또는 녹음 인디케이터, 일시정지/재개, 종료, 취소
기능 녹음 제어. 백그라운드 전환 시에도 녹음 유지 (Flutter 백그라운드 녹음 플러그인 검증 팀 결정 필요 ). 주기적 로컬 임시 저장 (FR-206). 종료 시 유형(ONE_ON_ONE/PERSONAL)과 함께 업로드
이동 종료 → 업로드 시작 + SCR-04 복귀 (처리 중 카드 표시)
예외 취소 시 확인 다이얼로그 ("녹음을 삭제할까요?"), 저장 공간 부족·마이크 권한 거부 처리, 업로드 실패 시 로컬 보관 후 자동 재시도
SCR-07 AI 결과 확인/편집 FR-305, FR-304
잘못된 기억이 축적되는 것을 막는 품질 게이트 (US-05).
구성 요소 요약 (편집 가능), 키워드 칩 (추가/삭제 가능), 프로필 반영 제안 (예: "관심사에 'MSA' 추가?" — 개별 수락/거절), 확정 버튼
기능 요약·키워드 수정, 프로필 제안 처리, 확정 → 타임라인 반영
예외 확정 전 이탈 시 임시 저장 (미확정 상태 유지, 타임라인 미노출)
SCR-08 기록 상세 FR-403, FR-404, FR-406
구성 요소 일시, 유형 (1:1/개인/회의), 요약 전문, 키워드, 전사 전문 보기 (STT 원문 — 접힘 상태 기본), (보존 시) 원본 음성 재생 (FR-406, 선택)
구성 요소 검색바 (자연어 질의 허용 안내 문구, 예: "여행 얘기했던 사람"), 결과 리스트 (인물 결과 + 기록 결과 구분 표시, 관련도순)
기능 인물명 검색 (필수), 키워드·자연어 시맨틱 검색 (권장, FR-405 — 03 아키텍처 검색 흐름)
이동 인물 결과 → SCR-04 · 기록 결과 → SCR-08
구성 요소 계정 정보, 원본 음성 보존 정책 (요약 후 삭제/보존), 로그아웃, 데이터 전체 삭제(탈퇴), 약관/개인정보처리방침, 앱 버전
기능 보존 정책 변경 (FR-503), 로그아웃, 탈퇴 (FR-502 — 2단계 확인)
예외 탈퇴는 되돌릴 수 없음을 명시, 확인 문구 입력 등 안전장치
4. 공통 UI 규칙
처리 중 상태는 항상 보인다. AI 처리(STT/요약)는 수 초~수 분 걸릴 수 있다. 사용자가 "내 녹음이 사라졌나?"라고 느끼는 순간 신뢰가 깨진다. 처리 중/실패/재시도 상태를 타임라인에서 숨기지 않는다.
처리 완료 알림: 앱이 백그라운드일 때 AI 처리 완료를 푸시 알림으로 알릴지 여부 팀 결정 필요 . 알림 없이는 사용자가 결과 확인(SCR-07)에 진입할 계기가 없다는 점을 고려할 것.
파괴적 동작은 2단계 확인. 인물 삭제, 기록 삭제, 탈퇴.
오프라인 허용 범위: 녹음은 오프라인 가능 (로컬 보관 후 업로드), 조회는 온라인 필수 (MVP 기준, 캐시 전략은 팀 결정 필요 ).
디자인 시스템 (색상, 타이포, 컴포넌트): 팀 결정 필요 — 별도 디자인 문서로 분리 권장.
5. 미결 검토 항목
이번 점검에서 화면 정의가 없거나 결정이 필요한 것으로 확인된 항목.
# 항목 상태
1 회의 유형(FR-205, 권장) 기록 화면 — 현재 미정의. MVP에서 구현 시 SCR-04 유형 선택에 "회의" 추가 필요 팀 결정 필요
2 빠른 녹음: 인물 선택 없이 홈에서 바로 녹음 시작 → 종료 후 인물 매핑. 입력 부담(R1)을 더 줄이는 안이나 플로우가 복잡해짐 검토 제안
3 AI 처리 완료 푸시 알림 도입 여부 (공통 규칙 참조) 팀 결정 필요
DOCUMENT 05
백엔드 작업 정리 (스텝 순서 기준)
스택: Spring Boot / PostgreSQL / S3 호환 스토리지 · AI API: STT는 지원받은 무료 API(2026-08-말까지) → 9월부터 클로바/Whisper 전환 예정, LLM은 테스트 기간 동안 OpenAI · 작성 2026-07-08
1. 운영 방식과 전체 지도
날짜·기간이 아니라 작업 순서와 완료 기준 으로 관리한다.
STEP은 순서대로 진행한다. 다음 STEP은 이전 STEP의 의존 작업이 끝나야 시작한다.
같은 STEP 안의 작업들은 서로 독립적이라 순서 자유 (나눠 맡아도 되고 혼자 차례로 해도 됨).
작업마다 완료 기준(DoD) 이 있다. "대충 됨"은 완료가 아니다.
규모는 상대 크기: S 반나절감 M 며칠감 L 제일 큼 — 시간 약속이 아니라 우선순위 감각용
STEP 0선행 결정·셋업 →
STEP 1공통 기반 →
STEP 2도메인·입력 →
STEP 3AI 파이프라인 →
STEP 4확정 플로우 완성 →
STEP 5마감 품질·배포
체크포인트 이게 되면
STEP 2 완료 Postman으로 인물 등록·음성 업로드가 된다
STEP 3 완료 녹음 파일이 요약으로 변환된다 — 서비스 핵심 가치 최초 검증
STEP 4 완료 업로드→요약→확정→타임라인 전체 흐름이 돈다. Flutter 연동 시작 가능
STEP 5 완료 인증·배포 포함, 앱을 붙일 수 있는 실서버 완성
⚠️ 시간 제약이 있는 유일한 작업
ID 작업 내용 기한
BE-24 AI API 전환 지원 종료 전에 STT 전환처(클로바/Whisper — 한국어 인식률·단가 비교) 선정 + 임베딩·리랭커 대체 공급자 (예: OpenAI embeddings) 결정, 어댑터 교체 2026-08-말 (지원 종료) 전 — STEP 진행 상황과 무관하게 수행
STT를 어댑터 인터페이스 뒤에 두는 이유가 이것이다 (BE-14). 어댑터만 지키면 전환은 구현체 교체로 끝난다.
2. STEP별 작업 목록
STEP 0 — 선행 결정·셋업
코드보다 먼저 끝내야 하는 것들.
ID 작업 내용 완료 기준 (DoD) 규모
BE-01 AI API 준비 지원 API(STT·임베딩·리랭커) 키·쿼터 확인 및 3개 엔드포인트 샘플 호출, OpenAI 키 발급. 학습 활용 약관 확인 + HTTPS 제공 여부 확인 (문서상 http — NFR-01 관련, 06 기술스택 4.3절) + STT 실행 시간 제한 실측 (청킹 기준) 샘플 호출 성공 + 약관·HTTPS·시간제한 확인 메모 S
BE-02 데이터 모델 재정리 (ADR-7) 아키텍처정의서 4절 초안을 검토·수정해 확정 확정 ERD가 문서에 반영됨 S
BE-03 인프라 방향 (ADR-6) AWS로 배포 방향 확정. 개발 단계는 로컬 Docker로 진행하므로 AWS 세부 구성(Lightsail vs EC2+RDS vs Elastic Beanstalk)은 STEP 5 전까지 학습 후 결정하면 됨방향 기록 (세부 구성은 STEP 5 전 결정) S
BE-04 저장소·스캐폴드 backend 저장소 생성, Spring Boot 초기화, Docker Compose(PostgreSQL), Flyway, 코드 컨벤션 합의 로컬에서 docker compose up + 앱 기동 성공 M
STEP 1 — 공통 기반
ID 작업 내용 완료 기준 (DoD) 규모
BE-05 DB 스키마 v1 BE-02 확정 모델을 Flyway 마이그레이션으로 작성 마이그레이션 실행 시 전체 테이블 생성 S
BE-06 공통 골격 응답 포맷 통일, 전역 예외 처리, 요청 로깅 샘플 API 1개가 규격대로 성공/에러 응답 S
BE-07 개발용 인증 스텁 고정 토큰 → user_id 해석하는 임시 인증. 정식 인증은 STEP 5로 미룸 — 코어 파이프라인 검증을 인증 연동이 막지 않게 토큰 헤더로 user 스코프 동작 S
STEP 2 — 도메인·입력
ID 작업 내용 완료 기준 (DoD) 규모
BE-08 인물 API Person CRUD + 목록(최근 대화순) + 이름 검색 (FR-101~103) Postman으로 등록→조회→수정→삭제 왕복 M
BE-09 기록 생성 API Conversation 생성 — 유형(1:1/개인), 1:1은 동의 플래그 없으면 서버가 거부 (설계 원칙 3) 동의 없는 1:1 요청이 4xx로 거부됨 M
BE-10 음성 업로드 multipart 업로드 → 스토리지 저장, Recording 생성 (상태 PENDING) 파일이 스토리지에 저장되고 레코드 생성됨 M
BE-11 비동기 잡 실행기 DB 잡 테이블 + @Async 기반 실행, 상태 전이, 실패 기록 더미 잡이 PENDING→DONE/FAILED로 전이 M
STEP 3 — AI 파이프라인
ID 작업 내용 완료 기준 (DoD) 규모
BE-12 타임라인 조회 인물 상세 API: 프로필 + CONFIRMED 기록 시간역순 (FR-401~402) 인물 1명의 타임라인이 정렬되어 응답 M
BE-13 기록 상세·수정·삭제 요약 전문/키워드/전사 조회, 수정, 삭제 (FR-403~404) 왕복 CRUD 확인 S
BE-14 STT 어댑터 지원 STT API(/api/stt) 연동, transcript 저장 (TRANSCRIBED). 반드시 어댑터 인터페이스 뒤에 구현 — 9월 전환(BE-24) 확정. 장시간 녹음 청킹 : 실행 시간 제한(504) 대비 분할 전사 + 이어붙이기 (기준은 BE-01 실측값) 실제 녹음 파일(장시간 포함)이 텍스트로 변환됨 M
BE-15 LLM 어댑터 OpenAI API로 요약·키워드·프로필 제안 생성 (SUMMARIZED). 프롬프트는 공급자 독립적으로 관리 전사문이 요약+키워드 JSON으로 변환됨 M
STEP 4 — 확정 플로우 완성
파이프라인과 도메인 API가 여기서 만난다.
ID 작업 내용 완료 기준 (DoD) 규모
BE-16 확정 API 요약 수정 반영(원본 보존), CONFIRMED 전이, 키워드·프로필 제안 반영 (FR-304~305) 수정→확정→타임라인 노출 확인 M
BE-17 실패·재시도 FAILED_* 상태, 재시도 API, 원본 보존 보장 (FR-306, NFR-08) STT/LLM 강제 실패 후 재시도로 복구됨 S
BE-18 E2E 통합 검증 팀이 직접 녹음한 실데이터로 업로드→STT→요약→확정→타임라인 전 구간 테스트 실녹음 3건이 타임라인에 정상 축적 M
STEP 5 — 마감 품질·배포
ID 작업 내용 완료 기준 (DoD) 규모
BE-19 정식 인증 ADR-4 결정(카카오/이메일) 후 구현, BE-07 스텁 대체. 회원 탈퇴 = 전체 데이터 삭제 (FR-502) 실제 로그인 왕복 + 탈퇴 시 데이터 소거 확인 L
BE-20 시맨틱 검색 확정 시 임베딩 생성·저장(pgvector, 비동기 잡) + 검색 API: 쿼리 임베딩(/api/embedding) → pgvector 유사도 상위 N → 리랭커(/api/rerank) 재정렬 (FR-405, 03 아키텍처 검색 흐름) "여행 얘기했던 사람" 같은 자연어 질의에 관련 기록이 상위로 반환됨 M
BE-21 보존 정책·사용량 상한 음성 retention 설정 (FR-503), AI API(STT·LLM·임베딩·리랭커) 호출량 측정·상한 (NFR-07) 요약 후 삭제 옵션 동작 + 사용량 집계 조회 S
BE-22 보안 점검 전 API user_id 스코프 전수 확인, 저장 암호화 확인 (NFR-01~03) 타인 데이터 접근 시도가 전부 차단됨 M
BE-23 AWS 배포 + API 문서 BE-03에서 결정한 AWS 구성으로 배포, OpenAPI(Swagger) 문서화 → Flutter 개발에 공유 외부에서 접근 가능한 API + 문서 URL M
3. 운영 규칙
스코프 동결. 이 목록에 없는 기능(워치, 캘린더 연동, 회의 유형 등)은 STEP 5가 끝나기 전에 추가하지 않는다. 아이디어는 백로그에 적어두고 지나간다.
STEP 3 완료가 첫 번째 축배. 녹음이 요약으로 변하는 순간이 이 서비스가 처음으로 "존재"하는 순간이다. 여기까지 최단 경로로 간다.
BE-24(AI API 전환)만 달력을 본다. 나머지는 순서대로, 이것만 8월말 전에.
작업 시작/완료 시 문서(05-백엔드작업일정.md)의 해당 행에 담당자와 날짜를 기록한다.
DOCUMENT 06
기술스택 정리
관련 문서: 03 아키텍처정의서 (시스템 구조) · 05 백엔드작업일정 (작업 순서) · 작성 2026-07-08
1. 한눈에 보기
계층 선택 상태
모바일 앱 Flutter (Dart)✅ 확정
API 서버 Spring Boot / Java ✅ 확정
DB PostgreSQL (단독) + pgvector 확장 (시맨틱 검색용 벡터 저장)✅ 확정
파일 스토리지 S3 호환 (AWS S3 예정) 방향 확정
STT AI API 오마카세 (지원, ~2026-08-말) → 9월 클로바/Whisper 전환 부분 확정 (BE-24)
임베딩·리랭커 AI API 오마카세 (/api/embedding, /api/rerank) — 기록 시맨틱 검색용 확정 (지원 기간)
LLM OpenAI API (테스트 기간) 확정 (테스트 기준)
인프라 AWS — 세부 구성 미정방향 확정 (ADR-6)
로컬 개발 Docker Compose (PostgreSQL 등) 확정
협업 GitHub (HanLaBong-and-Children) · Notion (기획) · 문서 사이트 (Cloudflare Pages) 운영 중
1.1 선정 이유
선택 선정 이유 대안과 비교
Flutter 단일 코드베이스로 Android/iOS 동시 대응 — 개발 리소스가 제한적인 팀 상황에서 두 플랫폼 별도 개발은 비현실적. 위젯 기반 UI로 화면 10개 규모의 MVP를 빠르게 구축. 녹음·백그라운드 등 필수 플러그인 생태계 존재 (착수 시 PoC로 검증) React Native 대비: 네이티브 브릿지 없이 자체 렌더링이라 성능 예측이 쉽고 Dart 단일 언어로 통일. 네이티브(Kotlin/Swift) 대비: 개발량 2배
Spring Boot / Java 개발 담당이 가장 익숙한 스택 — 학습 비용 없이 바로 시작. API 전용 서버에 필요한 것(웹, JPA, 검증, 보안, OpenAPI 문서화)이 전부 표준으로 존재하는 성숙한 생태계. 자료·커뮤니티가 방대해 막혔을 때 해결이 빠름 Python(FastAPI) 대비: AI 라이브러리 생태계는 Python이 앞서지만, 우리는 AI를 전부 외부 API 호출 로 처리하므로 서버 언어의 AI 생태계가 불필요 — 익숙함이 더 큰 가치
PostgreSQL + pgvector 데이터 본질이 관계형 (유저→인물→기록의 소유 구조, "이 사람의 타임라인"이 핵심 쿼리). 유연한 데이터(키워드 JSON, 프로필 제안, 전사문)는 JSONB/TEXT로 커버되고, pgvector로 시맨틱 검색용 벡터까지 저장 — DB 하나로 전부 해결. 운영 부담(백업·장애 지점·마이그레이션)은 DB 개수에 비례하므로 단독 운용 MongoDB 병행안 기각 (2026-07-06): 전사문(1시간 ≈ 100~200KB)은 TEXT 한도(1GB)의 0.02% 수준이고 TOAST가 자동 압축·분리 저장해 성능 문제 없음. "큰 문자열 하나" 저장에 문서형 DB의 이점이 실재하지 않았음. 별도 벡터 DB 대비: 베타 규모에서 pgvector로 충분, 운영 대상 추가 불필요
S3 호환 오브젝트 스토리지 음성 파일 같은 대용량 바이너리를 DB에 넣으면 백업·복제 비용이 폭발 — 파일은 스토리지에, DB엔 경로만 저장이 정석. 용량 단가가 DB 대비 압도적으로 저렴 DB BLOB 저장 대비: 백업 크기·복원 시간 문제로 기각
AWS 관리형 서비스(RDS, S3)로 소수 팀의 운영 부담 최소화. 국내 리전 제공 (개인정보 보관 위치 고려). 자료·사례가 가장 많아 문제 해결이 빠름 세부 구성(Lightsail/EC2+RDS/EB)은 학습 후 결정 (ADR-6). 개발 단계엔 클라우드 자체가 불필요 (로컬 Docker)
AI API 오마카세 (STT·임베딩·리랭커)지원 프로그램으로 8월말까지 무료 — 검증 단계 AI 비용 0원. STT·임베딩·리랭커를 하나의 인증·요청 규격으로 사용해 연동 비용 절감. 어댑터 뒤에 두므로 지원 종료 후 전환 부담 낮음 처음부터 유료 API 대비: 검증 전 단계에서 비용을 쓸 이유가 없음. 단, HTTPS 여부·학습 약관은 확인 필요 (4절)
OpenAI (LLM)한국어 요약·추출 품질이 검증된 범용 모델. SDK·문서 성숙, 테스트 물량에서는 비용 미미 무료 LLM 대비: 요약 품질이 서비스의 신뢰 그 자체라(잘못된 기억이 축적되면 안 됨) 테스트 단계부터 품질 기준선을 확보
Docker Compose (로컬)개발자마다 동일한 로컬 환경 재현 — DB 버전 차이 등으로 인한 "내 컴에선 되는데" 방지. 클라우드 없이 전체 스택 기동 —
Flyway 스키마 변경을 코드로 버전 관리 — 팀원 간 DB 상태가 마이그레이션 실행만으로 동기화됨 수동 SQL 관리 대비: 순서·누락 사고 방지
2. 백엔드 (Spring Boot / Java)
언어·프레임워크 버전
항목 권장 비고
Java LTS 버전 (21 또는 최신 LTS)BE-04(스캐폴드) 시점의 최신 LTS로 고정하고 버전 기록표에 기재 → 착수 시 확정
Spring Boot 최신 안정 버전 (3.x 계열 이상) BE-04 시점에 고정. 마이너 업데이트는 수시, 메이저 업그레이드는 STEP 5 이후
빌드 도구 Gradle (Kotlin DSL)Maven도 무방 — 팀 익숙한 쪽으로 팀 결정 필요
주요 의존성
용도 라이브러리 도입 시점
REST API spring-boot-starter-web STEP 0 (BE-04)
입력 검증 spring-boot-starter-validation STEP 1
DB 접근 spring-boot-starter-data-jpa + PostgreSQL 드라이버 STEP 1
DB 마이그레이션 Flyway STEP 1 (BE-05)
API 문서 springdoc-openapi (Swagger UI) STEP 2부터 켜두기 — Flutter 연동 대비
파일 스토리지 AWS SDK for Java v2 (S3) STEP 2 (BE-10). 로컬 개발은 MinIO 또는 LocalStack으로 S3 대체 팀 결정 필요
비동기 잡 Spring @Async + DB 잡 테이블 (자체 구현) STEP 2 (BE-11). 외부 큐(Redis 등)는 필요해질 때
HTTP 클라이언트 (AI API) Spring RestClient (내장) STEP 3. 별도 라이브러리 불필요
인증 spring-boot-starter-security + JWT STEP 5 (BE-19) — 그 전엔 개발용 토큰 스텁 (BE-07)
로깅 SLF4J + Logback (기본) STEP 1
보일러플레이트 절감 Lombok 선택 — 팀 합의 팀 결정 필요
테스트
용도 도구 수준
단위/통합 테스트 JUnit 5 + Spring Boot Test (기본 포함) 핵심 도메인 로직과 파이프라인 상태 전이는 테스트 필수
DB 통합 테스트 Testcontainers (PostgreSQL) 선택 — Docker 위에서 실DB 테스트. 여유 되면 도입
API 수동 테스트 Postman 또는 IntelliJ HTTP Client DoD 검증용 (05 문서의 완료 기준)
3. 모바일 앱 (Flutter)
항목 권장
Flutter stable 채널 최신 — 앱 착수 시점에 고정하고 버전 기록표에 기재 착수 시 확정
지원 OS Android 우선, iOS 병행 (요구사항 NFR-05)
핵심 패키지 후보
앱 개발 착수 전에 확정한다. 녹음 관련 두 개가 이 앱의 생명선이므로 가장 먼저 기술 검증(PoC) 할 것.
용도 후보 비고
녹음 record 또는 flutter_sound⚠️ 최우선 PoC 대상: 백그라운드 녹음, 일시정지/재개, 장시간(1h+) 안정성, 임시 저장 (FR-203, FR-206)
백그라운드 유지 flutter_background_service 등⚠️ OS별 정책 차이 큼 (Android foreground service / iOS 백그라운드 오디오). PoC 필수
네트워크 dio업로드 진행률, 인터셉터(토큰), 재시도 지원
상태관리 riverpod (권장) / bloc팀 결정 필요 — 개발자 익숙한 쪽. 정답 없음, 통일만 하면 됨
라우팅 go_router화면 10개 수준이면 충분
로컬 저장 shared_preferences + path_provider설정 + 녹음 임시 파일. 오프라인 녹음 보관 (화면정의서 공통 규칙)
오디오 재생 just_audioFR-406 (선택 기능)이므로 후순위
4. AI API
구성
항목 현재 이후 원칙
STT AI API 오마카세 /api/stt (지원, 2026-08-말까지)9월부터 클로바 스피치 또는 Whisper (BE-24에서 선정) 어댑터 인터페이스 필수 — 전환 확정
임베딩 (검색용) AI API 오마카세 /api/embedding지원 종료 후 대체 선정 (예: OpenAI embeddings) 어댑터 뒤에. 벡터는 pgvector에 저장
리랭커 (검색용) AI API 오마카세 /api/rerank지원 종료 후 대체 선정 어댑터 뒤에
LLM (요약/추출) OpenAI API (테스트 기간) 품질·단가 보고 재평가 프롬프트를 공급자 독립적으로 관리
공통 — 입력 데이터의 학습 활용 약관 확인 후 사용 (BE-01). 호출량 측정·상한 (NFR-07)
AI API 오마카세 스펙 요약 (지원 API, aiapi.kogrobo.com)
원문: 서비스 Docs 페이지 (2026-07-08 캡처 기준). 인증은 전 엔드포인트 공통 Authorization: Bearer <API_KEY> — 키는 서버에서만 사용, 앱(클라이언트)에 절대 포함 금지 .
API 방식 요청 응답 주의
STTPOST /api/stt multipart/form-data file(필수, 오디오), language, task, beam_size, vad_filter (선택)업스트림 STT JSON 그대로 장시간 작업은 실행 제한으로 504 가능 → 긴 녹음은 청킹 필요 (BE-14). file 누락 시 400
임베딩POST /api/embedding JSON {"input": "텍스트", "input_type": "string"} (text 필드도 허용){"embeddingVector": [0.012, ...]}업스트림 실패 시 non-200 + error
리랭커POST /api/rerank JSON {"query": "검색어", "input": ["후보1", "후보2"]}업스트림 응답 패스스루 query 비어있으면 안 됨, input은 문자열 배열
에러 코드 공통: 400 요청 필드 오류 → 필드명/Content-Type 확인 · 401/403 API 키 문제 · 429 일일 한도/usage limit · 500/502 업스트림 실패 → 재시도 로직 · 504 시간 제한 → 입력을 줄이거나 분할 처리
확인 필요 (BE-01에서)
⚠️ 문서상 베이스 URL이 http://(평문) — 대화 음성·전사문을 암호화 없이 전송하면 NFR-01(전송 TLS) 위반. HTTPS 엔드포인트 제공 여부를 지원사에 확인하고, 없으면 리스크로 기록 후 팀 판단
입력 데이터의 학습 활용 여부 약관 확인 (STT·임베딩·리랭커 전부)
STT 실행 시간 제한의 실측값 — 몇 분짜리 녹음까지 한 번에 처리되는지 (청킹 기준 결정)
STT 파라미터가 beam_size/vad_filter인 것으로 보아 업스트림이 Whisper 계열로 추정 — 9월 Whisper API 전환 시 파라미터 호환 이점 예상
5. 인프라·개발 환경
항목 선택 비고
클라우드 AWS 세부 구성(Lightsail / EC2+RDS / Elastic Beanstalk) 미정 — STEP 5 전 학습 후 결정 (ADR-6)
로컬 개발 Docker Compose PostgreSQL (+ MinIO/LocalStack 도입 시 포함). 개발자 로컬에서 전체 스택 기동 가능해야 함
버전 관리 GitHub (org: HanLaBong-and-Children) documents(문서) / backend / app 저장소 분리 예정
CI GitHub Actions 최소: PR 시 빌드+테스트. 도입 시점 팀 결정 필요 (BE-04에서 같이 하면 편함)
문서 이 저장소 + Cloudflare Pages md 수정 시 index.html 동기화 + 재배포
6. 버전 고정 기록과 남은 결정
프레임워크·주요 라이브러리 버전은 BE-04(스캐폴드) 완료 시점에 아래 표에 기록 하고, 이후 변경 시 갱신한다.
항목 고정 버전 기록일
Java (미기록)
Spring Boot (미기록)
Flutter (미기록)
PostgreSQL (미기록)
남은 결정
Gradle vs Maven / Lombok 사용 여부 — BE-04 전
로컬 S3 대체 (MinIO vs LocalStack vs 실 S3 개발 버킷) — BE-10 전
지원 API의 HTTPS 제공 여부 확인 (4절 확인 필요) — BE-01
지원 종료(8월말) 후 임베딩·리랭커 대체 공급자 — BE-24와 함께
Flutter 상태관리 (Riverpod vs Bloc) — 앱 착수 전
녹음·백그라운드 패키지 PoC — 앱 개발에서 가장 먼저 (여기서 안 되면 화면 설계가 흔들림)
CI 도입 시점 — BE-04에서 같이 할지
HanLaBong-and-Children · AI 기반 관계 기억 서비스 프로젝트 문서 · 2026-07 초안 ·
원본: 같은 저장소의 마크다운 문서 6종 (01~06) · 기획 원본: 노션 「기술 블로그 › 모두의 창업」