본문으로 건너뛰기

공유 계약

이 문서로 해결할 질문​

  • Kafka·SSE·도메인 이벤트 타입은 어디에 정의되나요?
  • Producer와 Consumer가 공유하는 계약 목록은 무엇인가요?
  • 캐시 무효화·챗봇 크레딧·레시피 수집 상수는 어디서 관리하나요?

Kafka 토픽​

Kafka 토픽 상수는 server/shared/.../kafka-topics.ts에 정의되어 있습니다.

상수토픽명
CHATBOT_REQUESTSchatbot-requests
USER_EVENTSuser-events
ACTIVITY_EVENTSactivity-events
CACHE_INVALIDATIONcache-invalidation
RECIPE_INGESTION_PARSE_SUBMIT_TRIGGEREDrecipe-ingestion-parse-submit-triggered
RECIPE_INGESTION_PERSIST_TRIGGEREDrecipe-ingestion-persist-triggered
RECIPE_INGESTION_EMBED_SUBMIT_TRIGGEREDrecipe-ingestion-embed-submit-triggered

DLQ는 KAFKA_DLQ_TOPICS.* 상수로 정의되며, 메인 토픽마다 -dlq 접미사를 붙입니다.

이벤트 타입 (types/events/)​

파일용도
user-event.event.tssignup, login, nickname.update
inventory-event.event.tsingredient., recipe.favorites_
activity-event.event.tsrecipe.view, recipe.share, search.*
chatbot-request.event.ts챗봇 Kafka 페이로드
chatbot-stream-event.event.tsSSE chunk/done/error
cache-invalidation.event.tsUSER_PROFILE, INVENTORY, RECIPE, RECOMMENDATION, INGREDIENT

이벤트 이름과 KPI 매핑은 Observability 문서를 참고하세요.

Redis 채널​

Redis Pub/Sub 채널 헬퍼는 server/shared/.../redis-channels.ts에 정의되어 있습니다.

  • getChatbotStreamChannel(streamChannelId)는 chatbot:stream:{id} 형식의 채널 이름을 반환합니다.

캐시 키​

캐시 키 규칙은 Redis 키/캐시 계약 문서를 참고하세요.

챗봇 크레딧​

챗봇 크레딧 정책은 server/shared/.../user-credits.policy.ts에 정의되어 있으며, DEFAULT_USER_CREDIT_BALANCE·DEFAULT_USER_CREDIT_MONTHLY_LIMIT·computeChatbotCreditCost()를 제공합니다.

  • Producer의 User 생성과 Consumer의 크레딧 차감에서 동일한 정책을 사용합니다.

Recipe Ingestion​

server/shared/.../recipe-ingestion.ts에는 status enum과 source 상수가 정의되어 있습니다.

recipe-ingestion.policy.ts에는 retry·batch size·TTL 정책이 정의되어 있습니다.

Observability​

  • observability.config.ts에서 METRICS_ENABLED, SLOW_QUERY_THRESHOLD_MS 등 관측 env를 검증·로드합니다.
  • sentry.constants.ts에서 Sentry 태그와 민감 키 패턴을 정의합니다.

변경 절차​

  1. shared 패키지의 타입·상수를 수정합니다.
  2. Producer 발행 코드와 Consumer 소비 코드를 동기화합니다.
  3. Observability·API 계약·패키지 문서를 갱신합니다.
  4. 로컬에서는 Kafka 토픽을 재생성하고, 운영 환경에서는 마이그레이션 계획을 수립합니다.

관련 문서​