문제 상세 페이지 문제 본문(description) 노출 제거 — 출처 링크 유도
요약문제 상세 페이지(`/problems/[id]`)에서 문제 본문 텍스트(`description`) 렌더 블록을 제거하고, 프로그래머스/BOJ 출처 링크로 문제 접근을 유도. 화면 렌더 로직만 삭제(DB 데이터·AI 분석 프롬프트는 무영향)라 신규/기존 모든 문제에 즉시 공통 적용. 출처 링크·난이도·태그·마감 메타는 유지. PR #475 `b5b83e2`, `page.tsx` +1/−8. 소규모 프론트 표시 제거로 Critic 게이트 해당 없음.
날짜
영향도보통
날짜: 2026-07-20
목표
문제 상세 페이지(frontend/src/app/[locale]/problems/[id]/page.tsx)에서 문제 본문(description) 텍스트를 화면에 직접 렌더하지 않는다. 사용자는 프로그래머스/BOJ 출처 링크를 통해 원문 문제로 접근하도록 유도한다.
배경: 문제 본문을 자체 페이지에 그대로 노출하는 것은 출처(프로그래머스/BOJ) 저작권 측면에서 바람직하지 않다. 문제 접근은 출처 링크로 위임하고, 플랫폼은 난이도·태그·마감 등 메타 정보와 스터디 흐름에 집중한다.
결정 사항
D1. 문제 본문 렌더 블록만 제거 (표시 로직 삭제, 데이터 보존)
page.tsx의 문제 본문 렌더 블록을 삭제:
diff
- {/* 설명 */}
- {problem.description && (
- <p className="text-[13px] leading-relaxed whitespace-pre-wrap" style={{ color: 'var(--text-2)' }}>
- {problem.description}
- </p>
- )}
-
- {/* 출처 링크 */}
+ {/* 출처 링크 (문제 본문은 노출하지 않음 — Sprint 252: 프로그래머스/BOJ 링크로 접근) */}
{problem.sourceUrl && ( ... )}
- 화면 렌더 로직만 제거 —
description필드 값(DB·API 응답)은 그대로 존재. 데이터 삭제·마이그레이션 없음. - 문제 생성 시점과 무관하게 신규·기존 모든 문제 상세 페이지에 즉시 공통 적용(렌더 분기 제거이므로).
- 원복 비용 최소: 렌더 블록 복구만으로 원상 회복(마이그레이션 불필요).
D2. 유지 항목 명시
본문 대신 다음 요소는 그대로 유지:
- 출처 링크(
problem.sourceUrl— 프로그래머스/BOJ) - 난이도·태그·마감 등 문제 메타
- AI 분석 흐름 —
ai-analysisworker.py_get_problem은 DB에서 직접description을 읽으므로 프롬프트 컨텍스트 주입에 무영향(Sprint 248/249 문제 컨텍스트 풍부화 경로 보존).
완료 항목
| 커밋 | PR | 내용 |
|---|---|---|
b5b83e2 | #475 | 문제 상세 페이지 본문 렌더 블록 제거 (page.tsx +1/−8) |
Critic 결과: 해당 없음 — 단일 파일 소규모 프론트 표시 제거(렌더 블록 삭제, 로직·데이터·API 무변경)로 별도 교차 리뷰 게이트 미실행.