- 기간: 2025.11 - 2025.12
- 역할: Backend
- 핵심 포인트:
- Welstory 외부 API를 ID/PW 로그인 기반으로 연동
- SQL → AI 최종 선택의 하이브리드 추천 구조
- MDC(traceId) + JSON 구조 로그 + OpenSearch 기반 관측 시스템 설계
- Welstory 외부 급식 플랫폼과 연동하여 당일 점심 식단을 조회
- 사용자 영양 목표(칼로리/탄단지/Focus)에 맞는 메뉴 자동 추천
- Welstory 메뉴 외에도 사용자가 직접 먹은 음식 기록/등록 가능
- 누적 섭취 데이터를 기반으로 다음 끼니 추천에 반영
- 가입 시 목표(영양관리/다이어트/벌크업) 선택
- 목표별 세부 설문(질환/알러지/음주/흡연/활동량 등) 수집
- 수집 데이터는 목표 산출 + 추천 맥락 정보로 활용
- AI가 전체 Food DB를 직접 소화하는 비효율을 피하기 위해 2단계 구조 채택
-
- SQL 필터링으로 상위 후보군 추출
-
- AI가 사용자 목표/상황/선호를 고려해 최종 선택 + 추천 이유 생성
-
- 인증 토큰 수명 관리(자동 로그인, 401 시 1회 재시도)
- timeout 설정, 응답 내부 에러코드 분기, 장애 전파 방지
- 외부 식당 ID의 비일관 동작을 발견하고 DB를 Source of Truth로 설정
- 식당명 ↔ restaurantId 매핑을 내부에서 관리
- ID/PW 로그인 기반 인증 흐름 구현 (토큰/세션성 Authorization 관리)
ensureToken → loginInternal → callWithRetry(401/403 시 재로그인)으로 복구 경로 내장- 응답을 DTO로만 받지 않고
HttpResult(ok/status/headers/json/text)로 원문 + 파싱 동시 보관 - 외부 식당 ID 불안정 문제를 해결하기 위해
restaurant_mapping테이블로 DB SoT 설계
- Configuration / Transport / Auth / Endpoints / DTO / Wrapper / Gateway / Service
- Gateway 인터페이스로 캐시(Caffeine/Redis) 확장 지점을 확보
- MDC 기반
traceId/userId/clientIp자동 주입 필터 구현 HTTP_ACCESS / ERROR / BUSINESS_EVENT로그 타입 분리- Logback local(텍스트) / prod(JSON) 분리
- Filebeat → OpenSearch → Dashboards 파이프라인 구성(초기 Logstash 미도입)
- Backend(Spring Boot): 유스케이스 조립, 추천 결과 저장/응답
- External API(Welstory): 로그인 기반 토큰 인증 + 메뉴/영양 조회
- DB(PostgreSQL): 사용자/식단/매핑(SoT) 저장
- Observability: JSON 로그 → Filebeat → OpenSearch → Dashboards
- 요청 단위 traceId 생성 또는
X-TRACE-ID헤더 수용 - 모든 로그에 traceId/userId/clientIp 자동 주입
- 요청 종료 시 MDC clear
- HTTP_ACCESS: 요청/응답 시간, status, uri
- ERROR: errorCategory, errorCode, httpStatus, traceId
- BUSINESS_EVENT: eventCode + 도메인 키(groupId 등)
- App(JSON stdout) → Filebeat(JSON 파싱) → OpenSearch → Dashboards
- 초기에는 Logstash 미도입(운영 리소스/복잡도 절감)
- CORE_READY는 정상 동작했지만 AI_READY 단계에서 클라이언트 타임아웃 발생
- 원인: waiter 등록 타이밍과 complete 호출 사이 레이스 컨디션 + 상태 플래그 갱신 시점 불일치
해결
- 사전 상태 체크 API 추가(isAlreadyReady)
- TxAfterCommit 이후 complete(AI_READY) 호출로 이벤트 발행 시점 정렬
| 분류 | 기술 스택 |
|---|---|
| Frontend | React 19, Vite |
| Backend | Spring Boot 3.5.8, Spring Security, JPA |
| DB | PostgreSQL 42.7.4 |
| Infra | Docker, GitHub Actions |
| Logging | Logback(JSON), Filebeat, OpenSearch, Dashboards |
