Skip to content

[FEAT] 프로필 조회 화면에 profileImageUrl 표시#205

Merged
kimminna merged 2 commits into
developfrom
feat/web/204-show-profile-image-url
Jul 14, 2026
Merged

[FEAT] 프로필 조회 화면에 profileImageUrl 표시#205
kimminna merged 2 commits into
developfrom
feat/web/204-show-profile-image-url

Conversation

@kimminna

Copy link
Copy Markdown
Member

ISSUE 🔗

close #204



What is this PR? 🔍

프로필 조회 API 응답에 존재하던 profileImageUrl 필드가 설정 페이지 프로필 화면에 반영되지 않고 있던 문제를 수정했습니다.

배경

  • 기존 구조: UserProfileResponseprofileImageUrl 필드가 이미 내려오고 있었지만, 설정 화면(SettingsProfileView)에서는 항상 회색 placeholder(div)만 렌더링했습니다.
  • 발생 문제: 사용자의 실제 Google 프로필 사진이 조회 API에 포함되어 있음에도 화면에는 표시되지 않았습니다.
  • 해결 방향: useSettingsProfile 훅부터 SettingsProfileContainerSettingsProfileView까지 profileImageUrl을 prop으로 전달하고, 값이 있을 때만 next/image로 실제 이미지를 렌더링하도록 했습니다.

프로필 이미지 표시

  • 변경 요약: useSettingsProfileprofileStateprofileImageUrl을 추가하고, SettingsProfileView에서 값이 있으면 실제 이미지를, 없으면 기존 placeholder를 렌더링하도록 했습니다.
  • 이유: API 응답에 이미 존재하는 데이터를 화면에 반영하지 않고 있었기 때문입니다.
  • 구현 방식: UserProfileResponse.profileImageUrl은 zod 스키마상 nullish()(string | null | undefined)이므로, 훅 레벨에서 profile.profileImageUrl ?? undefined로 정규화해 View의 string | undefined prop 타입과 맞췄습니다. SettingsProfileViewprofileImageUrl 존재 여부로 분기해 <Image src={profileImageUrl} .../> 또는 기존 회색 원형 placeholder를 렌더링합니다.
  • 경계 · 제약: 이미지 URL이 없는 사용자(신규 가입 등)를 위해 기존 placeholder 분기를 그대로 유지했습니다.

next.config.js — 외부 이미지 도메인 허용

  • 변경 요약: images.remotePatternslh3.googleusercontent.com을 추가했습니다.
  • 이유: 이 프로젝트는 Google OAuth 로그인만 지원하며(OauthCallbackContainer 참고), profileImageUrl은 Google이 제공하는 프로필 사진 URL입니다. Next.js next/imagenext.config.js에 등록되지 않은 외부 호스트의 이미지를 런타임에서 차단하므로, 이 설정이 없으면 프로필 이미지 렌더링 시 에러가 발생합니다.



To Reviewers

Google이 아닌 다른 이미지 호스트를 통해 profileImageUrl이 내려오는 케이스가 있는지 백엔드 스펙 기준으로 확인 부탁드립니다. 현재는 lh3.googleusercontent.com 단일 도메인만 허용 목록에 추가했습니다.



Screenshot 📷



Test Checklist ✔

  • pnpm check-types 통과
  • pnpm lint 통과
  • 실제 브라우저에서 Google 프로필 이미지 렌더링 확인 — 미실행: 로컬에서 로그인 세션 확보 필요

- 프로필 조회 API 응답의 profileImageUrl을 설정 화면에 표시했습니다
- 값이 없을 경우 기존 placeholder를 유지했습니다
- next/image가 Google 프로필 이미지 도메인을 허용하도록 설정을 추가했습니다
@vercel

vercel Bot commented Jul 14, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
timo Ready Ready Preview, Comment Jul 14, 2026 5:33pm

Request Review

@github-actions github-actions Bot added the ⏰ Timo-web Timo 웹 서비스 label Jul 14, 2026
@github-actions
github-actions Bot requested review from ehye1 and jjangminii July 14, 2026 17:15
@github-actions github-actions Bot added ✨ Feature 새로운 기능(기능성) 구현 ♦️ 민아 민아상 labels Jul 14, 2026
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@kimminna, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 43 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6c26f34f-478b-4347-aee3-bd5c492051f2

📥 Commits

Reviewing files that changed from the base of the PR and between 0b523cc and d445011.

📒 Files selected for processing (1)
  • apps/timo-web/app/[locale]/(main)/settings/_components/account/SettingsProfileView.tsx

Walkthrough

프로필 조회 상태의 profileImageUrl을 설정 화면까지 전달하고, URL이 있으면 원형 프로필 이미지로 표시하며 없으면 기존 placeholder를 유지합니다. Google 프로필 이미지 호스트를 Next.js 원격 이미지 허용 목록에 추가했습니다.

Changes

프로필 이미지 표시

