본문으로 건너뛰기

시스템 아키텍처

이 문서로 해결할 질문

  • Mealio의 주요 컴포넌트와 데이터 흐름은 무엇인가요?
  • 동기(HTTP)와 비동기(Kafka) 경계는 어디인가요?
  • 프로덕션 인프라 배치는 어떻게 되나요?

컴포넌트 다이어그램

  • Frontend: SSR·ISR을 사용하므로 Node.js 서버 런타임이 필요합니다. 백엔드와 독립적으로 배포하거나 동일 환경에 함께 배포할 수 있습니다.
  • Backend: producer·consumer·Kafka·관측은 함께 배포되며, Nginx가 외부 요청을 라우팅합니다.

요청 경로 (동기)

읽기는 Cache-Aside를 우선 적용하며, 쓰기는 HTTP 200 응답 후 Consumer가 최종 반영합니다.

이벤트 경로 (비동기)

패키지 책임

패키지동기/비동기핵심 책임
client동기(HTTP/SSE)UI, BFF Route Handler, ISR
producer동기 + 발행API, OAuth, 캐시 조회, Kafka produce, SSE 중계
consumer비동기Kafka consume, GPT, 추천, ETL, KPI 롤업
shared스키마, 타입, Kafka/Redis 상수

데이터 저장소 역할

저장소데이터 예
PostgreSQLUser, Recipe, Ingredient, UserRecipeRecommendation
MongoDBInventory, ChatbotLog, EventLog, ingestion jobs
RedisAPI 캐시, refresh 세션 캐시, 챗봇 스트림, dedupe
Kafka도메인 이벤트 버스 (영속 아님)
S3레시피 이미지 (확장)

도메인

외부 서비스

서비스사용처
OpenAI챗봇, recipe ingestion Batch
Sentry에러 추적 (client, producer, consumer)
GA4프론트 행동 분석
CloudFlareCDN (정적 자산·ISR)

크로스 컷 관심사

관심사구현
인증OAuth 백엔드 주도, JWT HttpOnly 쿠키
캐시Producer Cache-Aside + Consumer 무효화
관측성Correlation-ID, Prometheus /metrics, EventLog
신뢰성Kafka at-least-once, DLQ, 멱등 키

관련 문서