리액트 서버 컴포넌트는 리액트 18에서 공개된 기능이다.
간단하게 말하면 서버 컴포넌트란 서버에서 렌더링되는 컴포넌트이다.
서버에서 렌더링 된 컴포넌트는 렌더링이 된 후에 클라이언트로 전달이 되고 사용자에게 보여지는 것이다.
결론부터 말하자면 서버 컴포넌트는 서버 사이드 렌더링과는 다른 개념이다.
서버 사이드 렌더링이란 서버에서 리액트 컴포넌트를 HTML로 렌더링한 후 클라이언트에 전달한 방식이다.
클라이언트느 초기 로딩 시 서버에서 완성된 HTML을 받고, 이후에 리액트가 이를 하이드레이션하여 클라이언트 상호작용을 활성화한다,
서버 사이드 렌더링의 흐름은 다음과 같다.
리액트 서버 컴포넌트는 일부 리액트 컴포넌트를 서버에서 렌더링하고, 그 결과를 클라이언트로 리액트 요소 트리 자체로 전송한다.
하이드레이션이 필요 없으며 클라이언트와 서버 컴포넌트를 조합하여 최적화된 렌더링이 가능하게 한다,
리액트 서버 컴포넌트의 흐름은 다음과 같다.
서버 사이드 렌더링에서 백엔드 리소스에 접근을 하려면 최상위 페이지에서 getServerProps()와 같은 함수로 접근을 해야 하는 등, 세부적인 컴포넌트 단위에서는 백엔드 리소스에 접근하기가 힘들지만, 서버 컴포넌트를 사용하면 페이지 레벨에 상관없이 어떤, 어느 위치의 컴포넌트에서든 백엔드 리소스에 접근이 가능하다.
또, 서버 사이드 렌더링은 상태를 저장하고 리페칭을 하면 HTML을 다시 받아오기 때문에 상태의 저장이 불가능하지만, 서버 컴포넌트를 사용하면 리페칭을 하면 RSG payload라는 특별한 방법으로 다시 받아오기 때문에 상태의 저장이 가능하다.
서버 컴포넌트는 서버 사이드 렌더링의 대체제가 아니다.
대체 관계라기보다는 보완 관계라고 보면 될 것 같다.
예를 들어, 서버 사이드 렌더링으로 초기 렌더링 속도를 빠르게 만들어 주고, 서버 컴포넌트를 통해 제로 번들링을 구현하면 더욱 빠른 페이지를 제공해줄 수 있을 것이다.