Skip to content

[URECA-80] Feat: 상품 UI 수정 및 주석 제거#77

Merged
joonhyong merged 5 commits intodevelopfrom
URECA-80/Feat/product-ui
Jan 29, 2026
Merged

[URECA-80] Feat: 상품 UI 수정 및 주석 제거#77
joonhyong merged 5 commits intodevelopfrom
URECA-80/Feat/product-ui

Conversation

@joonhyong
Copy link
Copy Markdown
Contributor

@joonhyong joonhyong commented Jan 29, 2026

Key Changes

  • app/(private)/recommend/page.tsx
  • app/(private)/summary/[summaryId]/recommended-products/page.tsx

작업 내역

  • 추천 페이지의 상품 카드 UI를 수정하였습니다.
  • 요약 상세 페이지 내의 추천 상품의 UI를 수정하였습니다.
  • 불필요한 주석을 제거하였습니다.
  • close: [URECA-80] Feat: 추천 제품 UI 수정 #76

📸 스크린샷

💬 공유사항 to 리뷰어

비고

PR Checklist

PR이 다음 요구 사항을 충족하는지 확인하세요.

  • 커밋 메시지 컨벤션에 맞게 작성했습니다.
  • Eslint 및 Prettier 규칙을 준수했습니다.
  • origin/develop 브랜치에서의 최신 커밋을 확인하고 반영했습니다.
  • 변경 사항에 대한 테스트를 했습니다.(버그 수정/기능에 대한 테스트)

Summary by CodeRabbit

릴리스 노트

  • 스타일

    • 전체 레이아웃 및 간격 최적화(여백·마진 조정)
    • 카드·타이포그래피 정렬 및 색상 조정, 가격·상품 표시 방식 개선
    • 추천 상품 리스트가 그리드에서 가로 스크롤 방식으로 변경
  • 변경/제거

    • 설정 메뉴의 테마 및 언어 선택 섹션 제거
    • 일부 홈/상담 항목 문구 및 태그 업데이트(예: 로밍 관련 항목으로 수정)
  • UI 개선

    • 로그인 로딩 메시지와 온보딩/스플래시 화면 레이아웃 조정

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link
Copy Markdown

vercel bot commented Jan 29, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
unity Ready Ready Preview, Comment Jan 29, 2026 8:40pm
unity-client Ready Ready Preview, Comment Jan 29, 2026 8:40pm

@github-actions github-actions bot changed the title 상품 UI 수정 [URECA-80] Feat: 상품 UI 수정 Jan 29, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Jan 29, 2026

📝 Walkthrough

Walkthrough

설정(마이페이지)에서 테마/언어 설정 UI 블록이 삭제되었습니다. 개인 홈 페이지에서 LG 유플러스 챗봇 섹션이 제거되고 최근 상담 항목의 제목·설명·태그가 변경되었습니다. 추천 제품 관련 컴포넌트들이 레이아웃·타이포그래피를 조정했고, RecommendCard에서 is_monthly를 비구조화하고 가격 표시 로직을 조건부로 변경했으며, RecommendCardList는 그리드에서 수평 스크롤로 전환되었습니다. 그 외 여러 파일에서 패딩/마진/폰트 크기 등 스타일 조정과 주석 제거가 이루어졌습니다.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~35 minutes

🚥 Pre-merge checks | ✅ 2 | ❌ 3
❌ Failed checks (2 warnings, 1 inconclusive)
Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning PR은 기본적으로 상품 UI 수정에 집중되어 있으나, 주석 제거, 마진 조정, 스타일링 변경 등 다양한 추가 변경사항이 포함되어 있으며, 이러한 변경들이 명시된 요구사항과의 관계가 명확하지 않습니다. 다음 범위 외 변경사항을 검토하세요: (1) 주석 제거(15개 파일), (2) mypage/page.tsx 설정 섹션 제거, (3) oauth/callback 스타일링, (4) splash page 마진 변경 등은 상품 UI 수정과 무관해 보입니다.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Linked Issues check ❓ Inconclusive 링크된 이슈 #76은 추천 제품 UI 수정이라는 일반적인 설명만 포함하고 있으며, 구체적인 코딩 요구사항이나 완성 기준이 명시되어 있지 않습니다. 변경사항이 기능적으로 관련되어 있지만 명확한 요구사항 검증이 어렵습니다. 이슈 #76에 구체적인 기능 요구사항, 수락 기준(Acceptance Criteria), 그리고 완료된 Task 1, Task 2 내용을 추가하여 검증 가능한 요구사항을 명시해주세요.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed PR 제목은 주요 변경사항(상품 UI 수정 및 주석 제거)을 정확히 반영하고 있으며, 실제 파일 변경사항들과 일치합니다.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@src/components/counseling-recommend/recommend-cardlist/index.tsx`:
- Line 16: In the recommend-cardlist index.tsx change the prop value that
currently reads best=" border-1 border-primary-500 bg-white" to remove the
leading space and replace the invalid Tailwind class border-1 with border (i.e.
best="border border-primary-500 bg-white"); locate the usage of the best prop in
this file (the string assigned to best) and update it accordingly.

In `@src/components/recommend/product-plans/index.tsx`:
- Around line 5-17: Remove the debug console.log in the ProductPlans component
and delete the commented-out JSX line (the commented div containing
product.desc) to avoid leaking runtime data and cluttering the codebase; search
within the ProductPlans function for "console.log('PLAN PRODUCT'" and the JSX
comment starting with "{/* <div" and remove those lines, keeping the component
return intact and ensuring ESLint/formatters pass after removal.
🧹 Nitpick comments (4)
src/app/(public)/oauth/callback/[provider]/page.tsx (1)

96-96: 로딩 문구에 라이브 영역(aria-live) 추가를 권장합니다.

스크린리더가 상태 변화를 인지할 수 있도록 role="status"/aria-live="polite"를 붙이면 접근성이 좋아집니다.

✅ 제안 수정안
-      <p className="text-lg font-semibold text-gray-500">로그인 처리 중입니다...</p>
+      <p role="status" aria-live="polite" className="text-lg font-semibold text-gray-500">
+        로그인 처리 중입니다...
+      </p>

As per coding guidelines: 브라우저/디바이스 호환성과 접근성(ARIA, 키보드 내비게이션 등) 문제가 없는지 확인

src/app/(private)/mypage/page.tsx (1)

176-180: 주석 처리된 UI 블록은 제거하거나 feature-flag로 관리해주세요.

주석으로 남아 있으면 유지보수/가독성에 불리합니다.

🧹 제안 수정안
-          {/* <SettingsGroup title="설정">
-            {설정Rows.map((row) => (
-              <SettingsRow key={row.label} icon={row.icon} label={row.label} onClick={noop} />
-            ))}
-          </SettingsGroup> */}

As per coding guidelines: 가독성과 안정성(에러/예외 처리)을 최우선으로 검토하고, 로직이 단순하고 직관적으로 읽히는지 확인

src/components/counseling-recommend/recommend-cardlist/index.tsx (2)

13-16: 사용하지 않는 is_monthly props는 제거 권장합니다.
RecommendCard 내부에서 미사용이면 API 표면적만 늘어나고 혼동을 유발합니다. 해당 prop을 타입과 호출부에서 제거해 주세요.
As per coding guidelines, "기존 코드와의 호환성, 재사용성뿐 아니라 확장 가능한 구조인지도 검토".

♻️ 제안 변경
-            <RecommendCard
-              product={product}
-              is_monthly={true}
-              best=" border-1 border-primary-500 bg-white"
-            />
+            <RecommendCard
+              product={product}
+              best=" border-1 border-primary-500 bg-white"
+            />

9-10: 가로 스크롤 영역에 키보드 접근성 부여를 권장합니다.
스크롤 가능한 영역은 tabIndexaria-label을 추가하면 키보드 사용자 접근성이 좋아집니다.
As per coding guidelines, "브라우저/디바이스 호환성과 접근성(ARIA, 키보드 내비게이션 등) 문제가 없는지 확인".

