- ์๋ฌธ ์ ๋ชฉ: React Server Components Your Way
- ์๋ฌธ ๋งํฌ: https://tanstack.com/blog/react-server-components
- ๋ฒ์ญ์ผ: 2026-04-20 KST
- ์ปค๋ฎค๋ํฐ ๋ฐ๊ฒฌ: Hacker News, This Week in React #277
TanStack ํ์ ๋ ๊ฐ์ ์ฒ ํ์ ๊ฐ์กฐํด ์๋ค. 90%์ ์ผ๋ฐ์ ์ธ ์๊ตฌ๋ ์ฝ๊ฒ ํด๊ฒฐํ๋, ๋๋จธ์ง 10%์ ๊ณ ๊ธ ์๊ตฌ์์๋ ํ๋ ์์ํฌ๊ฐ ๊ฐ๋ฐ์๋ฅผ ๊ฐ๋์ง ๋ง์์ผ ํ๋ค๋ ๊ฒ์ด๋ค. React Server Components(RSC)๋ ๊ฐ์ ๊ด์ ์ผ๋ก ์ ๊ทผํ๋ค.
๊ธ์ ๋จผ์ RSC ์์ฒด๋ฅผ ๋ถ์ ํ์ง ์๋๋ค. ๋ฌด๊ฑฐ์ด ๋ ๋๋ง ๋ก์ง์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์ฎ๊ธฐ๊ณ , ์์ฃผ ๋ฐ๋์ง ์๋ ์ฝํ ์ธ ๋ฅผ ๋ ์ธ๋ฐํ๊ฒ ์บ์ํ ์ ์๋ค๋ ์ ์์ RSC๋ ๋ถ๋ช ๊ฐ๋ ฅํ ์์ ๋๊ตฌ๋ผ๊ณ ๋ณธ๋ค. Markdown ํ์ฑ, ์ฝ๋ ํ์ด๋ผ์ดํ , ๋ ์ง ํฌ๋งคํ , ๊ฒ์ ์ธ๋ฑ์ฑ, ์ฝํ ์ธ ๋ณํ ๊ฐ์ ์ผ์ ํนํ RSC์ ๊ถํฉ์ด ์ข๋ค.
๋ค๋ง ํ์ฌ ๋ง์ RSC ํ๋ ์์ํฌ๋ "์๋ฒ๊ฐ ํธ๋ฆฌ๋ฅผ ์์ ํ๋ ๊ตฌ์กฐ"๋ฅผ ๊ธฐ๋ณธ ์ ์ ๋ก ๋๋ค. ์๋ฒ๊ฐ ์ ์ฒด ํธ๋ฆฌ๋ฅผ ์ก๊ณ , use client ๋ก ์ธํฐ๋ํฐ๋ธํ ๋ถ๋ถ์ ํ์ํ๊ณ , ํ๋ ์์ํฌ ๊ด๋ก๊ฐ ๋ ๋๋ง๊ณผ ์ฌ์กฐํฉ ๋ฐฉ์์ ๊ฑฐ์ ์ ๋ถ ๊ฒฐ์ ํ๋ค. TanStack๋ ๋ฐ๋ก ์ด ์ง์ ์ ๋ฌธ์ ๋ก ๋ณธ๋ค. ๋จ์ง RSC์ ์ด์ ์ ์ป๊ธฐ ์ํด ์ฑ ์ ์ฒด๊ฐ ์๋ฒ ์ฐ์ ๊ตฌ์กฐ๋ฅผ ์ค์ฌ์ผ๋ก ์ฌํธ๋์ด์ผ ํ๋๊ฐ, ๋ผ๋ ์ง๋ฌธ์ด๋ค.
TanStack Start์ ํต์ฌ ์์ด๋์ด๋ ๊ฐ๋จํ๋ค. RSC๋ฅผ ํน์ํ ํ๋ ์์ํฌ ์ ์ฉ ๊ฐ๋ ์ด ์๋๋ผ, "ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ธ์ค๊ณ (fetch), ์บ์ํ๊ณ (cache), ๋ ๋๋ง(render)ํ ์ ์๋ React Flight ์คํธ๋ฆผ"์ผ๋ก ์ทจ๊ธํ์๋ ๊ฒ์ด๋ค. ์ฆ RSC๋ฅผ JSON ๋ฐ์ดํฐ์ฒ๋ผ ๋ ์๊ฒ, ๋ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ค๊ฒ ๋ค๋ ์ ๊ทผ์ด๋ค.
์ด ์ ๊ทผ์ ์ํด ๊ธ์ ์ธ ๊ฐ์ง ์์ API๋ฅผ ์ ์ํ๋ค.
renderToReadableStream: ์๋ฒ์์ React ์๋ฆฌ๋จผํธ๋ฅผ Flight ์คํธ๋ฆผ์ผ๋ก ๋ ๋๋งํ๋ค.createFromReadableStream: ํด๋ผ์ด์ธํธ๋ SSR ํ๊ฒฝ์์ Flight ์คํธ๋ฆผ์ ๋ค์ React ์๋ฆฌ๋จผํธ ํธ๋ฆฌ๋ก ๋ณต์ํ๋ค.createFromFetch: fetch ์๋ต์ผ๋ก๋ถํฐ ์ง์ RSC๋ฅผ ๋์ฝ๋ฉํ๋ค.
์ค์ํ ํฌ์ธํธ๋ ์ด ๊ณผ์ ์ "์จ๊ฒจ์ง ํน๋ณ ํ๋กํ ์ฝ"์ด ์๋ค๋ ์ ์ด๋ค. ํ์ค Flight ์คํธ๋ฆผ์ด ๋ค์ด์ค๊ณ , React ์๋ฆฌ๋จผํธ๊ฐ ๋์จ๋ค. ๊ทธ๋์ RSC๋ฅผ ๊ธฐ์กด ๋ฐ์ดํฐ ํ๋ฆ๊ณผ ์์ฐ์ค๋ฝ๊ฒ ๊ฒฐํฉํ ์ ์๋ค.
๊ธ์ RSC์ ์บ์ ์ ๋ต์ ์๋ก ๋ฐ๋ช ํ ํ์๊ฐ ์๋ค๊ณ ๊ฐ์กฐํ๋ค. RSC๊ฐ ๊ทธ๋ฅ ๋ฐ์ดํฐ๊ฐ ๋๋ฉด, ์บ์๋ ๊ธฐ์กด ๋๊ตฌ๋ฅผ ๊ทธ๋๋ก ์ธ ์ ์๋ค.
- TanStack Query์์๋ ์ผ๋ฐ async query์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ค.
queryKey,staleTime, background refetch ๊ฐ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ํ์ฉํ๋ค. - TanStack Router์์๋ loader ๊ฒฐ๊ณผ๋ฅผ ์บ์ํ๋ฏ RSC๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ฅํ๊ณ ์ฌ์ฌ์ฉํ ์ ์๋ค.
- CDN ๋ ๋ฒจ์์๋ GET ์๋ฒ ํจ์ ์๋ต์ ์ผ๋ฐ HTTP ์๋ต์ฒ๋ผ ์บ์ํ ์ ์๋ค.
์ฆ RSC๋ฅผ ๋์ ํ๋ค๊ณ ํด์ ์บ์ ์ ๋ต ์ ์ฒด๋ฅผ ๋ค์ ํ์ตํ๊ฑฐ๋, ํ๋ ์์ํฌ ๊ณ ์ ์ ๋ธ๋๋ฐ์ค๋ฅผ ๋ฐ์๋ค์ผ ํ์๊ฐ ์๋ค๋ ์ฃผ์ฅ์ด๋ค.
TanStack Start๋ use server ์ก์
์ ์ง์ํ์ง ์๋๋ค. ์ต๊ทผ RSC ์ํ๊ณ์์ ๋์จ ์ฌ๋ฌ CVE๊ฐ ์๋ฒ ํจ์์ Flight payload ์ฒ๋ฆฌ ๊ฒฝ๊ณ์์ ๋ฐ์ํ๋ค๋ ์ ์ ์์ํ ์ค๊ณ๋ค. ๋์ createServerFn ๊ธฐ๋ฐ์ ๋ช
์์ RPC ํธ์ถ์ ์ฌ์ฉํ๋ค. ๊ธ์ ์ด๊ฒ์ด ๋คํธ์ํฌ ๊ฒฝ๊ณ๋ฅผ ๋ ๋ถ๋ช
ํ๊ฒ ๋ง๋ค๊ณ , ์ง๋ ฌํ, ๊ฒ์ฆ, ๋ฏธ๋ค์จ์ด ์ฒ๋ฆฌ๋ฅผ ๋ ์์์ ์ผ๋ก ์ค๊ณํ๊ฒ ํด ๊ณต๊ฒฉ๋ฉด์ ์ค์ธ๋ค๊ณ ์ค๋ช
ํ๋ค.
TanStack ํ์ tanstack.com์ ์ฝํ ์ธ ์ค์ฌ ์์ญ์ ์ค์ ๋ก RSC ๊ธฐ๋ฐ์ผ๋ก ์ฎ๊ธฐ๊ณ ์์น๋ฅผ ๊ณต์ ํ๋ค.
- ๋ธ๋ก๊ทธ ๊ธ ํ์ด์ง๋ gzipped client JS๊ฐ ์ฝ 153KB ๊ฐ์ํ๋ค.
- ๋ฌธ์ ํ์ด์ง๋ ์ฝ 153KB ๊ฐ์ํ๋ค.
- ์์ ๋ฌธ์ ํ์ด์ง๋ ์ฝ 40KB ๊ฐ์ํ๋ค.
- ํน์ ํ์ด์ง์ Lighthouse ์ ์๋ 52์์ 74๋ก ์์นํ๊ณ , Total Blocking Time์ 1200ms์์ 260ms๋ก ์ค์๋ค.
ํ์ง๋ง ๊ธ์ RSC๊ฐ ๋ง๋ฅ ์ฑ๋ฅ ์ฟ ํฐ์ ์๋๋ผ๊ณ ์ ์ ๊ธ๋๋ค. ์ด๋ฏธ ์ธํฐ๋์ ์ค์ฌ์ธ ๋์๋ณด๋, ๋น๋, ์ฅ์๊ฐ ์ ์ง๋๋ ์ฑ ์ธ์ ๊ฐ์ ํ๋ฉด์ RSC๋ฅผ ๋ฃ๋๋ค๊ณ ์๋์ผ๋ก ๋นจ๋ผ์ง์ง ์๋๋ค. ์ค์ ๋ก ํด๋ผ์ด์ธํธ์์ ํ๋ ๋ฌด๊ฑฐ์ด ์ผ์ ์ ๊ฑฐํ ๋๋ง ํฐ ํจ๊ณผ๊ฐ ๋๋ค.
๊ทธ๋์ ์ด ๊ธ์ ๊ฒฐ๋ก ์ "๋ชจ๋ ๋ผ์ฐํธ๋ฅผ ์๋ฒ ์ปดํฌ๋ํธ๋ก ๋ฐ๊ฟ๋ผ"๊ฐ ์๋๋ค. ์ฝํ ์ธ ๊ฐ ๋ฌด๊ฒ๊ณ , ์ ์ ์ด๊ฑฐ๋, ์์กด์ฑ์ด ํฐ ์์ญ์์๋ ๊ฐ๋ ฅํ๊ณ , ์ํ์ ์ํธ์์ฉ์ด ์ค์ฌ์ธ ์ฑ ํ๋ฉด์์๋ ์ด๋์ด ์ ํ์ ์ผ ์ ์๋ค๋ ํ์ค์ ์ธ ์ ๋ฆฌ๋ค.
๊ธ์ ํ๋ฐ๋ถ์์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ Composite Components๋ค. ๊ธฐ์กด use client ๋ชจ๋ธ์ ์๋ฒ๊ฐ ๋ ๋๋งํ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ค. ๋ฐ๋ฉด Composite Components๋ ์๋ฒ๊ฐ ์ฌ๋กฏ๋ง ๋จ๊ธฐ๊ณ , ์ค์ ๋ก ์ด๋ค ํด๋ผ์ด์ธํธ UI๋ฅผ ๊ฝ์ ๋ฃ์์ง๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ฒฐ์ ํ๋ค.
์๋ฅผ ๋ค์ด ์๋ฒ๋ ๊ฒ์๊ธ ๋ณธ๋ฌธ๊ณผ ๋ค์ ๊ธ ๋งํฌ๋ฅผ ๋ ๋๋งํ๋ฉด์,
renderPostActions๊ฐ์ ์ฌ๋กฏ์ผ๋ก ํด๋ผ์ด์ธํธ ์ก์ ์์ญ์ ๋น์๋ ์ ์๊ณchildren์ฌ๋กฏ์ผ๋ก ๋๊ธ ์ปดํฌ๋ํธ ๊ฐ์ ๊ฒ์ ๋ฐ๊ฒ ํ ์ ์๋ค.
์ด ๋ฐฉ์์ ํต์ฌ์ ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ๋ฅผ ๊ฒ์ฌํ๊ฑฐ๋ ๋ณํํ์ง ๋ชปํ๊ณ , ๊ทธ๋ฅ "์ฌ๊ธฐ์ ๋ฌด์ธ๊ฐ ์จ๋ค"๋ ํฉ๋ฅ ์ง์ ๋ง ์ ์ํ๋ค๋ ๊ฒ์ด๋ค. ๋๋ถ์ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์์ ๋ฐ์ ์กฐ๊ฐ์ ์๊ธฐ ์ํ, provider, ๋ ์ด์์, ์กฐ๊ฑด๋ถ ๋ ๋๋ง๊ณผ ๋ค์ ์กฐํฉํ ์ ์๋ค.
์ด ๊ธ์ด ์ฃผ๋ ์ค๋ฌด์ ๋ฉ์์ง๋ ๋ช ํํ๋ค.
- RSC๋ ํ๋ ์์ํฌ ์ ์ฒด๋ฅผ ์๋ฒ ์ฐ์ ์ผ๋ก ์ฌํธํด์ผ๋ง ์ธ ์ ์๋ ๊ธฐ๋ฅ์ผ ํ์๊ฐ ์๋ค.
- RSC๋ฅผ ์คํธ๋ฆฌ๋ฐ ๊ฐ๋ฅํ ๋ฐ์ดํฐ๋ก ๋ณด๋ฉด Query, Router, CDN ๋ฑ ๊ธฐ์กด ๋๊ตฌ์ ์์ฐ์ค๋ฝ๊ฒ ํตํฉ๋๋ค.
- ์ฑ๋ฅ ์ด์ ์ ์ฝํ ์ธ ์ค์ฌ ํ๋ฉด์์ ํนํ ํฌ๋ฉฐ, ์ธํฐ๋์ ์ค์ฌ ํ๋ฉด์์๋ ๋์ ํ๊ฒ ๋น์ฉ ๋๋น ํจ๊ณผ๋ฅผ ๋ด์ผ ํ๋ค.
- Composite Components์ฒ๋ผ ์๋ฒ์ ํด๋ผ์ด์ธํธ์ ๊ฒฝ๊ณ๋ฅผ ๋ ๋ช ์์ ์ผ๋ก ๋ง๋๋ ์ ๊ทผ์ ์์ผ๋ก React ์ํคํ ์ฒ ๋ ผ์๋ฅผ ๊ฝค ํ๋ค ๊ฐ๋ฅ์ฑ์ด ์๋ค.
ํ์ฌ ์์ ์์ TanStack Start์ RSC ์ง์์ ์คํ์ ์ด์ง๋ง, "RSC๋ฅผ ํ๋ ์์ํฌ์ ์ ์์ด ์๋๋ผ ๋๊ตฌ๋ก ๋๋๋ฆฌ์"๋ ์ ์ ์์ฒด๋ ์์ฃผ ๊ฐํ๋ค.