๐จ TroubleShotting
์ ๋ฒ ํธ๋ฌ๋ธ ์ํ ์ ์ด์ด์ ์ฌ์ค ํ ๊ฐ์ง ๋ฌธ์ ์ ์ด์ ์๋ฌธ์ ์ด ํ๋ ๋ ์์๋๋ฐ..
ํด๊ฒฐ์ด ๋์์ผ๋ ๊ทธ๋ฅ ๋์ด๊ฐ๊น ํ๋ค๊ฐ ๋๋ฌด ์ฐ์ฐํด์!
์ ๋ฒ์ ๋ฌ๋ ์ด ์ค๋ฅ๋ Suspense๊ฐ SSR- streaming์ ๋์์ด ๋๊ณ ,
Suspense์ ์ฎ์ฌ์๋ useSuspenseQuery์ queryFn ๋ด์์ clientSupabase()๋ฅผ ์ฌ์ฉํ๊ณ ์์๊ธฐ ๋๋ฌธ์
pre-rendering(SSR) ์์๋ clientSupabase()๊ฐ ์๋์ ์ ํ๊ธฐ ๋๋ฌธ์ด์๋ค.
๋ฌธ์ ๋ฐ์์ ๋ฐฐ๊ฒฝ - As Is
๊ทธ๋ฐ๋ฐ ํ๋ ๋ ์์ํ๋ ๋ถ๋ถ์ ์ด ์ค๋ฅ๊ฐ A -> B ํ์ด์ง๋ก ๋์ด๊ฐ ๋๋ ๋จ์ง ์์๋๋ฐ, B ํ์ด์ง์์ ์๋ก๊ณ ์นจ์ ํ๋ฉด ๋ฌ๋ค๋ ๊ฒ์ด์๋ค.
๊ทธ๋์ ์์นญ์ ํ๋ ๋์ค, Next.js ๊ณต์๋ฌธ์์ Rendering > Client Components ์นดํ ๊ณ ๋ฆฌ์
How are Client Components are Rendered?
๋ถ๋ถ์ ๋ณด๋ฉด
- Client ์ปดํฌ๋ํธ๋
์๋ก์ด ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฑด์ง, ์๋ ์๋ ํ์ด์ง์์ ์๋ก๊ณ ์นจ ํ๋ ๊ฑด์ง์ ๋ฐ๋ผ ๋ ๋๋ง ๋ฐฉ์์ด ๋ค๋ฅด๋ค.
- ์๋ก์ด ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ ๋: Server์์ RSC๋ JS ๋ฒ๋ค์ ์ฌ์ฉํด์ ๋ฏธ๋ฆฌ HTML์ ๋ง๋ค๊ณ ๊ทธ๊ฑธ Client๋ก ๋๊ธฐ๊ธฐ ๋๋ฌธ์
-> Client๋ JS ๋ฒ๋ค์ ๋ค์ด๋ก๋ ํ ํ์์์ด hydration๋ง ํด์ user์ ์ํธ์์ฉํ ์ ์๊ฒ ๋์ ์ผ๋ก ๋ง๋ค๊ธฐ๋ง ํ๋ฉด ๋๋ค.
- ์๋ก๊ณ ์นจํ ๊ฒฝ์ฐ: Client ์ธก์์ JS ๋ฒ๋ค์ ์ง์ ๋ค์ด๋ก๋ํ๊ณ ๋ค์ด๋ก๋ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ๋ค์, ๊ทธ ๋ค์ ๊ณผ์ ๋ค์ด ์ด๋ฃจ์ด์ง๋ค
OK ์๊ฒ ๋๋ฐ
์๋ ๊ทธ๋์ A -> B ํ์ด์ง๋ก ๋์ด๊ฐ์ ๋ ๋๋ง ๋๋,
์ฆ ์๋ก์ด ํ์ด์ง๋ก ๋ฐฉ๋ฌธํ ๋์๋ ์ ์ ์ค๋ฅ๊ฐ ์ ๋จ๋ ๊ฑธ๊น?
How(๊ณผ์ ) ?
์์ธ๊ฐ์ค1
์๋ก๊ณ ์นจ์ด ์๋ ์๋ก์ด ํ์ด์ง ๋ฐฉ๋ฌธ ์,
์๋ฒ์์ JS ๋ฒ๋ค์ ๋ค์ด๋ก๋ ๋ฐ์ ๋ค Client์ ๋๊ฒจ์ค๋ค๊ณ ํ๋๋ฐ,
JS ๋ฒ๋ค์ ๋ฏธ๋ฆฌ ๋ค์ด๋ก๋ ๋ฐ์ผ๋ฉด SSR ์์๋ ClientSupabase()๋ฅผ ์ฌ์ฉํ ์ ์๋๋ณด๋ค!
Why(์ด์ ) ?
๊ด๋ จ URL
์๋ ๋งํฌ๋ฅผ ๋ณด๋ฉด Next.js์์ ์ Client ์ปดํฌ๋ํธ๊ฐ SSR'd ๋๋ ์ด์ ๋ฅผ ์ ์ ์๋ค.
https://github.com/reactwg/server-components/discussions/4
์์ฝํ์๋ฉด,
- RSC(React-Server-Component payload)๋
๊ธฐ์กด CSR์ ๊ฐ์๋ผ์ฐ๋ ๊ฒ ์๋๋ผ CSR ์ ์ ํ๋์ ๊ณผ์ ์ด "์ถ๊ฐ"๋๋ ๊ฒ์ด๊ณ ,
- RSC์์์ "server" ์ "client"๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๊ทธ ์ก์ฑ๋ผ๊ธฐ ๋ณด๋ค๋ React-Server์ React-Client๋ก์,
Props๋ค(fileSystem, database, internal services.. ๋ฑ)์ React-Server์์ -> React-Client ๋ฐฉํฅ์ผ๋ก ํ๋ฅด๊ณ
๊ทธ ์ฌ์ด์๋ Serialization(= ์ง๋ ฌํ) ๊ด๊ณ๊ฐ ์๊ธฐ ๋๋ฌธ์
- ๊ฒฐ๊ณผ์ ์ผ๋ก React-Client๋ ๋ธ๋ผ์ฐ์ ์ ์๋ฒ, ๋ ํ๊ฒฝ ๋ชจ๋์์ ๋์ํ๊ฒ ๋๋ค.
(๋ธ๋ผ์ฐ์ ์์๋ DOM ๊ด๋ฆฌ, ๊ทธ ์ธ ํ๊ฒฝ์์๋ HTML ์์ฑ)
์ถ๋ก ์ what(๊ฒฐ๊ณผ) - To Be
์ ๊ณผ์ ์ด A->B ํ์ด์ง๋ก ๋์ด๊ฐ ๋ ์ด๋ฃจ์ด์ง๋ ๊ฒ์ด๊ณ ,
JS ๋ฒ๋ค์ ์ฒ์๋ถํฐ ๋ค์ ๋ค ๋ค์ด๋ฐ์์ผ ํ๋ ์๋ก๊ณ ์นจ๊ณผ๋ ๋ค๋ฅด๊ฒ,
A -> B ํ์ด์ง ๋ฐฉ๋ฌธ์
JS ๋ฒ๋ค์ด ์๋ฒ ๋จ์์ ๋ฏธ๋ฆฌ ๋ค์ด๋ก๋ ๋๋ค๋ ์ +
React-Client๋ ์ด๊ธฐ HTML ์์ฑ์ ๊ด์ฌํ๊ณ ์๋ ํ๋ค๋ ์ ์์,
pre-rendering ๊ณผ์ ์์ Suspense๊ฐ ๊ฑธ๋ฆฐ๋ค๊ณ ํด๋ clientSupabase()๊ฐ ์คํ๋๋ ๋ฐ์๋ ๋ฌธ์ ๊ฐ ์๋ค๋ ๊ฒฐ๋ก ์ด ๋์๋ค.
๋ฐ๋ฉด, JS ๋ฒ๋ค์ Client์์ ์ง์ ๋ค์ด๋ก๋ ๋ฐ๊ณ ๊ทธ ๋์ ๊ธฐ๋ค๋ ค์ผ ํ๋ ์๋ก๊ณ ์นจ์
pre-rendering ๊ณผ์ ์์ Suspense๊ฐ ์คํ๋ ๋ JS ๋ฒ๋ค์ด ์๊ธฐ ๋๋ฌธ์ clientSupabase()๊ฐ ์คํ๋ ์ ์์๊ณ
์ค๋ฅ๋ฅผ ๋ฑ๋ ๊ฒ์ด๋ผ๋ ์ถ๋ก ์ ํ๋ค.
๐ก ์๋กญ๊ฒ ์๊ฒ๋ ์
Next.js์์ Client ์ปดํฌ๋ํธ๊ฐ ์ SSR'd ๋๋์ง ๊ทธ ์ด์ ๋ฅผ ์๊ฒ ๋์๋ค.
'TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2024.05.30 #Next.js #Server-Action2 #ํ๋ฉด๋ฐ์ #๋ก๋ฉ์ํ (0) | 2024.05.31 |
---|---|
2024.05.29 #Next.js #Server-Action1 (1) | 2024.05.31 |
2024.05.25 TIL #Next.js_app_router #Suspense #pre-render #ํํ์ (0) | 2024.05.25 |
2024.04.26 TIL #useSuspenseQuery #useSuspenseQueries #useMemo (0) | 2024.05.17 |
2024.04.22 TIL #์ฑํ ๋ฐฉ_๋๊ฐ๊ธฐ #๋๋_๋๊ฐ๋๋ฐ_๋๋? #type_์ง์ (0) | 2024.05.11 |