Skip to content

Comments

refactor: 랜딩페이지 web vital 지표 개선 작업#263

Merged
Wonchang0314 merged 1 commit intodevelopfrom
feat/landing
Feb 8, 2026
Merged

refactor: 랜딩페이지 web vital 지표 개선 작업#263
Wonchang0314 merged 1 commit intodevelopfrom
feat/landing

Conversation

@Wonchang0314
Copy link
Collaborator

No description provided.

@Wonchang0314 Wonchang0314 requested a review from Copilot February 8, 2026 16:13
@Wonchang0314 Wonchang0314 merged commit c56aa9f into develop Feb 8, 2026
6 checks passed
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

랜딩 페이지의 Web Vitals 개선을 목표로, 미디어 로딩 전략(이미지 lazy-load, 비디오 poster/프리로드)과 번들 분리(섹션 dynamic import) 등을 적용한 PR입니다.

Changes:

  • 랜딩 섹션 이미지들에 loading="lazy" 추가 및 일부 스타일 보강
  • 비디오에 poster 추가, 인트로 비디오 preload 조정 및 poster preload를 위한 head.tsx 추가
  • 랜딩 섹션들을 next/dynamic으로 분리하고, 애니메이션 설정 오타(opcity) 수정 + Next Image 포맷 설정 추가

Reviewed changes

Copilot reviewed 15 out of 18 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
src/composite/landing/suggestion/index.tsx 섹션 이미지 lazy-load 적용
src/composite/landing/storyVideo/StoryVideo.tsx 스토리 비디오에 poster 지정
src/composite/landing/questioning/index.tsx 섹션 이미지 lazy-load 적용
src/composite/landing/manageTodo/index.tsx 섹션 이미지 lazy-load 적용
src/composite/landing/launch/index.tsx 로고 이미지 lazy-load 및 JSX 포맷팅
src/composite/landing/intro/index.tsx 인트로 비디오 preload 조정 + poster 지정
src/composite/landing/goalAdvice/index.tsx 섹션 이미지 lazy-load 적용
src/composite/landing/fundingDiscount/index.tsx 이미지 className 보강 + lazy-load 적용
src/composite/landing/constants.ts 애니메이션 초기값 오타 수정 (opacity)
src/composite/landing/collectPlanet/index.tsx 섹션 이미지 lazy-load 적용
src/composite/landing/addGoal/index.tsx 섹션 이미지 lazy-load 적용
src/composite/landing/DonationSection/DonationImage.tsx 도네이션 이미지 lazy-load 적용
src/app/page.tsx 랜딩 섹션들을 next/dynamic으로 로딩하도록 변경
src/app/head.tsx opening poster 이미지 preload 추가
public/landing/landing-story-thumbnail.webp 스토리 비디오 poster용 썸네일 추가
next.config.ts Next Image 포맷(avif, webp) 설정 추가

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +6 to +25
const QuestioningSection = dynamic(() => import('@/composite/landing/questioning').then(mod => mod.QuestioningSection));
const SuggestionSection = dynamic(() => import('@/composite/landing/suggestion').then(mod => mod.SuggestionSection));
const StoryVideoSection = dynamic(() => import('@/composite/landing/storyVideo').then(mod => mod.StoryVideoSection));
const AddGoalFeatureSection = dynamic(() =>
import('@/composite/landing/addGoal').then(mod => mod.AddGoalFeatureSection)
);
const ManageTodoFeatureSection = dynamic(() =>
import('@/composite/landing/manageTodo').then(mod => mod.ManageTodoFeatureSection)
);
const GoalAdviceFeatureSection = dynamic(() =>
import('@/composite/landing/goalAdvice').then(mod => mod.GoalAdviceFeatureSection)
);
const CollectPlanetFeatureSection = dynamic(() =>
import('@/composite/landing/collectPlanet').then(mod => mod.CollectPlanetFeatureSection)
);
const FundingDiscountSection = dynamic(() =>
import('@/composite/landing/fundingDiscount').then(mod => mod.FundingDiscountSection)
);
const LaunchSection = dynamic(() => import('@/composite/landing/launch').then(mod => mod.LaunchSection));
const DonationSection = dynamic(() => import('@/composite/landing/DonationSection').then(mod => mod.default));
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

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

next/dynamic is being used to import several landing sections that are Server Components (e.g. questioning/index.tsx, suggestion/index.tsx, etc. have no 'use client'). If the goal is to defer below-the-fold client JS, this setup typically won’t achieve client-side lazy loading (Server Components can’t be shipped to the browser), and it can also introduce extra loading boundaries/chunk requests without clear benefit. Consider keeping these as static imports, or only dynamically importing truly client-heavy sections (or client-only subparts) with an explicit strategy (e.g. ssr: false + a placeholder) so the Web Vitals improvement is guaranteed.

Copilot uses AI. Check for mistakes.
Comment on lines +2 to +6
return (
<>
<link rel="preload" as="image" href="/landing/opening-poster.webp" fetchPriority="high" />
</>
);
Copy link

Copilot AI Feb 8, 2026

Choose a reason for hiding this comment

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

src/app/head.tsx is the root head for the entire App Router tree, so this preload will run on every route (e.g. auth/home pages) and can waste bandwidth by preloading a landing-only asset. Consider scoping the preload to the landing route by moving the landing page into a route group (e.g. src/app/(landing)/page.tsx) and adding (landing)/head.tsx, or otherwise ensuring the preload is only emitted on /.

Suggested change
return (
<>
<link rel="preload" as="image" href="/landing/opening-poster.webp" fetchPriority="high" />
</>
);
return <></>;

Copilot uses AI. Check for mistakes.
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.

1 participant