RSC (React Server Components)
๋ช ์ฌ ยท React
์ผ๋ถ ์ปดํฌ๋ํธ๊ฐ ์๋ฒ์์๋ง ์คํ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ API์ ์ง์ ์ ๊ทผํ๋ฉด์๋ JavaScript ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์ ๋ณด๋ด์ง ์๋ React์ ์๋ก์ด ํจ๋ฌ๋ค์ โ ํด๋ผ์ด์ธํธ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ํ๊ธฐ์ ์ผ๋ก ์ค์ ๋๋ค.
์ปดํฌ๋ํธ๋ฅผ ์ ์ ๋ ๋๋ง๊ณผ ๋ฐ์ดํฐ ์ ๊ทผ์ ์ํ Server Components์ ์ธํฐ๋ํฐ๋นํฐ๋ฅผ ์ํ Client Components๋ก ๋ถ๋ฆฌํ๋, Next.js์ ๊ธฐ๋ณธ ํตํฉ๋ ํ์ ์ ์ํคํ ์ฒ โ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋๋ ๋ด์ฉ์ ์๋์ผ๋ก ์ต์ ํํฉ๋๋ค.
์๋ฒ ์ปดํฌ๋ํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ ์ ํด๊ฒฐํ ํ ๊ฒฐ๊ณผ HTML๋ง ํด๋ผ์ด์ธํธ์ ์ ์กํจ์ผ๋ก์จ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ฑ ์ฌ์ด์ ์ญ์ฌ์ ํํ์ ์ ๊ฑฐํ๋ React ์ํ๊ณ์ ์ค๋ํ ์งํ์ ๋๋ค.
React Server Components(RSC)๋ ์๋ฒ์์๋ง ์คํ๋๋ ์๋ก์ด ์ ํ์ React ์ปดํฌ๋ํธ์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ์ผ ์์คํ ๋ฐ API์ ์ง์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, JavaScript ์ฝ๋๊ฐ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋์ง ์์ต๋๋ค. ๋ ๋๋ง ๊ฒฐ๊ณผ๋ HTML๊ณผ ์ง๋ ฌํ๋ ํ์ด๋ก๋ ํํ๋ก ํด๋ผ์ด์ธํธ์ ์ ์ก๋ฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ Next.js๋ฅผ ํตํด RSC๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ์ธํฐ๋ํฐ๋นํฐ์ ํ์ํ JavaScript๋ง ๋ธ๋ผ์ฐ์ ๋ก ์ ์ก๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํฉ๋๋ค.
๊ธฐ์กด React ์ปดํฌ๋ํธ(Client Components)๋ ๋ธ๋ผ์ฐ์ ์์ ๋ค์ด๋ก๋, ํ์ฑ ๋ฐ ์คํ๋๋ฉฐ, ๋ชจ๋ ์ฝ๋, ์์กด์ฑ ๋ฐ ๋ก์ง์ด JavaScript ๋ฒ๋ค์ ํฌํจ๋ฉ๋๋ค. ๋ฐ๋ฉด RSC๋ ์๋ฒ์์๋ง ์คํ๋ฉ๋๋ค: ํ์ฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ, ํฌ๋งทํ ๋ฑ์ ์์กด์ฑ์ด ํด๋ผ์ด์ธํธ๋ก ์ ์ก๋์ง ์์ต๋๋ค. ์ ํฌ ์์ด์ ์๋ ์ด ๊ตฌ๋ถ์ ํ์ฉํ์ฌ JavaScript ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ต๋ 70%๊น์ง ์ค์ฌ ํ์ด์ง ๋ก๋ฉ์ ํฌ๊ฒ ๊ฐ์ํํฉ๋๋ค.
RSC๋ ๋ธ๋ผ์ฐ์ ์์ ๋ถํ์ํ JavaScript๋ฅผ ์ ๊ฑฐํ์ฌ ์น ์ฑ๋ฅ์ ํ๋ช ์ ๊ฐ์ ธ์ต๋๋ค. ์ ํต์ ์ผ๋ก ์ ์ ํ ์คํธ๋ฅผ ํ์ํ๋ ์ปดํฌ๋ํธ๋ JavaScript ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ณด๋์ต๋๋ค. RSC๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฒฐ๊ณผ HTML๋ง ์ ์ก๋๋ฉฐ, ์๋ฒ ์ธก ์์กด์ฑ(๋งํฌ๋ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ORM ๋ฑ)์ ํด๋ผ์ด์ธํธ ๋ฒ๋ค์ ๋ฌด๊ฒ๊ฒ ํ์ง ์์ต๋๋ค. ์ ํฌ ์์ด์ ์๋ RSC ์ํคํ ์ฒ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ํ๋ก์ ํธ์์ Time to Interactive์ Largest Contentful Paint์ ๊ทน์ ์ธ ๊ฐ์ ์ ํ์ธํฉ๋๋ค.
RSC๋ ์๋ฒ ์ปดํฌ๋ํธ์ ๊ทธ ์์กด์ฑ์ ๋ชจ๋ ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ JavaScript์์ ์๋์ผ๋ก ์ ์ธํ์ฌ ๋ฒ๋ค ํฌ๊ธฐ๋ฅผ ์ค์ ๋๋ค. RSC์์ ์ฌ์ฉ๋๋ ๋ ์ง ํฌ๋งทํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, Markdown ํ์ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํด๋ผ์ด์ธํธ๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ค์ด๋ก๋ํ๋ ๋ฒ๋ค์ ๋ํ๋์ง ์์ต๋๋ค. ์ ํฌ ์์ด์ ์๋ Server Components์ ๋น์ค์ ์ต๋ํํ๋๋ก ํ๋ก์ ํธ๋ฅผ ๊ตฌ์กฐํํ๋ฉฐ, ์๊ฒฉํ ํ์ํ ์ฌ์ฉ์ ์ธํฐ๋์ ์๋ง Client Components๋ก ์ ํํฉ๋๋ค.
RSC๋ ์ฝํ ์ธ ๊ฐ ์๋ฒ์์ ์ง์ HTML๋ก ๋ ๋๋ง๋์ด JavaScript ์คํ ์์ด ์ธ๋ฑ์ฑ ๋ก๋ด์ด ์ฆ์ ์ฝ์ ์ ์์ผ๋ฏ๋ก SEO์ ๋งค์ฐ ๊ธ์ ์ ์ธ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ํ ํ์ด์ง๊ฐ ๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ๋ก๋๋์ด Google ์์ ์์์ธ Core Web Vitals๋ฅผ ๊ฐ์ ํฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ RSC๋ฅผ ํ์ฉํ์ฌ ์ฝํ ์ธ ํ์ด์ง๊ฐ Lighthouse ์ ์ 100์ ๊ทผ์ ํ๋๋ก ํ์ฌ ์ ๊ธฐ์ ๊ฐ์์ฑ์ ๊ทน๋ํํฉ๋๋ค.
๋ค, ์ด๊ฒ์ด ๋ฐ๋ก React์ Next.js๊ฐ ๊ถ์ฅํ๋ ๋ชจ๋ธ์ ๋๋ค. Server Components๋ ์ ์ ๋ ๋๋ง, ๋ฐ์ดํฐ ์ ๊ทผ ๋ฐ ๋ ์ด์์์ ์ฒ๋ฆฌํ๊ณ , Client Components๋ ์ธํฐ๋ํฐ๋นํฐ โ ์์, ์ ๋๋ฉ์ด์ , ์ํ ๊ด๋ฆฌ๋ฅผ ๋ด๋นํฉ๋๋ค. Server Component๋ Client Component๋ฅผ ๊ฐ์ ธ์ ๋ ๋๋งํ ์ ์์ด ์ต์ ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ง๋ญ๋๋ค. ์ ํฌ ์์ด์ ์๋ ๊ฐ ๋ ๋ฒจ์ด ๊ทธ ์ญํ ์ ๊ฐ์ฅ ํจ์จ์ ์ธ ์ ํ์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ๋ฅผ ์ค๊ณํฉ๋๋ค.
RSC๋ ์ค๊ฐ API ๋ผ์ฐํธ๋ ํด๋ผ์ด์ธํธ ์ธก ๋ฐ์ดํฐ ํ์นญ ๋ ์ด์ด๋ฅผ ์์ฑํ์ง ์๊ณ ์ปดํฌ๋ํธ ์ฝ๋์์ ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ API๋ฅผ ์ฟผ๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค. ์๋ฒ ์ปดํฌ๋ํธ๋ ๋น๋๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํด๊ฒฐํ ํ ๋ ๋๋ง๋ ๊ฒฐ๊ณผ๋ฅผ HTML๋ก ๋ธ๋ผ์ฐ์ ์ ์ ์กํฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ ์ด ๋จ์์ฑ์ ํ์ฉํ์ฌ ํ๋ก์ ํธ์ ์ํคํ ์ฒ ๋ณต์ก์ฑ์ ์ค์ด๊ณ , ๋ช ํํ ์ฑ ์ ๋ถ๋ฆฌ๋ฅผ ์ ์งํ๋ฉด์ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋ ๋ ์ด์ด๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
RSC๋ API ํค, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ํ ํฐ ๋ฐ ๋ฏผ๊ฐํ ๋น์ฆ๋์ค ๋ก์ง์ด ์๋ฒ์๋ง ๋จ์ ํด๋ผ์ด์ธํธ JavaScript์ ๋ ธ์ถ๋์ง ์์ผ๋ฏ๋ก ๋ณด์์ ํฌ๊ฒ ๊ฐํํฉ๋๋ค. ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ๋ฒ๋ค์ ๊ฒ์ฌํ์ฌ ๋น๊ณต๊ฐ ์๋ํฌ์ธํธ๋ ๋น๋ฐ์ ๋ฐ๊ฒฌํ ์ ์์ต๋๋ค. ์ ํฌ ์์ด์ ์๋ RSC๋ฅผ ์ฃผ์ ๋ณด์ ์๋จ์ผ๋ก ๊ฐ์ฃผํ์ฌ ํด๋ผ์ด์ธํธ ์ธก ์ ์ถ ์ํ ์์ด ์ปดํฌ๋ํธ์์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค.
Next.js์ RSC ์ํคํ ์ฒ๋ก ์ ํํ๋ ๊ฒ์ ์ฅ๊ธฐ์ ์ผ๋ก ํ๋ก์ ํธ์ ์ฑ๋ฅ, ๋ณด์ ๋ฐ ์ ์ง๋ณด์์ฑ์ ๋ํ ํฌ์์ ๋๋ค. ํ์ด์ง๊ฐ ๋ ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ , ๋ฒ๋ค์ด ๋ ๊ฐ๋ฒผ์ฐ๋ฉฐ, ๋ฐ์ดํฐ๊ฐ ๋ ์ ๋ณดํธ๋๊ณ , ์ฝ๋๊ฐ ๋ ์ฝ๊ฒ ์ ์ง๋ณด์๋ฉ๋๋ค. ์ ํฌ ์์ด์ ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฅ์์ ์ง์์ ์ธ ๊ฒฝ์ ์ฐ์๋ก ๋ณํํ๋ ๋ง์ถคํ RSC ์ํคํ ์ฒ๋ฅผ ์ค๊ณํ์ฌ ์ด ์ ๋ต์ ์ ํ์ ๊ธฐ์ ๋ค์๊ฒ ์ง์ํฉ๋๋ค.