서버 컴포넌트는 리액트 18 버전에서 도입된 새로운 기능입니다. 기본적으로 클라이언트에서 실행되는 기존의 리액트 컴포넌트와 다르게 서버에서만 렌더링 되는 컴포넌트를 말합니다. 서버에서만 실행되기 때문에 브라우저 쪽 번들 크기를 줄이고, 초기 로딩 속도를 개선하는 데 큰 장점이 있습니다.
예를 들어, 서버 컴포넌트는 데이터베이스나 API에서 데이터를 가져오는 작업을 서버에서 처리하고, 그 결과를 클라이언트로 보낼 수 있어서 클라이언트와 서버 간의 데이터 통신을 줄일 수 있습니다. 그래서 클라이언트는 필요한 HTML과 JSON만 전달받아 렌더링하면 됩니다.
또한, 서버 컴포넌트는 보안 측면에서도 강점이 있습니다. 데이터베이스 연결 정보나 API 키 같은 민감한 정보를 클라이언트로 보내지 않아도 되는 구조라 안전하게 데이터를 다룰 수 있습니다.
리액트에서는 서버 컴포넌트를 클라이언트 컴포넌트와 함께 사용할 수 있도록 설계했습니다. 클라이언트 컴포넌트는 인터랙션이 필요한 UI를 담당하고, 서버 컴포넌트는 데이터 중심의 UI를 담당하는 식으로 역할을 분리할 수 있습니다.
결론적으로, 서버 컴포넌트는 성능 최적화와 보안 개선, 그리고 개발자 경험 측면에서 많은 이점을 가져다 줄 수 있는 기능입니다.
서버 컴포넌트는 이름 그대로 서버에서 실행되기 때문에, 서버가 반드시 필요합니다. 따라서 서버가 다운되거나 응답 시간이 느려지면 클라이언트에서도 영향을 받게 됩니다. 특히, 정적 사이트나 서버리스 환경에서 작업하려는 경우에는 사용할 수 없거나 제약이 있을 수 있습니다.
서버 컴포넌트는 클라이언트 컴포넌트와 결합해서 사용해야 하는데, 이 과정에서 복잡한 사용자 인터랙션(예를 들면 실시간 업데이트, 드래그 앤 드롭 등)을 처리하기 어렵습니다. 서버 컴포넌트는 주로 정적인 데이터나 렌더링에 적합하기 때문에, 클라이언트 쪽의 인터랙션이 필요한 경우에는 한계가 있을 수 있습니다.