Skip to content

Embedding 리팩토링 : 중복 코드 제거 및 메서드 분리#1

Open
SXXNHU wants to merge 3 commits intomainfrom
codex/refactor-user-embedding-and-recommendation-code
Open

Embedding 리팩토링 : 중복 코드 제거 및 메서드 분리#1
SXXNHU wants to merge 3 commits intomainfrom
codex/refactor-user-embedding-and-recommendation-code

Conversation

@SXXNHU
Copy link
Owner

@SXXNHU SXXNHU commented Nov 28, 2025

임베딩 리팩토링 설명 및 향후 작업 제안

변경 의도와 배경

  • 전역 예외 처리 흐름을 고려한 단일 변환기 도입: 사용자/유기동물 임베딩 JSON 직렬화·역직렬화가 여러 서비스에 중복되어 있었고, 변환 실패 시 Optional.empty() 반환 이후 상위 계층에서 공통적으로 대체 로직을 타도록 설계되어 있어,
    전역 예외 처리 정책을 준수하도록 변환 로직을 한 곳(EmbeddingJsonConverter)으로 모았습니다.
    이는 변환 예외가 전역 예외 핸들러까지 전파되어 과도한 에러 응답을 만드는 문제를 방지하려는 목적입니다.
  • ObjectMapper 직접 사용 제거 이유: 개별 서비스마다 ObjectMapper를 직접 주입해 readValue/writeValueAsString을 호출하면서 try/catch, 로그 메시지, 컨텍스트 문자열 구성이 반복되고 있었습니다. EmbeddingJsonConverter는 같은 역할을 공통화해 중복을 제거하고, 동일한 로깅 포맷/컨텍스트를 유지하도록 합니다. 또한 향후 임베딩 포맷 변경 시 단일 지점만 수정하면 됩니다.
  • log.warn 사용 최소화 이유: 기존에는 서비스마다 변환 실패 시 log.warn을 남기거나 예외를 던졌는데, 추천이나 사용자 임베딩 계산 흐름에서는 일부 벡터가 손상되어도 나머지 데이터로 결과를 만들 수 있도록 설계되었습니다. 따라서 변환 실패를 "예측 가능한 품질 저하"로 간주하고, 변환기 내부에서 컨텍스트를 포함해 한 번만 기록하며, 상위 계층에서는 불필요한 중복 경고 로그를 남기지 않도록 조정했습니다.
     

변경 요약

  • EmbeddingJsonConverter 추가: 임베딩 JSON 직렬화/역직렬화를 담당하며, 입력 공백/파싱 실패 시 컨텍스트 기반 경고를 남기고 Optional.empty()를 반환하도록 구현했습니다.
  • RecommendationService 개선: 사용자·동물 임베딩을 모두 변환기를 통해 읽어와 벡터 길이 검증 후 코사인 유사도를 계산하도록 단순화했습니다.
  • UserInterestService 개선: 관심/좋아요 가중치 맵을 만든 뒤 동물 임베딩을 변환기를 거쳐 누적·정규화하고, 직렬화 역시 변환기를 사용해 중복 코드를 제거했습니다.
     

향후 리팩토링 제안

  1. 추천 계산의 스트리밍/배치 최적화: 대규모 동물 임베딩을 한 번에 메모리에 로드하지 않도록 paging 또는 벡터 DB 연동 검토.
  2. 임베딩 차원/스케일 검증 유틸 추가: 벡터 길이 불일치나 NaN 검출을 공통 유틸로 추출해, 저장 전/후 자동 검증하도록 개선.
  3. 비동기 임베딩 생성 파이프라인 모니터링: 큐/스케줄러 실패 시 알림 및 재시도 정책을 설정하고, 상태 테이블/헬스 체크 엔드포인트 추가.
  4. 추천 결과 캐싱: 사용자 임베딩 변경 시 무효화되는 캐시 레이어(e.g., Redis)를 두어 반복 호출 비용을 절감.
  5. 통합 로깅 포맷 정비: 변환기 로그와 서비스 로그를 동일한 traceId/컨텍스트로 묶을 수 있도록 MDC 활용 규칙 수립.
     

테스트 실패 원인

  • ./gradlew test 실행 시 Maven Central 의존성 다운로드 단계에서 HTTP 403 오류가 발생하여 테스트가 수행되지 않았습니다. 외부 네트워크 제약으로 인한 환경적 실패로, 소스 변경과 직접적인 연관은 없습니다.

@SXXNHU SXXNHU changed the title Refactor embedding conversion utilities Embedding 리팩토링 : EmbeddingJsonConverter 추가 Nov 28, 2025
@SXXNHU SXXNHU changed the title Embedding 리팩토링 : EmbeddingJsonConverter 추가 Embedding 리팩토링 : 중복 코드 제거 및 메서드 분리 Nov 28, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant