Skip to content

✨ [Feat] 이색 트랙 조합 식별 정보 추천 응답 노출 - #56

Merged
jwon0523 merged 2 commits into
developfrom
feat/51
Jun 3, 2026
Merged

✨ [Feat] 이색 트랙 조합 식별 정보 추천 응답 노출#56
jwon0523 merged 2 commits into
developfrom
feat/51

Conversation

@jwon0523

@jwon0523 jwon0523 commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

✨ PR 유형

✨ Feat (🐛 Fix 포함)

🛠️ 작업 내용

AI 중계 서버가 산출하는 "학과 경계를 넘는 이색 트랙 조합"(cross_college 슬롯) 식별 정보를 추천 응답·이력에 보존·노출합니다.

  • 추천 트랙에 crossCombination 플래그 신설 — RecommendedTrack.is_cross_combination 컬럼 영속 + TrackView.crossCombination 응답 필드
  • 보조 추천 트랙은 AI slot_type == "cross_college" 일 때만 true, primary·mmr 은 false 로 매핑
  • forceRefresh=false 재조립 경로가 영속 엔티티에서 읽으므로 응답 노출과 이력 보존이 한 번에 충족됨
  • 테스트: cross_college→true / mmr→false / primary→false / slot_type null→false / assembler 매핑 양방향 + AI 응답 slot_type 역직렬화 계약 가드

🐛 (Fix) 트랙 코드 가운뎃점 유니코드 불일치로 누락되던 트랙 매핑 복구

  • AI 카탈로그는 가운뎃점에 U+00B7(MIDDLE DOT)을, 본 카탈로그는 U+318D(HANGUL LETTER ARAEA)를 써 글자 모양은 같아도 findByCode 동등 비교가 실패합니다. 가운뎃점 포함 트랙(보조 추천의 단골)이 매핑에서 통째로 탈락해, 위 이색 조합 노출 기능이 화면에서 빈 배열로 보이던 문제.
  • TrackCodeNormalizer 로 AI 식별자의 가운뎃점 변형을 카탈로그 정답 형태(U+318D)로 접는 anti-corruption 정규화를 추가. 트랙 조회는 원본 우선 → 실패 시 정규화 재조회 순서라, 이미 매칭되던 트랙은 동작 불변이고 누락되던 트랙만 구제됩니다.
  • 테스트: 정규화기 단위 테스트(가운뎃점 변형 fold / 변형 없음 동일 인스턴스 / null) + U+00B7 보조 조합이 정규화 후 매핑되어 누락되지 않는 회귀 가드.

📋 추후 진행 상황

  • 추천 이력 조회 API(✨ Feat: 추천 이력 조회 API #53)가 본 컬럼을 읽어 이력에서도 이색 조합 구분 노출
  • 앱: 보조 추천 중 crossCombination=true 카드에 이색 조합 배지 표시
  • 보조 트랙은 이제 응답에 노출되나, crossCombination=true 배지가 실제로 붙으려면 트랙별 역량·기술스택 데이터가 채워져 시너지 점수 > 0 이 되어야 함 (현재 AI 가 보내는 시너지가 0 이라 cross_college 슬롯 미예약). AI 중계 서버 쪽 데이터 공급 과제로 본 PR 과 독립.
  • 카탈로그 조회 실패 시 조용한 continue 탈락 지점에 로그 추가 검토 (빈 결과 추적성)

📌 리뷰 포인트

  • service/RecommendationService.javaslot_type == cross_college → 플래그 매핑. 공유 seen 중복 제거 + 슬롯 순서 가정(주석 명시)에 의존
  • entity/RecommendedTrack.javais_cross_combination 컬럼 nullable=false (ddl-auto update). 기존 is_primary 와 동일 패턴이라 기존 행은 false 로 백필 — populated dev DB 첫 기동 시 확인 권장
  • dto/RecommendationResponse.javaTrackView 응답 계약 변경 (앱 연동 영향)
  • service/RecommendationService.java#findCatalogTrack — "원본 우선 → 정규화 fallback" 순서로 부작용 반경을 "지금까지 누락되던 트랙"으로만 한정하는 설계
  • service/TrackCodeNormalizer.java — 가운뎃점 변형(U+00B7·U+0387·U+2027·U+30FB·U+FF65)을 문자 리터럴이 아닌 정수 코드포인트로 비교 (시각적으로 구분 안 되는 문자라 중복 case·렌더링 혼동 회피)

🔗 관련 이슈

Closes #51

📸 스크린샷

(해당 없음 — 백엔드 변경)

✅ 체크리스트

  • ./gradlew spotlessApply 로 포매팅 적용
  • ./gradlew spotlessCheck 통과
  • ./gradlew checkstyleMain checkstyleTest 통과
  • ./gradlew build 성공
  • ./gradlew test 모든 테스트 통과
  • 관련 문서 업데이트 / 커밋 메시지 컨벤션 확인

@jwon0523 jwon0523 self-assigned this Jun 3, 2026
@jwon0523 jwon0523 added the enhancement New feature or request label Jun 3, 2026
AI 중계 서버는 트랙 code 가운뎃점에 U+00B7(MIDDLE DOT)을, 본 카탈로그는 U+318D(HANGUL LETTER ARAEA)를 써 글자 모양이 같아도 코드 동등 비교가 실패해 가운뎃점 포함 트랙이 매핑에서 조용히 누락됐다. AI 식별자를 카탈로그 정규형으로 접는 anti-corruption 정규화로 매핑을 복구한다.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jwon0523
jwon0523 merged commit 1ddf7cc into develop Jun 3, 2026
2 checks passed
@jwon0523
jwon0523 deleted the feat/51 branch June 3, 2026 12:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

✨ Feat: 이색 트랙 조합 식별 정보 추천 응답 노출

1 participant