-
Notifications
You must be signed in to change notification settings - Fork 4
๐งโ๐ผReactโQuery๋ก ์์ ์ ์ธ ์คํธ๋ฆฌ๋ฐ์ ์ํ ๋ก๋ฉ ๋ฐ ์๋ฌ ๊ด๋ฆฌํ๊ธฐ
HLS์์์ ๋น๋๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ์์ ๊ฐ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ก๋ฉ ๋ฐ ์๋ฌ์ฒ๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ ์ผ์ ์ฝ๋๊ฐ ์ค๋ณต๋์๊ณ ๋นํจ์จ์ ์ด์๋ค. ์ด๋ฅผ ์ฒด๊ณํํ์ฌ ๋น๋๊ธฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋์ ์ํฉ์ ์ ๋ฆฌํ ํ์์ฑ์ด ์์๋ค.
๊ธฐ์กด์ ์ฝ๋
const MainLiveSection = ({ title, type }: MainLiveSectionProps) => {
const { data = [], isLoading, error } = useRecentLive();
if (error) {
return <div>๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ค ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.</div>;
}
return (
<MainSectionContainer>
<MainSectionHeader>
<p className="live_section_title">{title}</p>
<button className="live_section_button">์ ์ฒด๋ณด๊ธฐ</button>
</MainSectionHeader>
{isLoading && <div>๋ก๋ฉ ์ค...</div>}
{data.length === 0 && !isLoading && <div>๋ฐ์ดํฐ๊ฐ ์์ต๋๋ค.</div>}
// ์ฝ๋ ์๋ต
</MainSectionContainer>
);
};์์ ๊ฐ์ ์ฝ๋๊ฐ ์ปค์คํ
ํ
์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ์ปดํฌ๋ํธ๋ง๋ค ์์๋ค. isLoading๊ณผ error์ผ๋ ๊ฐ๊ฐ ์ฐ์ฐ์์ ์กฐ๊ฑด๋ฌธ์ ํตํด์ ์ฒ๋ฆฌํ์๋ค.
์ปดํฌ๋ํธ์ ์ญํ ์ ๋ ๋๋ง๋๋ ๊ฒ์๋ง ์ง์ค
- ๋น์ง๋์ค ๋ก์ง
- ๋ ๋๋ง ๋ก์ง
๋ก๋ฉ๊ณผ ์๋ฌ์ฒ๋ฆฌ๋ ํด๋น ์ปดํฌ๋ํธ์ ๊ด์ฌ์ฌ์์ ๋ฒ์ด๋๋ค๊ณ ํ๋จ
โ ๋ก๋ฉ๊ณผ ์๋ฌ์ฒ๋ฆฌ ์ญํ ์ **๋ถ๋ชจ(์ฒ๋ฆฌํด์ผํ ๋ถ๋ถ)**๋ก ์์
๊ธฐ์กด์ ๊ฐ๋จํ๊ฒ ๋ก๋ฉ์์๋
{isLoading && <div>๋ก๋ฉ ์ค...</div>}์ ๊ฐ์ด ๋น๋๊ธฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ๋ํด์ ํฌ๊ฒ ๊ณ ๋ฏผํ์ง ์์๋ค. ๋ํ, ๋จ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ด๋ผ๋ ์ด์ ๋ก ๋ก๋ฉ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด๋ผ ํ๋จํ์ง๋ง ์ต์ ํ์๋ ๊ด๋ จ์ด ์์๋ค.
- ๋ ์ด์์ ์ํํธ (
Layout Shift)- ์น ํ์ด์ง์ ์์๋ค์ด ์์์น ๋ชปํ๊ฒ ์ด๋ํ๋ ํ์
- ๊ธฐ์กด์ ๊ณ์ฐ๋์๋ Layout์ด ๋ค์ ๊ณ์ฐ๋๋ ๋ฌธ์ ๊ฐ ์์
Layout Shift ํ์์ด ์ผ์ด๋์ง ์๋๋ก ํ๊ธฐ ์ํด์ ๋ณด์ฌ์ค์ผํ๋ ์ปดํฌ๋ํธ์ ํฌ๊ธฐ๊ฐ ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ Suspense fallback์ปดํฌ๋ํธ์ ๋ณด๋ด์ฃผ๊ฒ ๋๋ฉด Layout์ด ๋ค์ ๊ณ์ฐ๋์ง ์์์ ์ฌ์ฉ์ ๊ฒฝํ๊ณผ ์ต์ ํ๋ฅผ ๋์์ ํด๊ฒฐํ ์ ์์
<Suspense fallback={<RecommendLiveSkeleton />}>
<DataComponent />
</Suspense>Suspense์ fallback์ปดํฌ๋ํธ์ skeleton์ ์ง์ ๋ง๋ค์ด์ ๋์
- skeleton ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์
- react-loading-skeleton, react-skeleton-loader : ๊ฐ๋จํ๊ณ ๋น ๋ฅด๊ฒ ์ ์ฉ
-
react-content-loader: ๋์์ธ์ ์ปค์คํฐ๋ง์ด์ง ๊ฐ๋ฅ (svg ๊ธฐ๋ฐ)
- ์ด๊ธฐ ๋ก๋ฉํ๋ฉด

- ๊ฐ์ ํ