♿ 제안 변경
-      <div className="no-scrollbar flex gap-4 overflow-x-auto overscroll-x-contain scroll-smooth px-1">
+      <div
+        className="no-scrollbar flex gap-4 overflow-x-auto overscroll-x-contain scroll-smooth px-1"
+        role="region"
+        aria-label="추천 상품 목록"
+        tabIndex={0}
+      >

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/components/chat/call-modal/index.tsx`:
- Around line 55-57: 현재 CallModal 컴포넌트의 연결 버튼 onClick 핸들러가 주석만 남아 있어 클릭 시 아무 동작이
없습니다; CallModal 컴포넌트(또는 해당 파일의 버튼 렌더링 부분)의 props에 optional onConnect: () => void
콜백을 추가하고 버튼의 onClick에서 이 onConnect를 호출하도록 하거나(기본적으로 noop으로 설정하지 말고 존재 여부를 체크),
아직 구현되지 않았다면 버튼에 disabled 속성을 주고 툴팁 또는 aria-live로 "연결 준비 중" 같은 피드백 메시지를 표시해
사용자에게 동작이 없음을 알리세요; 대상 식별자: CallModal 컴포넌트와 해당 연결 버튼의 onClick 핸들러.
🧹 Nitpick comments (6)
src/app/(private)/help/page.tsx (2)

42-44: 버튼 접근성 개선 필요: 포커스 상태 스타일 추가 권장

버튼이 aria-label="닫기"를 포함하고 있어 스크린 리더 지원은 잘 되어 있습니다. 다만, 키보드 내비게이션 시 시각적 포커스 표시가 없으면 사용자가 현재 위치를 파악하기 어렵습니다.

또한, 아이콘에 aria-hidden="true"를 추가하여 스크린 리더가 아이콘을 무시하도록 하는 것이 좋습니다.

♻️ 포커스 상태 및 접근성 개선 제안
-        <button type="button" className="w-fit" onClick={() => router.back()} aria-label="닫기">
-          <X className="h-9 w-9" />
+        <button
+          type="button"
+          className="w-fit rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
+          onClick={() => router.back()}
+          aria-label="닫기"
+        >
+          <X className="h-9 w-9" aria-hidden="true" />
         </button>

54-64: 접근성 및 안정성 개선 포인트

  1. 이미지 alt 텍스트 개선: 현재 alt=""로 설정되어 있는데, 이 이미지들은 단순 장식이 아니라 단계별 안내를 보조하는 의미 있는 콘텐츠입니다. 시각 장애 사용자를 위해 설명적인 alt 텍스트를 제공하는 것이 WCAG 가이드라인에 부합합니다.

  2. key 값 개선: step.title("1.", "2." 등)을 key로 사용하는 것보다 고유 식별자나 index를 사용하는 것이 더 안정적입니다. 타이틀이 변경되거나 중복될 경우 예기치 않은 렌더링 문제가 발생할 수 있습니다.

♻️ 개선된 구조 제안
 const HELP_STEPS = [
   {
+    id: 1,
     title: '1.',
-    description: '상담 아이콘을 눌러 전화 상담을 시작하세요.',
+    description: '상담 아이콘을 눌러 전화 상담을 시작하세요.',
+    imageAlt: '상담 아이콘 위치를 보여주는 화면',
     image: Help1,
   },
   // ... 나머지 항목들도 동일하게 id와 imageAlt 추가
 ];
-          {HELP_STEPS.map((step) => (
-            <div key={step.title} className="flex items-center gap-4">
+          {HELP_STEPS.map((step) => (
+            <div key={step.id} className="flex items-center gap-4">
               <div className="relative h-[90px] w-[140px] flex-shrink-0 overflow-hidden rounded-2xl bg-white shadow-sm">
-                <Image src={step.image} alt="" fill className="object-cover" />
+                <Image src={step.image} alt={step.imageAlt} fill className="object-cover" />
               </div>
src/components/chat/call-modal/index.tsx (3)

27-32: 리스트 렌더링 시 idx(인덱스)를 key로 사용하는 것은 피해주세요.

배열 항목이 추가/삭제/재정렬될 경우 React가 DOM을 비효율적으로 업데이트하거나 예기치 않은 렌더링 버그가 발생할 수 있습니다. 또한 변수명 i는 의미가 불명확합니다.

개선 방안:

  • ChatProps에 고유 식별자(id)가 있다면 해당 값을 key로 사용하세요.
  • 변수명을 chatItem 등 의미 있는 이름으로 변경하세요.
♻️ 가독성 및 안정성 개선 예시
-          {content.map((i, idx) => (
-            <li key={idx}>
+          {content.map((chatItem) => (
+            <li key={chatItem.id ?? chatItem.text}>
               <span className="text-primary-500">&nbsp;&nbsp;• </span>
-              {i.text}
+              {chatItem.text}
             </li>
           ))}

10-62: 모달 컴포넌트에 접근성(A11y) 속성이 누락되었습니다.

현재 구현에는 다음과 같은 접근성 문제가 있습니다:

  1. role="dialog"aria-modal="true" 속성 부재
  2. aria-labelledby로 모달 제목 연결 누락
  3. 키보드(Escape)로 모달 닫기 기능 없음
  4. 포커스 트래핑 미구현 (모달 외부로 포커스 이동 방지)

스크린 리더 사용자나 키보드 사용자가 이 모달을 제대로 이용하기 어렵습니다.

♿ 접근성 개선 예시
+  // Escape 키로 모달 닫기
+  React.useEffect(() => {
+    const handleKeyDown = (e: KeyboardEvent) => {
+      if (e.key === 'Escape') dispatch(closeModal());
+    };
+    window.addEventListener('keydown', handleKeyDown);
+    return () => window.removeEventListener('keydown', handleKeyDown);
+  }, [dispatch]);
+
   return (
-    <div className="flex flex-col items-center justify-center">
+    <div
+      role="dialog"
+      aria-modal="true"
+      aria-labelledby="call-modal-title"
+      className="flex flex-col items-center justify-center"
+    >
       <div className="bg-primary-500 flex h-14.5 w-14.5 items-center justify-center rounded-[20px]">
         <Phone />
       </div>
-      <p className="mt-4 text-[20px] leading-5 font-bold">상담사 연결</p>
+      <p id="call-modal-title" className="mt-4 text-[20px] leading-5 font-bold">상담사 연결</p>

As per coding guidelines: 브라우저/디바이스 호환성과 접근성(ARIA, 키보드 내비게이션 등) 문제가 없는지 확인해야 합니다.


24-34: content 배열에 대한 예외 처리가 없습니다.

content가 빈 배열일 경우 "전달될 상담 내용" 섹션이 빈 상태로 렌더링됩니다. 사용자에게 명확한 안내가 필요합니다.

🛡️ 빈 상태 처리 예시
       <div className="bg-gray-light mt-4 w-72 rounded-[20px] px-7 py-3.5">
         <p className="text-gray-dark text-[13px] font-semibold">전달될 상담 내용</p>
-        <ul className="text-[13px] font-semibold text-black">
-          {content.map((i, idx) => (
-            <li key={idx}>
-              <span className="text-primary-500">&nbsp;&nbsp;• </span>
-              {i.text}
-            </li>
-          ))}
-        </ul>
+        {content.length > 0 ? (
+          <ul className="text-[13px] font-semibold text-black">
+            {content.map((chatItem) => (
+              <li key={chatItem.id ?? chatItem.text}>
+                <span className="text-primary-500">&nbsp;&nbsp;• </span>
+                {chatItem.text}
+              </li>
+            ))}
+          </ul>
+        ) : (
+          <p className="text-[13px] text-gray-500">전달할 상담 내용이 없습니다.</p>
+        )}
       </div>
src/components/counseling-recommend/recommend-cardlist/index.tsx (1)

10-18: 가로 스크롤 목록의 키보드/스크린리더 접근성 보강

현재 컨테이너는 스크롤 가능하지만 포커스/역할 정보가 없어 키보드 탐색 및 스크린리더 인지가 약합니다. role, aria-label, tabIndexlistitem을 추가해 접근성을 보완하는 것을 권장합니다.

♿ 개선 예시
-      <div className="no-scrollbar flex gap-4 overflow-x-auto overscroll-x-contain scroll-smooth px-1">
+      <div
+        className="no-scrollbar flex gap-4 overflow-x-auto overscroll-x-contain scroll-smooth px-1"
+        role="list"
+        aria-label="추천 상품 목록"
+        tabIndex={0}
+      >
         {products.map((product) => (
-          <div key={product.productId} className="shrink-0">
+          <div key={product.productId} className="shrink-0" role="listitem">
             <RecommendCard
               product={product}
               best=" border border-primary-500 bg-white"
             />
           </div>
         ))}
       </div>

As per coding guidelines: 6. 브라우저/디바이스 호환성과 접근성(ARIA, 키보드 내비게이션 등) 문제가 없는지 확인

@joonhyong joonhyong changed the title [URECA-80] Feat: 상품 UI 수정 [URECA-80] Feat: 상품 UI 수정 및 주석 제거 Jan 29, 2026
@joonhyong joonhyong merged commit dfd7fab into develop Jan 29, 2026
7 checks passed
@joonhyong joonhyong deleted the URECA-80/Feat/product-ui branch January 29, 2026 23:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[URECA-80] Feat: 추천 제품 UI 수정

1 participant