LC-3021 멘토 마이페이지 v2.1#2430
Hidden character warning
Conversation
- '현황' → '내역' 라벨 통일 (탭 3종·제목·설명) - 피드백 아이콘 3종(서면/라이브/일정오픈) SSOT 컴포넌트로 통일 + color prop (표·태그필터·캘린더 인라인 SVG 제거, 선택 시 currentColor 유지) - 피드백 내역 상단 스탯 카드 4개 제거(FeedbackSummary) - 상태 배지: 테두리 제거 + 라운드 네모(rounded-[4px]), 미진행·취소 색 통일(연빨강) - 서면 상태값 색을 라이브에 정렬(라벨은 서면 어휘 '진행 전/진행 중/완료' 유지) - 서면 피드백 진행기간 미션 종료일 +1일 00:00:00 ~ +3일 23:59:59 로 수정 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- feedbackScheduleRules.PROGRESS_OFFSET_DAYS 를 라이브 기준 +2~+4 로 원복. 서면 +1~+3 요구는 서면 전용 경로(writtenFeedback.ts/buildMissionRangeMap)에만 적용해야 하는데, 라이브 공용 규칙까지 바꾸고 존재하지 않는 BE 파일(LiveFeedbackMissionVo.java) 산식을 조작한 것을 정정. - BE 근거 주석을 실제 소스(MentorFeedback*NotificationTasklet: endDate.plusDays(4))로 교체. - writtenFeedbackStatus 배지 토큰 주석 border 제거 반영(bg+text). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
LC-3021 피드백내역 UI정리
There was a problem hiding this comment.
Code Review
이번 풀이퀘스트는 피드백 관리 페이지의 UI 일관성을 높이기 위해 상태 배지 스타일(둥근 모서리 조정 및 테두리 제거)을 수정하고, 중복되던 FeedbackSummary 컴포넌트를 제거하며, 서면 피드백의 마감 일정을 기존 미션 종료일 기준 +2~+4일에서 +1~+3일로 조정하였습니다. 또한, 인라인 SVG들을 공통 피드백 아이콘 컴포넌트로 대체하고 색상 커스텀이 가능하도록 개선했습니다. 리뷰 의견으로는 새롭게 적용된 SVG 아이콘 컴포넌트들에 viewBox 속성이 누락되어 크기 조절 시 이미지가 깨질 수 있는 문제와, addDays 함수에서 로컬 타임존 기준으로 날짜를 연산하여 환경에 따라 하루가 어긋날 수 있는 버그가 지적되었습니다.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
| color = '#F64E39', | ||
| }: IconProps) => ( | ||
| <svg | ||
| width={size} | ||
| height={size} |
There was a problem hiding this comment.
⚠️ SVG viewBox 누락으로 인한 스케일링 이슈
LiveFeedbackIcon 컴포넌트가 size 프로프를 통해 크기를 조절할 수 있도록 구현되어 있으나, <svg> 태그에 viewBox 속성이 누락되어 있습니다.
viewBox가 없으면 size를 기본값인 20보다 작게 설정할 경우(예: FeedbackTableRow에서 size={14}로 호출할 때), SVG 내부 요소들이 축소되지 않고 영역 바깥으로 잘리거나(clipping) 깨지는 현상이 발생합니다.
아이콘이 지정된 크기에 맞게 올바르게 스케일링되도록 viewBox="0 0 20 20" 속성을 추가해 주세요.
| color = '#F64E39', | |
| }: IconProps) => ( | |
| <svg | |
| width={size} | |
| height={size} | |
| color = '#F64E39', | |
| }: IconProps) => ( | |
| <svg | |
| width={size} | |
| height={size} | |
| viewBox="0 0 20 20" |
| color = '#5177FF', | ||
| }: IconProps) => ( | ||
| <svg | ||
| width={size} | ||
| height={size} |
There was a problem hiding this comment.
⚠️ SVG viewBox 누락으로 인한 스케일링 이슈
LiveFeedbackOpenIcon 컴포넌트도 <svg> 태그에 viewBox 속성이 누락되어 있어, size 변경 시 아이콘이 올바르게 스케일링되지 않고 잘리는 문제가 발생할 수 있습니다.
디자인 가이드라인에 맞게 아이콘이 유연하게 축소/확대될 수 있도록 viewBox="0 0 20 20" 속성을 추가해 주세요.
| color = '#5177FF', | |
| }: IconProps) => ( | |
| <svg | |
| width={size} | |
| height={size} | |
| color = '#5177FF', | |
| }: IconProps) => ( | |
| <svg | |
| width={size} | |
| height={size} | |
| viewBox="0 0 20 20" |
| color = '#7A7D84', | ||
| }: IconProps) => ( | ||
| <svg | ||
| width={size} | ||
| height={size} |
There was a problem hiding this comment.
⚠️ SVG viewBox 누락으로 인한 스케일링 이슈
WrittenFeedbackIcon 컴포넌트 역시 <svg> 태그에 viewBox 속성이 누락되어 있습니다. FeedbackTableRow 등에서 size={14}와 같이 작은 크기로 렌더링할 때 아이콘이 잘리지 않고 올바르게 축소되도록 viewBox="0 0 20 20" 속성을 추가해 주세요.
| color = '#7A7D84', | |
| }: IconProps) => ( | |
| <svg | |
| width={size} | |
| height={size} | |
| color = '#7A7D84', | |
| }: IconProps) => ( | |
| <svg | |
| width={size} | |
| height={size} | |
| viewBox="0 0 20 20" |
| for (const m of apiMissions) { | ||
| if (!m.endDate) continue; | ||
| map.set(m.id, { start: addDays(m.endDate, 2), end: addDays(m.endDate, 4) }); | ||
| map.set(m.id, { start: addDays(m.endDate, 1), end: addDays(m.endDate, 3) }); |
There was a problem hiding this comment.
🐛 타임존에 따른 날짜 연산 버그 가능성
buildMissionRangeMap 내부의 addDays 함수(240~244라인)에서 new Date(iso)를 통해 날짜 전용 문자열(예: "2026-04-25")을 파싱하면 UTC 기준(2026-04-25T00:00:00.000Z)으로 파싱됩니다.
하지만 d.getDate()와 d.setDate()는 실행 환경(브라우저)의 로컬 타임존을 기준으로 동작하기 때문에, 사용자의 로컬 타임존(예: GMT+13 등)에 따라 날짜 연산 결과가 하루 어긋나는 버그가 발생할 수 있습니다.
타임존에 무관하게 항상 일관된 날짜 연산을 수행하려면, UTC 기준 메서드인 getUTCDate()와 setUTCDate()를 사용하도록 addDays 함수를 수정하는 것을 권장합니다.
const addDays = (iso: string, days: number) => {
const d = new Date(iso);
d.setUTCDate(d.getUTCDate() + days);
return d.toISOString().slice(0, 10);
};| start: addDays(m.endDate, 1), | ||
| end: addDays(m.endDate, 3), |
There was a problem hiding this comment.
🐛 타임존에 따른 날짜 연산 버그 가능성
ChallengeFeedbackCard 내부의 addDays 함수(197~201라인)에서도 동일하게 new Date(iso) 파싱 후 로컬 타임존 기준 메서드인 getDate()/setDate()를 사용하여 날짜를 연산하고 있습니다.
이로 인해 실행 환경의 타임존에 따라 하루가 어긋나는 버그가 발생할 수 있으므로, UTC 기준 메서드인 getUTCDate()와 setUTCDate()를 사용하도록 수정해 주세요.
const addDays = (iso: string, days: number) => {
const d = new Date(iso);
d.setUTCDate(d.getUTCDate() + days);
return d.toISOString().slice(0, 10);
};
연관 작업