Layer / File(s) Summary
프로필 이미지 데이터 및 렌더링
apps/timo-web/app/[locale]/(main)/settings/_hooks/account/use-settings-profile.ts, apps/timo-web/app/[locale]/(main)/settings/_containers/account/SettingsProfileContainer.tsx, apps/timo-web/app/[locale]/(main)/settings/_components/account/SettingsProfileView.tsx
profileImageUrl을 훅에서 뷰로 전달하고, 값이 있으면 next/image를 표시하며 없으면 기존 원형 placeholder를 표시합니다.
원격 이미지 도메인 설정
apps/timo-web/next.config.js
lh3.googleusercontent.com의 HTTPS 이미지를 허용하도록 images.remotePatterns를 추가했습니다.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: yumin-kim2

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed 제목이 프로필 조회 화면에 profileImageUrl을 표시하는 핵심 변경을 정확히 요약합니다.
Description check ✅ Passed 설명이 설정 페이지에 프로필 이미지를 연결하는 변경 내용과 일치합니다.
Linked Issues check ✅ Passed #204의 TODO인 훅 전달, 뷰 렌더링, 도메인 허용이 모두 반영되었습니다.
Out of Scope Changes check ✅ Passed 변경은 이슈 범위인 프로필 이미지 표시와 next/image 허용 설정에 한정됩니다.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/web/204-show-profile-image-url

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.

@github-actions

github-actions Bot commented Jul 14, 2026

Copy link
Copy Markdown

Timo Performance Report

Bundle Size — timo-web
라우트 크기 First Load JS
/[locale]/home 209.54 kB 🔴 415.40 kB
/[locale]/today 192.89 kB 🔴 398.74 kB
/[locale]/focus 159.06 kB 🔴 364.92 kB
/[locale]/settings 166.30 kB 🔴 372.16 kB
/[locale]/statistics 232.86 kB 🔴 438.72 kB
/[locale]/[...rest] 0 B 🟡 205.86 kB
/[locale]/login 212.92 kB 🔴 418.78 kB
/[locale]/oauth/callback 119.57 kB 🟡 325.42 kB
/[locale]/onboarding 232.83 kB 🔴 438.69 kB
/[locale] 118.95 kB 🟡 324.80 kB
/[locale]/policy 125.07 kB 🟡 330.93 kB

공유 번들: 205.86 kB
🟢 < 200kB  |  🟡 < 350kB  |  🔴 ≥ 350kB (First Load JS · gzip)

Lighthouse — timo-web
URL Perf A11y LCP CLS TBT
/en/home 🔴 59 🟢 95 🔴 15.6s 🟢 0.000 🔴 610ms
/en/today 🔴 60 🟢 95 🔴 15.3s 🟢 0.000 🟡 572ms
/en/focus 🔴 60 🟢 95 🔴 15.2s 🟢 0.000 🟡 571ms
/en/statistics 🔴 69 🟢 95 🔴 15.2s 🟢 0.000 🟡 293ms

Perf ≥ 70 / A11y ≥ 85 목표
LCP 🟢 < 2.5s 🟡 < 4s 🔴 ≥ 4s  |  CLS 🟢 < 0.1 🟡 < 0.25 🔴 ≥ 0.25  |  TBT 🟢 < 200ms 🟡 < 600ms 🔴 ≥ 600ms

Image Optimization — timo-web
파일 크기 포맷 상태
images/google-calendar.png 36.20 kB PNG ⚠️ 🟢
images/google-logo.png 26.79 kB PNG ⚠️ 🟢

총 2개 · 63.00 kB  |  🟢 < 200KB  |  🟡 < 500KB  |  🔴 ≥ 500KB
⚠️ 2개 파일 WebP/AVIF 변환 권장

측정 커밋: 81e055c

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In
`@apps/timo-web/app/`[locale]/(main)/settings/_components/account/SettingsProfileView.tsx:
- Around line 56-66: Update the profile image Image component in
SettingsProfileView to include the Next.js priority prop, ensuring the
above-the-fold profile image is preloaded for LCP optimization while leaving the
fallback placeholder unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 57b6e053-9e5c-4b8d-9372-7970448048c8

📥 Commits

Reviewing files that changed from the base of the PR and between e997be2 and 0b523cc.

📒 Files selected for processing (4)
  • apps/timo-web/app/[locale]/(main)/settings/_components/account/SettingsProfileView.tsx
  • apps/timo-web/app/[locale]/(main)/settings/_containers/account/SettingsProfileContainer.tsx
  • apps/timo-web/app/[locale]/(main)/settings/_hooks/account/use-settings-profile.ts
  • apps/timo-web/next.config.js

@jjangminii jjangminii left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

체크아웃해서 프사 뜨는거 확인했습니다~~

- above-the-fold 프로필 이미지가 LCP 최적화를 위해 preload되도록 Image 컴포넌트에 priority prop을 추가했습니다
@kimminna
kimminna merged commit b93bcfa into develop Jul 14, 2026
10 checks passed
@kimminna
kimminna deleted the feat/web/204-show-profile-image-url branch July 14, 2026 17:34
@kimminna kimminna mentioned this pull request Jul 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 새로운 기능(기능성) 구현 ⏰ Timo-web Timo 웹 서비스 ♦️ 민아 민아상

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[FEAT] 프로필 조회 화면에 profileImageUrl 표시

2 participants