์ถ๊ฐ๋ก, ์นํ์ด์ง์ ์ฑ๋ฅ์งํ์ธ **CLS(Cumulative Layout Shift)**๋ฅผ ํตํด์ Layout Shift ๋น๋๋ฅผ ์ธก์ ํ ์ ์์
https://wit.nts-corp.com/2020/12/28/6240
React-Query์ ๋ฒ์ ์ด ๋ฌ๋ผ์ง๋ฉด์ DefaultOptions ์์ฑ์์ suspense ์์ฑ์ด ์ ๊ฑฐ๋จ

OmitKeyof ์์ฑ์ ํตํด suspense๊ฐ ๋น ์ง ๊ฒ์ ํ์ธ ํ ์ ์์๋ค.
Suspense๋ฅผ ์ง์ํ๋ ์๋ก์ด ํ
์ด ์์๋ค.
- useSuspenseQuery
- useSuspenseQueries
์์ suspenseQuery๋ ๊ธฐ์กด์ useQuery์ ๊ธฐ๋ฅ์ React์ Suspense๋ฅผ ์๋์ ์ผ๋ก ์ง์ํด์ฃผ๋ ํ ์ด๋ค.
export const useMainLive = () => {
return useSuspenseQuery<MainLive[], Error>({
queryKey: ['mainLive'],
queryFn: fetchMainLive,
refetchOnWindowFocus: false,
});
};ErrorBoundary ๋์
- ์ปดํฌ๋ํธ์์ ๋ฐ์ํ ์๋ฌ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก(ErrorBoundary) ์์
- ์๋ฌ์ ๋ณด์ฌ์ผ ์ค์ผ ํ ์ปดํฌ๋ํธ ํ ๋น
Suspense์ ErrorBoundary๋ฅผ **AsyncBoundary**๋ผ๋ ํ๋์ ์ปดํฌ๋ํธ๋ก ํตํฉ
โ ๋น๋๊ธฐย Suspenseย ์ปดํฌ๋ํธ์ ๋ก๋ฉ ์ํ์ย Errorย ์ํ๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ ์ปดํฌ๋ํธ
https://www.slash.page/ko/libraries/react/async-boundary/src/withAsyncBoundary.i18n
<AsyncBoundary
pendingFallback={<RecommendLiveSkeleton />}
rejectedFallback={(error) => <RecommendLiveError error={error} />}
>
<RecommendLive />
</AsyncBoundary>- ์ธ์๊ฐ
-
pendingFallback: ์ปดํฌ๋ํธ ๋ก๋ฉ ์์ ๋ณด์ฌ์ผํ ์ปดํฌ๋ํธ -
rejectedFallback: ์๋ฌ์์ ๋ณด์ฌ์ผํ ์ปดํฌ๋ํธ
-
- ์ฅ์
- ๊ตฌํ์ ํธ๋ฆฌํจ
- ์ถํ์
error๊ฐ ๋ฐ์ํ ์ปดํฌ๋ํธ์์ ๋ ๋ฆฝ์ ์ผ๋กrefetch๊ฐ๋ฅ
- ๐ ์น ์์ผ์ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ (feat. WS vs Socket.io)
- ๐คธโโ๏ธ ๋น์ ์ด ์ปดํฌ๋ํธ๋ก ๋ ๋๋ง ์ต์ ํ ํ๊ธฐ
- ๐ทโโ๏ธ Shared Worker๋ก ํด๋ผ์ด์ธํธ์ ์์ผ ํต์ ๊ฐ์ ํ๊ธฐ
- ๐จโ๐ฉโ๐งโ๐ฆ ๋ค์ค ํญ์์ ํ๋์ ์์ผ์ ๊ณต์ ํ ์ ์์๊น?
- ๐ [Socket.io] ํด๋ผ์ด์ธํธ์ ์ค์๊ฐ ์ฑํ ๊ตฌํ๊ธฐ
- ๐ฌ ์๋ฒ๋ฅผ docker swarm ์ผ๋ก ๊ด๋ฆฌํด๋ณด์
- ๐ฌ ์ปจํ ์ด๋๋ผ๋ฆฌ env ๊ณต์ ํ๊ธฐ
- ํ์ฅ์ฑ์ ๊ณ ๋ คํ ์๋ฒ ์ค๊ณ
- ncp ์๋ฒ ์ ํ
- ์ฑํ ์๋ฒ์ Redis ๋ฅผ ์ด ์ด์
- โ NestJS๋ฅผ ํตํ ์ผ๊ด์ ์ธ ์์คํ ์ค๊ณ
โ๏ธ ์ธ๋ถ์ ์ฌ์ฉ์๊ฐ Object Storage์ ์ ๊ทผํ์ง ๋ชปํ๋ ๊ถํ ์ ์ด- ๐ฆข nestjs์์ swagger ์ฌ์ฉํด๋ณด๊ธฐ
- ๐ NestJS Nginx Request Data Size ๋ฌธ์
- ๐ ๋ค์๋ณด๊ธฐ๋ฅผ ์ํ NodeโMediaโServer, FFMpeg ๋ถ์
- ๐ฆ ํจํค์ง ๋งค๋์ ๋ฐ ๋ชจ๋ ธ๋ ํฌ ์ ํ๊ธฐ
- ๐ฐ ์ปค์คํ ESLint ๋ง๋ค๊ธฐ
- ๐คบ ์ปค์คํ react ์ค๋ํซ ๋ง๋ค๊ธฐ
- ๐ธ ๋ฐ์ํ ๋น๋์ค ํ๋ ์ด์ด ๊ตฌํ: ํจ๋ฉ ํ ๊ธฐ๋ฒ
- ๋ฆฌ์กํธ ํ ํผ ๋ฅ๋ค์ด๋ธ