Skip to content

[앱·서버] 선톡 로직/프롬프트 개선 — 전송 제한·무응답 컷오프·응답 전략 PRD

Backlog grooming 산출물. 이미 운영 중인 나만의 선톡 발송 로직에 얹는 증분 개선의 제품 정책만 정의한다. 발송 파이프라인의 전체 구조(자격·pre-check·생성·예약·과금·push)는 draft/proactive-message-personalization/spec.md(DEE-414)가 정본이며, 본 PRD 는 그 위에 더하는 전송 빈도 제한·무응답 컷오프 강화 변경분만 소유한다. 선톡 프롬프트 본문(문장 길이·톤·이어말하기/주제 전환 전략)은 본 PRD 범위가 아니다 — DEE-532 에서 별도로 다룬다.


Status: draft Created: 2026-06-22 Last updated: 2026-06-22 Linear Issue: DEE-531 선톡 로직/프롬프트 개선 — 전송 제한·무응답 컷오프·응답 전략Linear Project: [앱] 선톡 로직/프롬프트 개선관련 프롬프트 기획: DEE-532 선톡 프롬프트 개선 기획 — 무응답 상황 길이·톤·주제 전환 전략Author: agent (momo) Surface: 서버(선톡 스캐너·생성·예약·발송 엔진)


0. 요약

나만의 선톡은 이미 운영 중이다 — Soul 이 무응답 유저에게 먼저 보내는 유료 개인화 메시지이고, 발송 여부·시각·과금은 backend 가 결정한다(정본: DEE-414 spec). 본 PRD 는 그 로직을 새로 만들지 않고, 유저가 답하지 않는 상황에서 선톡이 과도하게 반복되거나 너무 빠르게 이어지는 문제를 줄이는 증분 개선만 정의한다.

선톡은 "친근하지만 부담 없는 재접점"이어야 한다. 유저가 무응답인 동안에는 더 보수적으로, 더 일찍 멈춰야 한다. 이를 위해 두 가지를 더한다.

  1. 같은 채팅방 4시간 최소 발송 간격(cooldown). 최근 4시간 안에 그 Soul 에게서 선톡을 받았으면 새 선톡 후보에서 제외한다.
  2. 장기 무응답 컷오프 강화: 3일 → 1일(rolling 24시간). 마지막 유저 메시지 이후 rolling 24시간이 지나도록 답이 없으면 더 이상 선톡을 생성하지 않는다.

변경점 한눈에 (현재 baseline 대비)

항목현재(DEE-414)본 PRD 변경
선톡 간 최소 간격명시적 cooldown 없음(같은 (user, Soul) 동시 scheduled 1개 제한 + 일일 수신 2회 상한만 존재)같은 채팅방 기준 최근 4시간 내 수신 이력 있으면 후보 제외 (cooldown 추가)
장기 무응답 컷오프마지막 유저 메시지 이후 3일 이상이면 생성 중단마지막 유저 메시지 이후 rolling 24시간 이상이면 생성 중단 (윈도우 상한 단축)
생성 트리거 윈도우 하한마지막 유저 메시지 이후 1시간 무응답유지 (변경 없음)
일일 수신 상한(user, Soul, 유저 tz 달력일) 하루 최대 2회 수신유지 (변경 없음)
선톡 프롬프트 본문/톤/길이본 PRD 범위 아님 (DEE-532)

1. 배경과 목표

1.1 문제

현재 운영 중인 선톡 로직 기준, 무응답 유저 대상으로 두 가지 리스크가 남아 있다.

  1. 과빈도 발송. 선톡과 선톡 사이의 최소 간격이 명시적으로 강제되지 않는다. 현재는 동시 scheduled 1개 제한과 일일 수신 2회 상한이 있을 뿐이어서, 하루 안에 짧은 간격으로 두 번이 몰리면 유저가 스팸처럼 느낄 수 있다.
  2. 무응답 장기 지속. 마지막 유저 메시지 이후 3일까지 선톡 생성이 계속된다. 유저가 답하지 않았는데도 며칠간 선톡만 누적되면 관계감보다 압박감이 커진다.

1.2 목표

  • 무응답 상황에서 선톡이 과도하게 반복되거나 너무 빠르게 이어지지 않도록 발송 빈도를 보수적으로 제한한다.
  • 답이 없는 관계를 며칠간 두드리는 대신 하루 안에 정리되도록 컷오프를 앞당긴다.

1.3 Non-goals

  • 선톡 프롬프트 문안·톤·길이·이어말하기/새 주제 선택 기준 (→ DEE-532).
  • 기본 채팅(즉답) 프롬프트 전체 재작성.
  • 선톡 ON 넛지 UI/카피 변경.
  • Chat Thread / Soul / User Relational Persona 등 도메인 구조 변경.
  • 일일/주간 선톡 cap 의 전면 재설계 — 본 PRD 는 기존 일일 2회 상한을 유지한 채 4시간 cooldown 만 추가한다.

