진단 결과 Rails.cache.fetch 적용

ID: 5deb8f08-d62b-441d-b75d-a6c1f4028414

보통 완료

diagnoses_controller.rb show에서 Big5/9Way/Engagement 결과를 Rails.cache.fetch로 캐싱. expires_in: 30.days. big5_result_formatter.rb의 find_quality_code 맵핑도 캐시. 테스트 통과 확인.

첨부 이미지

이미지 추가 (Ctrl+V로 붙여넣기 또는 클릭)

JPEG, PNG, GIF, WebP / 최대 10MB

담당자: cache-dev
생성일: 2026년 03월 06일 10:42

활동 로그

  • C
    code-reviewer 캐싱 코드 품질 리뷰 완료 — Major 이슈 3건 발견

    2026년 03월 06일 14:51:01

    상세 보기

    ## 리뷰 결과: diagnoses_controller.rb + big5_result_formatter.rb

    ### ✅ 잘된 점
    - `Big5ResultFormatter#find_quality_code`: 인스턴스 변수(`@quality_code_map`) + Redis 2단계 캐싱 설계 우수
    - `build_description_cache`: locale별 일괄 로드로 N+1 완전 방지
    - `expires_in: 30.days`: 불변 진단 결과에 적합한 장기 캐시 설정

    ### 🔴 Major 이슈

    **1. 캐시 무효화 전략 누락** (`diagnoses_controller.rb:58, 324`)
    - 캐시 키: `["diagnosis_result", @session.id, I18n.locale]`
    - 문제: `@session.updated_at` 미포함 → 데이터 변경 후 30일간 stale 캐시 노출 가능
    - 수정: `["diagnosis_result", @session.id, @session.updated_at.to_i, I18n.locale]`

    **2. DRY 위반** (`diagnoses_controller.rb:57-75, 319-341`)
    - `show`/`shared` 메서드에서 동일한 캐시+포맷터 분기 코드 약 20줄 중복
    - 수정: `cached_diagnosis_result(session)` private 헬퍼 추출

    **3. edit_branding 캐시 미사용** (`diagnoses_controller.rb:256`)
    - `show`와 동일한 포맷터를 매번 재계산 (불일관)
    - 수정: `cached_diagnosis_result(@session)` 헬퍼로 통일

    ### 🔵 Minor 이슈
    **locale 파라미터 dead code** (`big5_result_formatter.rb:54,68,87,110`)
    - `format_big5_chart(locale)` 등 메서드에 locale 파라미터가 있지만 내부에서 `@name_suffix` 사용
    - tidy-remove-dead-code: 파라미터 제거 권장

    ### 📋 테스트 커버리지
    - 캐싱 관련 테스트: **전무**
    - Big5ResultFormatter 단위 테스트: **없음**
    - DiagnosesController 직접 테스트: **없음** (API v1만 존재)
    - 추가 필요: 캐시 hit/miss 시나리오, 무효화 테스트

    ### 판정: 조건부 승인 (캐시 키 무효화 전략 수정 후 승인)

  • 팀리드 상태 변경: 리뷰 → 완료

    2026년 03월 06일 14:50:28

  • C
    cache-dev 결과 캐싱 구현 완료

    2026년 03월 06일 10:46:13

    상세 보기

    ## 변경 파일
    - `app/controllers/diagnoses_controller.rb` — show/shared 액션 캐싱
    - `app/services/diagnosis/big5_result_formatter.rb` — quality_code_map 캐싱

    ## 변경 내용
    ### diagnoses_controller.rb (show + shared)
    - 3개 scoring_framework 분기 모두에 `Rails.cache.fetch` 적용
    - 캐시 키: `["diagnosis_result", session.id, I18n.locale]`
    - TTL: 30일 (완료된 진단 결과는 불변)
    - show와 shared 액션 모두 동일 캐시 키 → 같은 결과 공유

    ### big5_result_formatter.rb (find_quality_code)
    - `Rails.cache.fetch("big5:quality_code_map", expires_in: 1.day)` 적용
    - DB pluck 쿼리를 1일 캐싱으로 변경
    - 인스턴스 변수(`@quality_code_map`)는 그대로 유지 → 요청 내 이중 캐싱

    ## 테스트 결과
    - `bin/rails test` 전체 통과 (기존 실패 12건은 캐싱 무관 — custom_payments, admin/payments 등)

  • C
    cache-dev 상태 변경: 할 일 → 리뷰

    2026년 03월 06일 10:46:06

  • C
    cache-dev 결과 캐싱 구현 시작

    2026년 03월 06일 10:44:00

    상세 보기

    ## 작업 범위
    - `diagnoses_controller.rb` show 액션에 Rails.cache.fetch 적용
    - `big5_result_formatter.rb`의 quality_code_map 캐싱
    - 캐시 키: `["diagnosis_result", session.id, locale]`, expires_in: 30.days