대화를 기록하는 것이 아니라, 관계를 기억한다

AI 기반 관계 기억 서비스 — 프로젝트 문서

팀 HanLaBong-and-Children 2026 모두의 창업 (일반/기술트랙 · IT) 작성 2026-07-06 상태: 초안
문서 안의 팀 결정 필요 표시는 아직 팀 합의가 안 된 항목입니다. 팀 회의에서 이 표시만 훑으면 결정 안건 리스트가 됩니다. 원본은 같은 저장소의 마크다운 문서(01~06)이며, 결정 사항은 양쪽에 함께 반영하세요.
DOCUMENT 01

프로젝트계획서

1. 프로젝트 개요

사람과의 대화를 AI가 대신 기억하고 관계 맥락을 축적해, 다음 만남에서 자연스럽게 이어갈 수 있도록 돕는 서비스

배경

  • 현대인은 만나는 사람과 기억해야 할 대화가 계속 늘어나지만, 뇌의 용량은 그대로다. 지난 대화는 흐릿해지고, 같은 질문을 반복하고, 관계의 맥락이 끊어진다.
  • 기존 도구(메모 앱, 회의록, 채팅 기록)는 정보를 문서 단위로 저장한다. 정보가 사람을 따라 축적되지 않아, 필요할 때 찾아내는 일은 여전히 사람의 몫이다.
  • 이 문제는 기억력의 문제가 아니라 구조의 문제다. 해결 방향은 정보를 사람 기준으로 구조화하는 것이다.

핵심 컨셉

대화 요약 사람 매핑 날짜별 기록 관계 기억 축적
  • 기록의 기본 단위가 다르다: 기존 서비스는 회의/문서 단위, 우리는 사람 단위
  • 주 사용 장면은 1:1 대화 (영업 미팅, 커피챗, 상담, 인터뷰)
  • 입력은 녹음 단일 채널: 1:1 대화 녹음 + 개인 녹음(본인 단독 음성 메모) 2가지 (기록 부담 최소화)

2. 경쟁 지형과 차별점

구분대표 서비스기록 단위주 채널
미팅 AI클로바노트, Granola, Otter, Fathom회의 단위음성
노트 앱Notion, Evernote문서 단위텍스트
AI 네이티브 CRMLightfield, Day AI, folk사람/딜 단위이메일·캘린더 등 디지털 흔적
명함/인맥리멤버사람 단위명함
본 서비스사람 단위대면·음성 (1:1 대화)
  • 해외 AI 네이티브 CRM은 이메일 등 디지털 채널의 자동 수집에 집중한다. 한국의 관계 형성은 대면·전화·커피챗 비중이 높아 디지털 흔적에 남지 않는 영역이 크다. 음성 우선 + 대면 1:1 + 사람 단위 축적이 본 서비스의 포지션이다.
  • 주의할 통념: 기록 도구가 죽는 첫 번째 이유는 기능 부족이 아니라 입력 부담이다. 녹음 시작을 얼마나 무의식적으로 만드느냐가 리텐션의 핵심 변수다.

3. 목표와 성공 기준

  1. MVP 출시 — 1:1 대화 녹음 → AI 요약 → 사람별 타임라인 축적이 동작하는 모바일 앱
  2. 클로즈드 베타 운영 — 30~50명 규모, 유지율과 녹음 빈도 측정
  3. 모두의 창업 프로그램 산출물 제출 — 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 확장 전 별도 검토
R4AI 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-02PM으로서, 다음 미팅 전에 상대방과의 지난 논의 맥락을 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-2021: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-306AI 처리 실패 시(네트워크, 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. 설계 원칙

  1. 사람 단위 데이터 모델. 모든 기록은 Person에 귀속된다. 회의/문서 단위 구조를 만들지 않는다 (제품 차별점을 스키마 수준에서 보장).
  2. 입력 유실 금지. 녹음 원본은 AI 처리 파이프라인과 분리 저장한다. AI 처리는 실패·재시도 가능한 비동기 작업으로 취급한다.
  3. 동의 우선. 동의 확인은 클라이언트 UX가 아니라 도메인 규칙이다. 1:1 대화 유형에서 동의 플래그 없는 녹음 세션은 서버가 거부한다 (개인 녹음은 본인 단독이므로 예외).
  4. 확장 기능은 스키마만 열어둔다. 캘린더 연동, 장소, 워치 등은 MVP에 구현하지 않되, 데이터 모델이 막지 않도록만 설계한다.
  5. 외부 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/관계 맥락)를 정규화한 것.