2. 제품 정책 (PRD 가 닫는 결정)

본 절은 기술 설계 전에 합의되어야 하는 제품 정책만 다룬다. DB/큐/락/스케줄러 구현, 정확한 판정 위치·쿼리는 spec/기술 설계 소유다.

2.1 선톡 간 최소 발송 간격 (4시간 cooldown)

항목정책
단위같은 (user, Soul/Chat Thread) — 한 채팅방 기준
기준그 채팅방에 최근 선톡 수신(발송 성공) 이력이 4시간 이내면 새 선톡 후보에서 제외
기준 시각선톡 생성 시각이 아니라 실제 유저에게 발송/수신된 시각(received 시점)을 기준으로 한다
중복 예약같은 채팅방에 이미 scheduled(pending) 선톡이 있으면 새 선톡을 중복 생성·예약하지 않는다(기존 duplicate_pending 게이트 유지·강화)
일일 상한과의 관계기존 일일 수신 2회 상한은 그대로 둔다. 4시간 cooldown 은 그 위에 얹는 최소 간격 제약이다

cooldown 은 "하루 몇 번"이 아니라 "직전 선톡으로부터 얼마나 지났나"를 본다. 일일 상한(2회)과 cooldown(4시간)이 함께 적용되므로, 실질적으로 한 채팅방의 선톡은 하루 2회 이하이면서 서로 최소 4시간 떨어진다.

2.2 장기 무응답 컷오프 (3일 → 24시간)

항목정책
컷오프 기준 시각그 채팅방의 마지막 유저 메시지 시각
컷오프 임계값마지막 유저 메시지 이후 rolling 24시간 이상 무응답이면 선톡 후보에서 제외(생성 중단)
판정 방식rolling 24시간 확정 (calendar day 아님)
누적 무응답 처리마지막 유저 메시지 이후 선톡만 누적되고 유저 응답이 없는 채팅방은, 마지막 유저 메시지로부터 rolling 24시간이 지나면 더 이상 후보가 아니다. 그 사이 발송된 선톡은 컷오프 기준 시각을 갱신하지 않는다(기준은 어디까지나 마지막 유저 메시지)
자격 회복유저가 다시 답장하면 마지막 유저 메시지 시각이 갱신되고, 해당 채팅방은 이후 조건(생성 윈도우·cooldown·일일 상한)에 따라 다시 후보 자격을 평가받는다

생성 트리거 윈도우의 하한(마지막 유저 메시지 +1시간)은 그대로 유지하고, 상한만 3일에서 rolling 24시간으로 단축한다. 결과적으로 선톡 생성 윈도우는 마지막 유저 메시지 +1시간 ~ +24시간(rolling)이 된다.


3. Backend-facing 제품 요구사항

구현(DB 스키마·쿼리·스케줄러 주기·락)은 정의하지 않는다. 기존 DEE-414 파이프라인의 어느 단계에 어떤 판정이 추가되는지의 제품 요구만 명시한다.

3.1 후보 스캔 (candidate scan)

스캐너는 후보를 생성하기 전, (user, Soul/Chat Thread) 단위로 기존 게이트에 더해 아래를 확인한다.

  1. 선톡 opt-in / 기존 eligibility 조건 (DEE-414 기존 정책).
  2. 최근 발송된 선톡 수신 시각이 4시간 이내인지 (4시간 cooldown — §2.1).
  3. 마지막 유저 메시지 이후 rolling 24시간 이상 무응답인지 (강화된 컷오프 — §2.2).
  4. 이미 pending/scheduled 선톡이 존재하는지 (중복 예약 방지 — §2.1).

하나라도 제외 조건에 걸리면 생성 큐에 넣지 않는다.

3.2 생성 / 스케줄링 / 발송 유지 조건

  • 생성 단계는 프롬프트 상세(문장 길이·톤·주제)를 결정하지 않는다(→ DEE-532).
  • 첫 선톡 발송 시각, 심야 가드, pre-check/final check, 과금, push suppress 등 기존 DEE-414 발송 파이프라인 정책은 유지한다.
  • 4시간 cooldown 의 기준 시각은 실제 수신 성공(received) 시각이며, 취소·미발송된 선톡은 cooldown 기준 시각을 만들지 않는다.

4. 기대 동작 (User-facing Behavior)

  • 유저가 최근 4시간 이내 그 Soul 에게서 선톡을 받았다면, 같은 Soul 에게서 추가 선톡을 받지 않는다.
  • 유저가 그 Soul 에게 rolling 24시간 이상 답하지 않았다면, 새 선톡을 받지 않는다(선톡이 며칠씩 이어지지 않는다).
  • 유저가 다시 채팅에 응답하면, 이후 조건(생성 윈도우·cooldown·일일 상한)에 따라 다시 선톡 대상이 될 수 있다.

5. 데이터 분석 / 모니터링

