-
Astro와 React Server Components(RSC) 는 서버와 클라이언트 코드 분리를 유사하게 구현함
- Astro에서는 Astro Component와 Client Island가 각자 기능적 역할을 분담함
- RSC는 동일 개념을 Server Component와 Client Component로 나누며
'use client'
지시어로 경계 설정함
- RSC는 Astro에 비해 인터랙티브 UI 구성 및 코드 공유 유연성이 높음
- 두 모델 모두 데이터가 서버에서 클라이언트로 단방향 흐름을 갖는 구조임
소개 및 기본 개념
- Astro는 Astro Component와 Client Island라는 두 가지 주요 컴포넌트 유형을 제공함
- Astro Component는
.astro
확장자를 가지며 서버 또는 빌드 타임에만 실행되고, 파일 시스템 접근, DB 조회, 내부 서비스 호출 같은 클라이언트에서 할 수 없는 작업이 가능함
- Client Island는 React, Vue 등을 위한 컴포넌트로, 브라우저 상에서 동작하며 사용자 인터랙션을 담당하는 부분임
- Astro Component 내부에서 Client Island를 렌더링할 수 있지만, Client Island에서 Astro Component를 호출하는 것은 불가능함
- 이 구조는 데이터가 항상 서버에서 클라이언트로만 흐른다는 단방향성을 보장함
코드 예시와 역할 분리
- 예시 코드에서
PostPreview.astro
가 서버에서 파일을 읽고 제목을 가져온 뒤, 해당 데이터를 Client Island에 전달함
- LikeButton은 React로 작성되어, 브라우저 로드 후 상태 변화 및 사용자 클릭 이벤트를 담당하게 됨
- Astro Component와 Client Island는 서로 다른 세계에서 동작하고, 데이터 전달도 Astro Component에서만 아래로 이루어짐
React Server Components(RSC)와의 비교
- RSC에서도 Astro와 유사하게 서버 컴포넌트(Server Component)와 클라이언트 컴포넌트(Client Component)로 구분함
- React Server Component에서는 JavaScript 함수로 서버 컴포넌트를 선언하고, 'use client' 지시어로 어디서 클라이언트 코드가 시작되는지 명확히 지정함
- RSC에서는 동일한 컴포넌트 파일이 서버, 클라이언트 역할 모두 가능한데, Astro처럼 파일 확장자나 별도의 분리 없이 필요에 따라
'use client'
선언만으로 경계 이동이 가능함
- 컴포넌트가 클라이언트 전용 기능(예: useState) 혹은 서버 전용 기능(DB 접근 등)을 사용하면, 잘못된 환경에서 사용할 때 빌드 오류가 발생하여 명확한 피드백을 얻음
Astro와 RSC의 시각적/구조적 차이
- Astro는
.astro
파일과 JS/TS 파일 구분으로 명확한 경계를 가짐
- RSC는 기본적으로 모든 것이 React이므로 코드 공유성과 유연성이 훨씬 뛰어남
- 예를 들어, 상태나 서버 기능을 사용하지 않는 중립 컴포넌트(Markdown 파서 등)는 양 쪽 어디서든 사용할 수 있음
- RSC는 가져오기(import) 경로에 따라 해당 컴포넌트가 어느 세계에서 동작할지 자동 결정됨
RSC 모델의 장점과 한계
- RSC의 이점은 코드 재사용과 역할 이동의 유연성에 있음
- 어떤 컴포넌트든 필요에 따라
'use client'
선언만으로 경계를 쉽게 이동 가능함
- Astro에서는 UI의 정적/동적 성격 변동 시 코드 변환이 번거로울 수 있는데, RSC는 이를 간단히 해결할 수 있음
- RSC의 단점은 학습 난이도가 높다는 점임
- 개발자가 현재 “어느 세계에 있는지” 계속 고민하게 되지만, 실수 시 빌드 오류로 빠른 피드백을 얻음
- Astro에서는 UI의 동적인 부분이 많아질수록 구조가 복잡해지는데, RSC는 React 트리 전체가 통합되어 있어 상태, 맥락(Context) 전달 등이 자연스럽게 이루어짐
HTML 중심인 Astro와 React 트리 중심인 RSC
- Astro의 결과물은 HTML로, 페이지 이동마다 전체가 새로고침되고 완전한 SPA 경험을 제공하지는 않음
- RSC의 결과물은 React 트리(처음에는 HTML, 내비게이션 시 JSON 등으로 전송)임
- 덕분에 SPA와 MPA의 장점을 결합할 수 있음
- 서버에서 직접 UI 일부만 새로 고쳐 반영하는 부분적 새로고침이 가능하여, 동적 데이터 수신과 클라이언트 상태 유지도 쉬움
고급 React 기능 지원
-
서버-클라이언트 혼합 트리 구조로, React의 앞선 기능(예:
<Suspense>
, 뷰 트랜지션 등)이 자연스럽게 통합 지원됨
- 클라이언트에서 declarative하게 핸들링한 로딩 상태, 폰트/이미지/자바스크립트/스타일 지연 등도 관리 가능함
- React의 모든 기능이 서버-클라이언트 경계 없이 엔드 투 엔드로 작동함
RSC와 Astro의 위상
- Astro는 완전한 프레임워크이며, RSC는 프레임워크의 빌딩 블록이나 표준에 가까움
- 공식적인 RSC 구현은 Next.js App Router와 Parcel RSC가 있음
결론 및 추천
- RSC의 개발자 경험(DX)은 아직은 거칠지만, 배워볼 가치가 있음
- Astro를 경험해보지 않았다면 추천하며, Astro는 RSC가 어려운 개발자에겐 더 부드러운 진입로를 제공할 것임
- 클라이언트 사이드 React만 써온 개발자에게도 Astro는 예상치 못한 문제 해결 경험을 줄 수 있음