본문으로 건너뛰기

SSR과 Server Component

SSRServer Component는 둘 다 서버라는 단어가 들어가서 헷갈리기 쉽지만, 서로 다른 기준의 개념입니다.

  • SSR → HTML을 언제 생성하는가?
  • Server Component → React 컴포넌트를 어디서 실행하는가?

이 둘을 구분하는 것이 핵심입니다.

핵심 내용

SSR

SSR(Server-Side Rendering)은 사용자가 요청했을 때 서버에서 HTML을 생성하는 방식입니다.

사용자 요청

서버에서 데이터 조회

React 렌더링

HTML 생성

브라우저 전달

예를 들어 /profile을 요청하면 서버에서 사용자 정보를 가져온 뒤 다음과 같은 HTML을 만들어 보냅니다.

<h1>김서로</h1>
<p>Frontend Developer</p>

즉 SSR에서 중요한 것은 **"HTML을 언제 만드는가"**입니다.

요청할 때마다 HTML을 새로 만든다 → SSR


Server Component

Server Component는 React 컴포넌트를 서버에서 실행하는 방식입니다.

async function Profile() {
const user = await getUser();

return <h1>{user.name}</h1>;
}

이 컴포넌트는 서버에서 실행되므로 서버의 DB나 API 등에 접근할 수 있습니다.

중요한 점은 Server Component가 곧 HTML이라는 것은 아닙니다.

서버에서 컴포넌트를 실행하면 먼저 React가 UI 결과를 계산합니다.

Server Component 실행

React 결과 생성

필요하면 HTML 생성

즉,

컴포넌트 실행HTML 생성은 별개의 과정입니다.


가장 헷갈리는 부분

"서버에서 컴포넌트를 실행하면 HTML이 만들어지는 것 아닌가?"

최종적으로 HTML이 만들어질 수 있지만, 둘은 같은 개념이 아닙니다.

예를 들어:

function Greeting() {
return <h1>Hello</h1>;
}

서버에서 Greeting()을 실행하면 React는 먼저

<h1>Hello</h1>

라는 UI 결과를 만듭니다.

그 다음 이 결과를 HTML로 만들어 브라우저에 보낼 수 있습니다.

컴포넌트 실행

React 결과

HTML 생성

따라서 **Server Component는 "컴포넌트를 서버에서 실행하는 것"이고, SSR은 "HTML을 서버에서 생성하는 것"**입니다.


Server Component와 SSR은 함께 사용할 수 있습니다

둘은 서로 대체하는 관계가 아닙니다.

예를 들어 Next.js에서는:

사용자 요청

Server Component 실행

데이터 조회

React 결과 생성

초기 HTML 생성

브라우저

처럼 동작할 수 있습니다.

즉,

Server Component
→ 어디서 실행할까?

SSR
→ HTML을 언제 만들까?

라는 서로 다른 질문에 답합니다.

그래서 Server Component + SSR도 가능합니다.

또한 Server Component는 SSG나 ISR과도 함께 사용할 수 있습니다.


Server Component와 Client Component

Server Component와 비교하면 Client Component의 차이도 명확합니다.

Server Component

서버에서 실행

DB 조회, 서버 데이터 접근 등에 적합합니다.

Client Component

'use client';

브라우저에서 실행되며 useState, 이벤트 핸들러, 브라우저 API처럼 사용자와 상호작용하는 기능을 담당합니다.

예를 들어:

상품 페이지

├── 상품 정보
│ └── Server Component

└── 장바구니 버튼
└── Client Component

처럼 하나의 페이지에서 둘을 함께 사용할 수 있습니다.


Hydration은 어디에 등장하는가?

SSR로 HTML을 먼저 받았다고 해서 바로 React의 상호작용이 가능한 것은 아닙니다.

서버

HTML 생성

브라우저 화면 표시

JavaScript 로드

Hydration

이벤트 / 상태 연결

Hydration서버에서 만들어진 HTML에 클라이언트 React를 연결하는 과정입니다.

따라서:

  • SSR → HTML을 만들어줌
  • Hydration → 그 HTML에 React의 동작을 연결함

이라고 이해하면 됩니다.

Server Component 자체는 브라우저에서 다시 실행되는 것이 아니므로 Server Component 자체를 Hydration하는 것은 아닙니다.


헷갈리기 쉬운 점

Server Component = SSR인가요?

아닙니다.

Server Component → 실행 위치
SSR → HTML 생성 시점

입니다.

Client Component = CSR인가요?

이것도 아닙니다.

Client Component → 브라우저에서 실행되는 컴포넌트
CSR → 브라우저에서 콘텐츠를 렌더링하는 방식

서로 다른 개념입니다.


실무에서 볼 점

먼저 컴포넌트를 어디에서 실행할지 결정합니다.

DB / 서버 데이터
→ Server Component

상태 / 이벤트 / 브라우저 API
→ Client Component

그다음 HTML을 언제 생성할지 결정합니다.

거의 변하지 않음
→ SSG

주기적으로 변경됨
→ ISR

요청마다 최신 데이터 필요
→ SSR

예상 질문

SSR과 Server Component를 한 문장으로 구분하면?

SSR은 "HTML을 언제 서버에서 생성하는가"이고, Server Component는 "React 컴포넌트를 어디에서 실행하는가"입니다.

왜 Server Component와 SSR을 헷갈리면 안 되나요?

Server Component는 서버에서 실행되어 React 결과를 만드는 개념이고, SSR은 그 결과를 바탕으로 HTML을 요청 시점에 생성하는 렌더링 전략이기 때문입니다.


한 번에 정리

컴포넌트 실행 위치
├── Server Component → 서버
└── Client Component → 브라우저

HTML 생성 시점
├── SSG → 빌드 시
├── ISR → 재생성 시
└── SSR → 요청 시

가장 중요한 문장은 이것입니다.

Server Component는 "어디서 실행하는가", SSR은 "언제 HTML을 만드는가"를 의미한다.