-
카카오클라우드 - 클라우드 개발자 교육 19주차 후기(3/30 ~ 4/3)bootcamp 2026. 4. 20. 13:42
설계 부채를 마주한 일주일 — DB 정합성, 단일 진실 원본, 관찰성 스택
| 서비스 | 커밋 수 | 핵심 키워드 |
|---|---|---|
| Agent | 10건 | Phase 6~8 완료 · relation Intent · Neo4j 멀티홉 · 파이프라인 확장 |
| Backend | 25건+ | JPA/MyBatis 하이브리드 전환 · Like 도메인 Deprecated · 운영 도구 11탭 · 통계 12탭 |
| Client | 15건 | 헤더 v2 (4탭) · 커뮤니티 퀴즈 통합 · 포인트 상점 v3.2 · 랜딩페이지 |
| Recommend | 10건 | Prometheus `/metrics` · ELK JSON 로그 · 장르/성인물 필터 |
| Admin | 5건 | 운영 도구 11 서브탭 · 감사 diff · Phase 2026-04-09 다기능 |월요일 아침 Agent 쪽 커밋 `6178971 feat: Phase 6~8 — LangChain Tools 7개 + Content Analysis + Roadmap Agent + 테스트 보강` 으로 한 주가 시작됐어요.
지난 주까지 Phase 5 (Chat Agent 16노드) 만 완료돼 있었는데, 이번 주에 Phase 6 ~ 8 을 한꺼번에 밀어붙여야 했습니다.
— LangChain Tools 7개
`tools/` 폴더에 영화 정보 조회·상영관·예매 같은 외부 API 도구 7개를 LangChain `@tool` 데코레이터로 감쌌어요.— 테스트 332 pass
지금까지 쌓인 테스트 픽스쳐를 전부 재정비하면서 `conftest.py` 를 mock_ollama / mock_redis_cf / mock_hybrid_search / mock_session_store 네 개 표준 fixture 로 정돈. 이 때 패턴이 이후 4월 내내 회귀 테스트 추가의 기반이 됐습니다.— relation Intent 이번 주 가장 의미 있던 작업
커밋 `8d4286b feat: relation Intent + graph_traversal_node — 관계 기반 Neo4j 멀티홉 검색` 이 개인적으로 제일 뿌듯했던 건입니다.문제 상황: "봉준호 감독 스릴러 배우가 나온 영화" 같은 질의는 기존 Qdrant/ES 하이브리드 검색으로는 절대 풀 수 없어요. 벡터 유사도로는 "봉준호" 와 "스릴러 배우" 의 2-hop 관계가 표현이 안 됩니다.
해결: Neo4j 에 `(감독)-[:DIRECTED]->(영화)<-[:ACTED_IN]-(배우)` 그래프를 구축하고, `intent_emotion_classifier` 에 `relation` Intent 를 추가. 이 Intent 로 분기되면 `graph_traversal_node` 에서 Cypher 쿼리는 다음과 같습니다.
```cypher
MATCH (d:Person {name: $director})-[:DIRECTED]->(m1:Movie)
<-[:ACTED_IN]-(a:Person)-[:ACTED_IN]->(m2:Movie)
WHERE $genre IN m2.genres
RETURN m2 LIMIT 10
```
멀티홉 패턴 3가지를 지원:
- chain: 감독 → 배우 → 영화
- intersection: 배우 A ∩ 배우 B 가 함께 나온 영화
- filmography: 특정 인물의 작품 전체
이게 중간발표 때 나올 "Neo4j 를 꼭 써야 했냐" 질문에 대한 답변의 근거가 됐어요.====== JPA/MyBatis 하이브리드 전환 (Backend) =======
e42ae8a refactor: JPA/MyBatis 하이브리드 전환 — Phase 1 + 1.5 + 2 완전 이행` 이 이번 주 Backend 최대 작업이었어요.
### 왜 하이브리드?
팀 내 DB 접근 스타일이 갈렸어요:
- **윤형주(나)**: JPA `@Entity` + `JpaRepository` + Service — "DDL 자동화 + Spring 생태계 정합성"
- **김민규/이민수**: MyBatis Mapper — "복잡한 JOIN 쿼리는 XML 이 더 편함"
둘 다 장단점이 있어서 **"같은 `DataSource`/`PlatformTransactionManager` 공유, DDL 은 JPA, R/W 는 자유"** 로 합의. 상세 규칙은 `docs/리워드_결제_설계서.md` §15 에 박아뒀습니다.4탭 구조
Client 에서 기존 7탭 네비게이션을 **4탭(홈 · 영화 · 커뮤니티 · 마이픽)** 으로 축소. 퀴즈는 커뮤니티 안으로 흡수. 결제/고객센터는 아바타 드롭다운으로 이동. 커밋 메시지에 "헤더 v2 (4탭 구조)" 로 적어놓은 게 나중에 검색 편의 최고.======= 관찰성 스택 구축 =======
VM3 (10.20.0.12) 에 올린 관찰성 스택 (7개 컨테이너)
```yaml
# docker-compose.monitoring.yml
services:
prometheus: # 메트릭 수집 — 5초 주기 scrape
alertmanager: # 알림 라우팅 (Slack 웹훅)
grafana: # 대시보드 3종 — monglepick-api / infra / logs
elasticsearch: # 로그 저장 + 검색 (Nori 한국어 분석기)
logstash: # Backend/Agent/Recommend JSON 로그 → ES
kibana: # 로그 UI
node-exporter: # VM 호스트 메트릭
```



주간 회고
지표
- PR: 조직 레포 15건 머지
- 테스트: 332 pass (Agent)
- 신규 API: Backend 11개 (운영 도구) + Agent 3개 (relation Intent, Content, Roadmap)
잘한 것
- 단일 진실 원본 원칙 적용
- 관찰성 스택 조기 구축 — 다음 주 JWT 이슈 추적 때 Kibana 로 원인 찾음
- JPA/MyBatis 하이브리드 합의 — 팀원별 스타일 존중 + DDL 일원화
못한 것
- Phase 6 `tool_executor_chain` 미완 — 7개 Tools 정의만 해놓고 실제 실행 플로우 미구현. 여전히 TODO
- 관찰성 네이밍 초기 방치 — 금요일 오후에야 수습. 처음부터 컨벤션 박았어야함.
- 다국어 검색 Phase ML-4 — 운영 재적재 못 돌림. 다음 주로 밀림
다음 주 목표
- Movie Match "둘이 영화 고르기" 재설계 (유저 피드백: 유사도 검색만으론 부족)
- 고객센터 챗봇 + OCR 실관람 인증 기획 반영
- 포인트 상점 v3.2 — AI 이용권 4종 단가 통일——————————————————————————
본 후기는 [카카오엔터프라이즈x스나이퍼팩토리] 카카오클라우드로 배우는 AIaaS 마스터 클래스 3기(B-log) 리뷰로 작성 되었습니다.'bootcamp' 카테고리의 다른 글
카카오클라우드 - 클라우드 개발자 교육 21주차 후기 (4/13 ~ 4/17) (1) 2026.04.20 카카오클라우드 - 클라우드 개발자 교육 20주차 후기(4/6 ~ 4/10) (0) 2026.04.20 카카오클라우드 - 클라우드 개발자 교육 18주차 후기 (0) 2026.03.29 카카오클라우드 - 클라우드 개발자 교육 17주차 후기 (0) 2026.03.29 카카오클라우드 - 클라우드 개발자 교육 특강 1일차 후기 (0) 2026.03.17