USER
  • idPK
  • email
  • created_at
PERSON
  • idPK
  • user_idFK → USER
  • name이름
  • role역할/직무
  • affiliation소속
  • memo메모
CONVERSATION
  • idPK
  • person_idFK → PERSON
  • typeONE_ON_ONE | PERSONAL | MEETING
  • statusPENDING … CONFIRMED
  • consent_confirmed동의 확인 (ONE_ON_ONE 필수)
  • occurred_at대화 일시
RECORDING
  • idPK
  • conversation_idFK
  • object_key스토리지 경로
  • duration_sec길이
  • transcriptSTT 결과
  • retentionKEEP | DELETE_AFTER_SUMMARY
SUMMARY
  • idPK
  • conversation_idFK
  • summary사용자 수정 반영본
  • summary_originalAI 원본
  • keywordsJSON
  • profile_suggestions프로필 반영 제안
PERSON_KEYWORD
  • idPK
  • person_idFK → PERSON
  • keyword키워드
  • source_conversation_idFK

관계: 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·임베딩)은 비동기 잡으로 분리
주 DBPostgreSQL (확정, 단독 운용) + pgvector 확장전사 원본 포함 전부 저장. 1시간 전사문 ≈ 100~200KB, TEXT 한도는 필드당 1GB이며 2KB 초과 값은 TOAST가 자동 압축·분리 저장. 임베딩 벡터는 pgvector로 저장 (시맨틱 검색)
오브젝트 스토리지S3 호환 (AWS S3 / Cloudflare R2 / NCP Object Storage)음성 파일. 국내 리전 권장 (개인정보)
작업 큐Spring 기준: @Async+DB 잡 테이블 → 필요 시 Redis 큐로 승격MVP는 단순한 것 우선. Kafka 등은 과설계
STTAI 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-2AI 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-7DB 구성 확정 / 데이터 모델 재정리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-07AI 결과 확인/편집요약·키워드 검수 후 확정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. 화면별 상세 정의

