
웹 애플리케이션의 렌더링 방식은 사용자 경험과 성능에 직접적인 영향을 미칩니다. 서버 사이드 렌더링(SSR)은 전통적인 웹 개발 방식에서 시작하여 현대 웹 개발에서도 중요한 위치를 차지하고 있습니다. 본 글에서는 SSR의 개념, 장단점, 그리고 현대적인 구현 방법에 대해 설명하겠습니다.
Next.js는 두 가지 라우팅 방식을 제공합니다:
// pages/index.js
export async function getServerSideProps() {
const data = await fetchData();
return { props: { data } };
}
export default function Home({ data }) {
return <div>{data.title}</div>;
}
// app/page.js
async function getData() {
const res = await fetch('https://api.example.com/data');
return res.json();
}
export default async function Page() {
const data = await getData();
return <div>{data.title}</div>;
}
App Router의 핵심 기능인 React Server Components는 다음과 같은 특징을 가집니다:
// app/components/ServerComponent.js
export default function ServerComponent() {
// 서버에서 실행
const data = await fetchData();
return <div>{data}</div>;
}
// app/components/ClientComponent.js
'use client'; // 클라이언트 컴포넌트 선언
export default function ClientComponent() {
// 클라이언트에서 실행
const [state, setState] = useState();
return <button onClick={() => setState('clicked')}>Click me</button>;
}
App Router는 Streaming과 Suspense를 통해 더 나은 사용자 경험을 제공합니다:
// app/page.js
import { Suspense } from 'react';
async function SlowComponent() {
await new Promise(resolve => setTimeout(resolve, 2000));
return <div>Slow Content</div>;
}
export default function Page() {
return (
<div>
<h1>Fast Content</h1>
<Suspense fallback={<div>Loading...</div>}>
<SlowComponent />
</Suspense>
</div>
);
}
SSR은 현대 웹 개발에서 여전히 중요한 렌더링 전략입니다. 특히 SEO와 초기 로딩 속도가 중요한 애플리케이션에서는 필수적인 선택이 될 수 있습니다. Next.js와 같은 현대 프레임워크를 활용하면 SSR의 단점을 최소화하면서도 장점을 극대화할 수 있습니다.
인사이트: SSR과 CSR은 상호 배타적인 선택이 아닙니다. 애플리케이션의 요구사항에 따라 두 방식을 적절히 조합하는 하이브리드 접근 방식이 최선의 해결책이 될 수 있습니다.