ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 카카오클라우드 - 클라우드 개발자 교육 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) 리뷰로 작성 되었습니다.

Designed by Tistory.