SCR-01온보딩/로그인FR-501
구성 요소
서비스 소개 슬라이드 (최초 1회), 이용약관·개인정보처리방침 동의 체크, 로그인 버튼 (방식 팀 결정 필요)
기능
로그인/회원가입, 약관 동의 수집 (필수/선택 구분), 마이크 권한 요청 (최초 녹음 시점으로 지연 가능)
이동
로그인 성공 → SCR-02
예외
로그인 실패, 네트워크 오류 시 재시도 안내. 필수 약관 미동의 시 진행 불가
SCR-02홈 (인물 목록)FR-103
구성 요소
인물 카드 리스트 (이름, 소속/역할, 마지막 대화 일시, 최근 키워드 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
빈 상태
기록 0건: 첫 기록 유도 문구
상태 표시
처리 중(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-07AI 결과 확인/편집FR-305, FR-304
잘못된 기억이 축적되는 것을 막는 품질 게이트 (US-05).
구성 요소
요약 (편집 가능), 키워드 칩 (추가/삭제 가능), 프로필 반영 제안 (예: "관심사에 'MSA' 추가?" — 개별 수락/거절), 확정 버튼
기능
요약·키워드 수정, 프로필 제안 처리, 확정 → 타임라인 반영
이동
확정 → SCR-04
예외
확정 전 이탈 시 임시 저장 (미확정 상태 유지, 타임라인 미노출)
SCR-08기록 상세FR-403, FR-404, FR-406
구성 요소
일시, 유형 (1:1/개인/회의), 요약 전문, 키워드, 전사 전문 보기 (STT 원문 — 접힘 상태 기본), (보존 시) 원본 음성 재생 (FR-406, 선택)
기능
요약 수정, 기록 삭제, 전사 전문 열람
이동
뒤로 → SCR-04
SCR-09검색FR-405
구성 요소
검색바 (자연어 질의 허용 안내 문구, 예: "여행 얘기했던 사람"), 결과 리스트 (인물 결과 + 기록 결과 구분 표시, 관련도순)
기능
인물명 검색 (필수), 키워드·자연어 시맨틱 검색 (권장, FR-405 — 03 아키텍처 검색 흐름)
이동
인물 결과 → SCR-04 · 기록 결과 → SCR-08
SCR-10설정FR-502, FR-503
구성 요소
계정 정보, 원본 음성 보존 정책 (요약 후 삭제/보존), 로그아웃, 데이터 전체 삭제(탈퇴), 약관/개인정보처리방침, 앱 버전
기능
보존 정책 변경 (FR-503), 로그아웃, 탈퇴 (FR-502 — 2단계 확인)
예외
탈퇴는 되돌릴 수 없음을 명시, 확인 문구 입력 등 안전장치

4. 공통 UI 규칙

  • 처리 중 상태는 항상 보인다. AI 처리(STT/요약)는 수 초~수 분 걸릴 수 있다. 사용자가 "내 녹음이 사라졌나?"라고 느끼는 순간 신뢰가 깨진다. 처리 중/실패/재시도 상태를 타임라인에서 숨기지 않는다.
  • 처리 완료 알림: 앱이 백그라운드일 때 AI 처리 완료를 푸시 알림으로 알릴지 여부 팀 결정 필요. 알림 없이는 사용자가 결과 확인(SCR-07)에 진입할 계기가 없다는 점을 고려할 것.
  • 파괴적 동작은 2단계 확인. 인물 삭제, 기록 삭제, 탈퇴.
  • 오프라인 허용 범위: 녹음은 오프라인 가능 (로컬 보관 후 업로드), 조회는 온라인 필수 (MVP 기준, 캐시 전략은 팀 결정 필요).
  • 디자인 시스템 (색상, 타이포, 컴포넌트): 팀 결정 필요 — 별도 디자인 문서로 분리 권장.

5. 미결 검토 항목

이번 점검에서 화면 정의가 없거나 결정이 필요한 것으로 확인된 항목.
#항목상태
1회의 유형(FR-205, 권장) 기록 화면 — 현재 미정의. MVP에서 구현 시 SCR-04 유형 선택에 "회의" 추가 필요팀 결정 필요
2빠른 녹음: 인물 선택 없이 홈에서 바로 녹음 시작 → 종료 후 인물 매핑. 입력 부담(R1)을 더 줄이는 안이나 플로우가 복잡해짐검토 제안
3AI 처리 완료 푸시 알림 도입 여부 (공통 규칙 참조)팀 결정 필요
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-24AI API 전환지원 종료 전에 STT 전환처(클로바/Whisper — 한국어 인식률·단가 비교) 선정 + 임베딩·리랭커 대체 공급자(예: OpenAI embeddings) 결정, 어댑터 교체2026-08-말 (지원 종료) 전 — STEP 진행 상황과 무관하게 수행

STT를 어댑터 인터페이스 뒤에 두는 이유가 이것이다 (BE-14). 어댑터만 지키면 전환은 구현체 교체로 끝난다.

2. STEP별 작업 목록

STEP 0 — 선행 결정·셋업

코드보다 먼저 끝내야 하는 것들.

ID작업내용완료 기준 (DoD)규모
BE-01AI 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-05DB 스키마 v1BE-02 확정 모델을 Flyway 마이그레이션으로 작성마이그레이션 실행 시 전체 테이블 생성S
BE-06공통 골격응답 포맷 통일, 전역 예외 처리, 요청 로깅샘플 API 1개가 규격대로 성공/에러 응답S
BE-07개발용 인증 스텁고정 토큰 → user_id 해석하는 임시 인증. 정식 인증은 STEP 5로 미룸 — 코어 파이프라인 검증을 인증 연동이 막지 않게토큰 헤더로 user 스코프 동작S

STEP 2 — 도메인·입력

ID작업내용완료 기준 (DoD)규모
BE-08인물 APIPerson CRUD + 목록(최근 대화순) + 이름 검색 (FR-101~103)Postman으로 등록→조회→수정→삭제 왕복M
BE-09기록 생성 APIConversation 생성 — 유형(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-14STT 어댑터지원 STT API(/api/stt) 연동, transcript 저장 (TRANSCRIBED). 반드시 어댑터 인터페이스 뒤에 구현 — 9월 전환(BE-24) 확정. 장시간 녹음 청킹: 실행 시간 제한(504) 대비 분할 전사 + 이어붙이기 (기준은 BE-01 실측값)실제 녹음 파일(장시간 포함)이 텍스트로 변환됨M
BE-15LLM 어댑터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-18E2E 통합 검증팀이 직접 녹음한 실데이터로 업로드→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-23AWS 배포 + API 문서BE-03에서 결정한 AWS 구성으로 배포, OpenAPI(Swagger) 문서화 → Flutter 개발에 공유외부에서 접근 가능한 API + 문서 URLM

3. 운영 규칙

  1. 스코프 동결. 이 목록에 없는 기능(워치, 캘린더 연동, 회의 유형 등)은 STEP 5가 끝나기 전에 추가하지 않는다. 아이디어는 백로그에 적어두고 지나간다.
  2. STEP 3 완료가 첫 번째 축배. 녹음이 요약으로 변하는 순간이 이 서비스가 처음으로 "존재"하는 순간이다. 여기까지 최단 경로로 간다.
  3. BE-24(AI API 전환)만 달력을 본다. 나머지는 순서대로, 이것만 8월말 전에.
  4. 작업 시작/완료 시 문서(05-백엔드작업일정.md)의 해당 행에 담당자와 날짜를 기록한다.
DOCUMENT 06

기술스택 정리

관련 문서: 03 아키텍처정의서 (시스템 구조) · 05 백엔드작업일정 (작업 순서) · 작성 2026-07-08

1. 한눈에 보기

계층선택상태
모바일 앱Flutter (Dart)✅ 확정
API 서버Spring Boot / Java✅ 확정
DBPostgreSQL (단독) + pgvector 확장 (시맨틱 검색용 벡터 저장)✅ 확정
파일 스토리지S3 호환 (AWS S3 예정)방향 확정
STTAI API 오마카세 (지원, ~2026-08-말) → 9월 클로바/Whisper 전환부분 확정 (BE-24)
임베딩·리랭커AI API 오마카세 (/api/embedding, /api/rerank) — 기록 시맨틱 검색용확정 (지원 기간)
LLMOpenAI 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)

언어·프레임워크 버전

항목권장비고
JavaLTS 버전 (21 또는 최신 LTS)BE-04(스캐폴드) 시점의 최신 LTS로 고정하고 버전 기록표에 기재 → 착수 시 확정
Spring Boot최신 안정 버전 (3.x 계열 이상)BE-04 시점에 고정. 마이너 업데이트는 수시, 메이저 업그레이드는 STEP 5 이후
빌드 도구Gradle (Kotlin DSL)Maven도 무방 — 팀 익숙한 쪽으로 팀 결정 필요

주요 의존성

용도라이브러리도입 시점
REST APIspring-boot-starter-webSTEP 0 (BE-04)
입력 검증spring-boot-starter-validationSTEP 1
DB 접근spring-boot-starter-data-jpa + PostgreSQL 드라이버STEP 1
DB 마이그레이션FlywaySTEP 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 + JWTSTEP 5 (BE-19) — 그 전엔 개발용 토큰 스텁 (BE-07)
로깅SLF4J + Logback (기본)STEP 1
보일러플레이트 절감Lombok선택 — 팀 합의 팀 결정 필요

테스트

용도도구수준
단위/통합 테스트JUnit 5 + Spring Boot Test (기본 포함)핵심 도메인 로직과 파이프라인 상태 전이는 테스트 필수
DB 통합 테스트Testcontainers (PostgreSQL)선택 — Docker 위에서 실DB 테스트. 여유 되면 도입
API 수동 테스트Postman 또는 IntelliJ HTTP ClientDoD 검증용 (05 문서의 완료 기준)

3. 모바일 앱 (Flutter)

항목권장
Flutterstable 채널 최신 — 앱 착수 시점에 고정하고 버전 기록표에 기재 착수 시 확정
지원 OSAndroid 우선, 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

구성

항목현재이후원칙
STTAI 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방식요청응답주의
STT
POST /api/stt
multipart/form-datafile(필수, 오디오), 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 ComposePostgreSQL (+ MinIO/LocalStack 도입 시 포함). 개발자 로컬에서 전체 스택 기동 가능해야 함
버전 관리GitHub (org: HanLaBong-and-Children)documents(문서) / backend / app 저장소 분리 예정
CIGitHub Actions최소: PR 시 빌드+테스트. 도입 시점 팀 결정 필요 (BE-04에서 같이 하면 편함)
문서이 저장소 + Cloudflare Pagesmd 수정 시 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에서 같이 할지