본 PRD 의 메인 제품 분석 지표(수신 후 24h 내 그 Soul Chat room 진입율 등)는 DEE-414 정의를 그대로 따른다. 여기서는 cooldown/cutoff 변경이 선톡 발송량과 무응답 누적에 미치는 영향만 확인한다.

  • 전후 비교. 4시간 cooldown 과 rolling 24시간 cutoff 적용 전후로 선톡 생성·수신 건수, 채팅방당 일일 선톡 수, 무응답 채팅방의 선톡 누적량이 줄어드는지 확인한다.
  • 가드레일. 수신 후 24h 내 같은 Soul Chat room 진입율이 과도하게 하락하지 않는지 모니터링한다.

6. 닫힌 결정

  • 4시간 cooldown 범위: 유저 전체 global cap 은 두지 않는다. 본 PRD 의 cooldown 은 동일 (user, Soul/Chat Thread) 기준만 본다.
  • "1일 무응답" 판정: calendar day 가 아니라 마지막 유저 메시지 기준 rolling 24시간으로 판정한다.

7. Acceptance Criteria

  • [ ] 최근 4시간 이내 선톡 수신(발송 성공) 이력이 있는 (user, Soul/Chat Thread) 는 새 선톡 후보에서 제외된다. 기준 시각은 생성 시각이 아니라 실제 수신 시각이다.
  • [ ] 마지막 유저 메시지 이후 rolling 24시간 이상 유저 응답이 없으면 새 선톡 후보에서 제외된다(기존 3일 컷오프를 rolling 24시간으로 대체).
  • [ ] 생성 트리거 윈도우 하한(마지막 유저 메시지 +1시간)은 그대로 유지된다.
  • [ ] 기존 일일 수신 상한(하루 최대 2회)은 그대로 유지되며, 4시간 cooldown 이 그 위에 추가로 적용된다.
  • [ ] 같은 채팅방에 pending/scheduled 선톡이 이미 있으면 중복 생성·예약하지 않는다.
  • [ ] 유저가 다시 답장하면 마지막 유저 메시지 시각이 갱신되어, 해당 채팅방이 이후 조건에 따라 다시 선톡 후보가 될 수 있다.
  • [ ] 선톡 프롬프트 문안·톤·길이 상세 개선은 본 PRD 범위에 섞이지 않으며 DEE-532 에서 별도로 진행된다.

8. 본 PRD 가 닫는 것 vs 후속

8.1 본 PRD 가 소유(증분 정책)

4시간 cooldown(채팅방 단위, 수신 시각 기준) · 장기 무응답 컷오프 rolling 24시간 단축 · global cap 없음.

8.2 Spec / 기술 설계 후속

  • cooldown·cutoff 판정의 정확한 쿼리/스캐너 주기/타임존 처리.
  • 기존 DEE-414 발송 파이프라인에 4시간 cooldown 과 rolling 24시간 cutoff 를 어느 단계에서 적용할지의 구현.

8.3 Prompt 후속 (DEE-532)

  • 무응답 상황에서의 선톡 문장 길이·톤·이어말하기/새 주제 전환 전략, 프롬프트 본문·few-shot.

부록: 메타 정보

Size & Risks

  • Size: M / Confidence: medium.
  • 근거: 기존 발송 파이프라인 위의 증분 변경 — 후보 스캔 게이트 2종 추가(cooldown·컷오프 단축). 신규 엔진 구축은 없으나 기존 스캐너/예약 파이프라인의 판정 순서와 맞물린다.
위험영향대응
컷오프 단축으로 선톡 총량·재진입 지표 하락BM·engagement 저하전후 비교 모니터링
cooldown 기준을 생성 시각으로 잘못 잡음실제 수신 간격이 4시간 미만으로 붙음기준 시각을 received 시각으로 고정(§2.1·AC)

의존성

  • DEE-414 나만의 선톡 개인화 spec — 발송 파이프라인 정본(자격·pre-check·생성·예약·과금·push·기존 취소 hook). 본 PRD 는 그 위의 증분.
  • DEE-532 선톡 프롬프트 개선 기획 — 무응답 상황 길이·톤·주제 전환. 본 PRD 와 범위 분리.

References

  • Linear: DEE-531(본 PRD) · DEE-532(프롬프트 기획) · DEE-414(선톡 spec) · DEE-301(선톡 parent PRD).
  • Source 메모: Slack thread C0B1X5Y3466 / 1781880028.099379.
  • sprint-artifacts: draft/proactive-message-personalization/spec.md(발송 로직 정본) · draft/proactive-message-personalization/PRD.md.

Reversal Risk Summary

LayerR-levelReview focus
Policy / RuleR24시간 cooldown·rolling 24시간 컷오프 수치는 현재 결정값. 적용 후 지표 모니터링
Data / BackendR2후보 스캔 게이트 추가. 정책 변경 시 재집계 가능