Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 0 additions & 9 deletions apps/client/public/firebase-config.js

This file was deleted.

5 changes: 4 additions & 1 deletion apps/client/public/firebase-messaging-sw.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ self.addEventListener('activate', function () {
console.log('실행중..');
});

self.addEventListener('activate', () => {
clients.claim();
});

firebase.initializeApp(firebaseConfig);

const messaging = firebase.messaging();
Expand All @@ -35,7 +39,6 @@ messaging.onBackgroundMessage((payload) => {

const url = payload.data?.url || 'https://www.pinback.today';
const notificationTitle = payload.notification?.title || 'pinback';

const notificationOptions = {
body: payload.notification?.body || '저장한 북마크를 확인해 보세요!',
icon: payload.notification?.image || '/FCM-IMG.png',
Expand Down
10 changes: 0 additions & 10 deletions apps/client/src/assets/onBoarding/background/onBoardingBg.svg

This file was deleted.

9 changes: 0 additions & 9 deletions apps/client/src/assets/onBoarding/icons/chippi_bell.svg

This file was deleted.

9 changes: 0 additions & 9 deletions apps/client/src/assets/onBoarding/icons/chippi_morning.svg

This file was deleted.

21 changes: 0 additions & 21 deletions apps/client/src/assets/onBoarding/icons/chippi_night.svg

This file was deleted.

9 changes: 0 additions & 9 deletions apps/client/src/assets/onBoarding/story/macNotice.svg

This file was deleted.

9 changes: 0 additions & 9 deletions apps/client/src/assets/onBoarding/story/story1.svg

This file was deleted.

9 changes: 0 additions & 9 deletions apps/client/src/assets/onBoarding/story/story2.svg

This file was deleted.

9 changes: 0 additions & 9 deletions apps/client/src/assets/onBoarding/story/story3.svg

This file was deleted.

6 changes: 3 additions & 3 deletions apps/client/src/constants/alarms.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import avatar1 from '@assets/onBoarding/icons/chippi_morning.svg';
import avatar2 from '@assets/onBoarding/icons/chippi_night.svg';
import avatar3 from '@assets/onBoarding/icons/chippi_bell.svg';
import avatar1 from '/assets/onBoarding/icons/chippi_morning.webp';
import avatar2 from '/assets/onBoarding/icons/chippi_night.webp';
import avatar3 from '/assets/onBoarding/icons/chippi_bell.webp';

export interface AlarmType {
img: string;
Expand Down
8 changes: 4 additions & 4 deletions apps/client/src/constants/stories.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import story1 from '@assets/onBoarding/story/story1.svg';
import story2 from '@assets/onBoarding/story/story2.svg';
import story3 from '@assets/onBoarding/story/story3.svg';
import story1 from '/assets/onBoarding/story/story1.webp';
import story2 from '/assets/onBoarding/story/story2.webp';
import story3 from '/assets/onBoarding/story/story3.webp';

export interface Story {
img: string;
Expand Down Expand Up @@ -40,5 +40,5 @@ export const stories: Story[] = [
</>
),
progress: 100,
}
},
];
2 changes: 1 addition & 1 deletion apps/client/src/pages/onBoarding/OnBoarding.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import onBoardingBg from '@assets/onBoarding/background/onBoardingBg.svg';
import onBoardingBg from '/assets/onBoarding/background/onBoardingBg.webp';
import Header from './components/header/Header';
import MainCard from './components/funnel/MainCard';
import { useEffect } from 'react';
Expand Down
13 changes: 7 additions & 6 deletions apps/client/src/pages/onBoarding/components/funnel/MainCard.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { Progress, Button } from '@pinback/design-system/ui';
import { useState, useEffect } from 'react';
import { useState, useEffect, lazy, Suspense } from 'react';
import { motion, AnimatePresence } from 'framer-motion';
import StoryStep from './step/StoryStep';
import AlarmStep from './step/AlarmStep';
import MacStep from './step/MacStep';
import FinalStep from './step/FinalStep';
const StoryStep = lazy(() => import('./step/StoryStep'));
const AlarmStep = lazy(() => import('./step/AlarmStep'));
const MacStep = lazy(() => import('./step/MacStep'));
const FinalStep = lazy(() => import('./step/FinalStep'));
Comment on lines +2 to +7
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

코드 스플리팅 구현 완료, 에러 처리 확인 필요

단계별 컴포넌트에 대한 lazy loading 구현이 올바르게 되어 있습니다. 이를 통해 초기 번들 크기가 감소하고 각 단계가 필요할 때만 로드됩니다.

다만, lazy-loaded 컴포넌트의 로드 실패(네트워크 오류, 빌드 문제 등)를 처리하기 위한 Error Boundary가 현재 파일에 보이지 않습니다. 상위 컴포넌트에 Error Boundary가 구현되어 있는지 확인해 주세요.

다음 스크립트를 실행하여 상위 컴포넌트에서 Error Boundary 구현 여부를 확인하세요:


🏁 Script executed:

#!/bin/bash
# Description: MainCard를 사용하는 상위 컴포넌트에서 Error Boundary 구현 확인

# MainCard를 import하는 파일 찾기
echo "=== MainCard를 사용하는 파일 검색 ==="
rg -n --type=tsx --type=ts "import.*MainCard" -A 10 -B 5

# Error Boundary 관련 코드 검색
echo -e "\n=== Error Boundary 구현 검색 ==="
rg -n --type=tsx --type=ts -P "(class.*extends.*Component|ErrorBoundary|componentDidCatch)" apps/client/src/pages/onBoarding/

Length of output: 114


🏁 Script executed:

#!/bin/bash
# Description: Find MainCard imports and Error Boundary implementations

# Search for MainCard imports using glob patterns
echo "=== MainCard를 사용하는 파일 검색 ==="
rg -n "import.*MainCard" --glob="**/*.tsx" --glob="**/*.ts" -A 5 -B 2

# Search for Error Boundary implementations
echo -e "\n=== Error Boundary 구현 검색 ==="
rg -n -i "error.*boundary|componentDidCatch|error" --glob="**/*.tsx" apps/client/src/pages/onBoarding/ -C 3

# Search for the onBoarding component tree structure
echo -e "\n=== onBoarding 디렉토리 파일 구조 ==="
find apps/client/src/pages/onBoarding -name "*.tsx" -o -name "*.ts" | head -20

# Look specifically for MainCard usage in index or parent files
echo -e "\n=== MainCard를 export하거나 사용하는 파일 ==="
rg -n "MainCard" --glob="**/*.tsx" --glob="**/*.ts" apps/client/src/pages/onBoarding/

Length of output: 3413


🏁 Script executed:

#!/bin/bash
# Description: Check OnBoarding.tsx content to verify Error Boundary presence

echo "=== OnBoarding.tsx 전체 내용 검색 ==="
cat apps/client/src/pages/onBoarding/OnBoarding.tsx

echo -e "\n=== MainCard가 사용되는 부분 검색 ==="
grep -n -A 10 -B 10 "<MainCard" apps/client/src/pages/onBoarding/OnBoarding.tsx

echo -e "\n=== React ErrorBoundary import 확인 ==="
grep -r "ErrorBoundary" apps/client/src/pages/onBoarding/

Length of output: 1154


Lazy-loaded 컴포넌트에 Error Boundary 추가 필요

코드 스플리팅 구현은 올바르게 되어 있으나, 검증 결과 lazy-loaded 컴포넌트의 로드 실패를 처리하기 위한 Error Boundary가 없습니다.

현재 구조:

  • OnBoarding.tsx에서 Error Boundary 없이 <MainCard />를 직접 사용
  • MainCard.tsx에서 네 개의 step 컴포넌트를 lazy() 및 Suspense로 감싸고 있음
  • 네트워크 오류, 누락된 청크 등으로 lazy 로드 실패 시 전체 OnBoarding 페이지가 중단될 수 있음

OnBoarding.tsx 또는 MainCard.tsx에 Error Boundary를 추가하여 lazy component 로드 실패에 대한 안정성을 확보하세요.


import { cva } from 'class-variance-authority';
import { usePostSignUp } from '@shared/apis/queries';
const stepProgress = [{ progress: 30 }, { progress: 60 }, { progress: 100 }];
Expand Down Expand Up @@ -197,7 +198,7 @@ const MainCard = () => {
transition={{ duration: 0.4 }}
className="flex h-full flex-col items-center"
>
{renderStep()}
<Suspense fallback={null}>{renderStep()}</Suspense>
</motion.div>
</AnimatePresence>
</div>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import dotori from '@assets/onBoarding/icons/dotori.svg';
import dotori from '/assets/onBoarding/icons/dotori.svg';
import AlarmBox from '../AlarmBox';
interface AlarmStepProps {
selected: 1 | 2 | 3;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import dotori from '@assets/onBoarding/icons/dotori.svg';
import dotori from '/assets/onBoarding/icons/dotori.svg';
const FinalStep = () => {
return (
<div className="flex h-full flex-col items-center">
<img src={dotori} className="mb-[1.2rem]" alt="dotori" />
<p className="head2 text-font-black-1">
Pinback에 오신 걸 환영해요
</p>
<p className="head2 text-font-black-1">Pinback에 오신 걸 환영해요</p>
</div>
);
};
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import MacNotice from '@assets/onBoarding/story/macNotice.svg';
import dotori from '@assets/onBoarding/icons/dotori.svg';
import MacNotice from '/assets/onBoarding/story/macNotice.webp';
import dotori from '/assets/onBoarding/icons/dotori.svg';
const MacStep = () => {
return (
<div className="flex h-full flex-col items-center">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ const StoryStep = ({ step }: StoryStepProps) => {
src={story.img}
className="mb-[1.6rem] mt-[2.4rem] w-[31.2rem]"
alt="onboarding"
decoding="async"
fetchPriority="high"
/>
<p className="sub4-sb text-center text-black">{story.text}</p>
</div>
Expand Down
12 changes: 7 additions & 5 deletions apps/client/src/pages/onBoarding/components/header/Header.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import HeaderLogo from '@assets/onBoarding/icons/header_logo.svg';
import HeaderLogo from '/assets/onBoarding/icons/header_logo.svg';
const Header = () => {
return (
<header
className="z-5 absolute top-0 flex w-full justify-items-start px-[8rem] py-[2.5rem]"
>
<img src={HeaderLogo} alt="header logo" onClick={() => window.location.reload()}/>
<header className="z-5 absolute top-0 flex w-full justify-items-start px-[8rem] py-[2.5rem]">
<img
src={HeaderLogo}
alt="header logo"
onClick={() => window.location.reload()}
/>
</header>
);
};
Expand Down
Loading