CSR(Client-Side Rendering)이란?
CSR은 클라이언트(사용자의 브라우저)에서 웹페이지를 렌더링하는 방식입니다. 웹사이트에 처음 접속하면 빈 HTML 파일과 JavaScript 파일을 다운로드한 후, JavaScript가 브라우저에서 실행되면서 콘텐츠를 화면에 그리게 됩니다. 대표적으로 React나 Vue와 같은 프론트엔드 프레임워크들이 CSR 방식을 사용합니다.
- 작동 방식: 서버에서 기본 HTML 파일과 필요한 JavaScript를 보내고, 클라이언트에서 JavaScript가 실행되면서 데이터를 받아 페이지를 구성합니다.
- 예시: SPA(Single Page Application) 구조의 웹앱이 대표적인 CSR 방식입니다.
CSR의 장점
- 빠른 상호작용: 페이지를 처음 로드한 이후에는 브라우저 내에서 페이지 간 전환이 일어나기 때문에 사용자 경험이 빠르고 매끄럽습니다.
- 서버 부하 감소: 대부분의 렌더링 작업이 클라이언트에서 이루어지기 때문에 서버에 대한 부하가 줄어듭니다.
CSR의 단점
- SEO 최적화 어려움: 초기에는 빈 HTML만 제공되기 때문에 검색 엔진이 페이지를 제대로 크롤링하기 어려워 SEO에 불리합니다.
- 초기 로딩 시간 증가: JavaScript 파일을 다운로드하고 데이터를 가져와 렌더링해야 하므로 초기 로딩 속도가 느릴 수 있습니다.
SSR(Server-Side Rendering)이란?
SSR은 서버에서 웹 페이지를 렌더링한 후, 완성된 HTML을 클라이언트에게 보내주는 방식입니다. 사용자가 웹사이트에 접속하면 서버에서 콘텐츠를 포함한 HTML을 생성해 브라우저로 전달하므로, 사용자는 즉시 콘텐츠를 확인할 수 있습니다. 대표적으로 Next.js가 SSR을 지원하는 프레임워크입니다.
- 작동 방식: 서버에서 HTML을 생성해 사용자에게 전달하고, 브라우저는 이 HTML을 받아 즉시 렌더링합니다.
- 예시: 전통적인 다중 페이지 애플리케이션(MPA)이나, SSR을 지원하는 Next.js 같은 React 프레임워크가 있습니다.
SSR의 장점
- SEO 친화적: 서버에서 생성된 HTML에 모든 콘텐츠가 포함되어 있어 검색 엔진이 페이지를 쉽게 크롤링할 수 있습니다.
- 빠른 초기 렌더링: 서버에서 HTML을 완성하여 보내므로 사용자는 더 빠르게 콘텐츠를 볼 수 있습니다.
SSR의 단점
- 서버 부하 증가: 모든 요청마다 서버가 HTML을 생성해야 하므로 트래픽이 많을 경우 서버에 큰 부하가 걸릴 수 있습니다.
- 상호작용 지연: JavaScript가 로드되기 전까지는 단순한 HTML만 보여주기 때문에 초기 상호작용이 지연될 수 있습니다.
CSR과 SSR의 비교
| 특징 | CSR(Client-Side Rendering) | SSR(Server-Side Rendering) |
|---|---|---|
| 렌더링 위치 | 클라이언트(브라우저) | 서버 |
| 초기 로딩 속도 | 상대적으로 느림 | 빠름 |
| SEO 적합성 | 낮음 | 높음 |
| 페이지 전환 속도 | 빠름 | 느릴 수 있음 |
| 사용 예 | SPA(React, Vue) | MPA(다중 페이지), Next.js |
CSR과 SSR의 혼합: 하이브리드 렌더링
최근에는 SSR과 CSR을 혼합한 하이브리드 렌더링 방식도 많이 사용됩니다. 예를 들어, Next.js는 초기 페이지 로딩 시에는 서버에서 렌더링하고, 이후에는 클라이언트에서 필요한 부분을 동적으로 렌더링하는 방식으로 초기 속도, SEO, 상호작용성을 모두 최적화할 수 있습니다.
언제 CSR, SSR을 선택할까?
- SEO가 중요한 경우: 블로그나 전자상거래 사이트처럼 검색 엔진 노출이 중요한 경우 SSR이 유리합니다.
- 복잡한 사용자 인터페이스: 대시보드나 관리 도구처럼 빠르고 상호작용이 많은 페이지는 CSR이 더 적합합니다.
- 혼합이 필요한 경우: SEO와 사용자 상호작용 모두 중요한 경우에는 하이브리드 렌더링 방식을 고려할 수 있습니다.
CSR과 SSR은 각각 장단점이 있으므로, 프로젝트의 특성과 필요에 맞게 선택하는 것이 중요합니다. 웹사이트의 성능과 SEO 최적화, 사용자 경험을 향상시키기 위해 이 두 가지 렌더링 방식의 특성을 잘 이해하고 사용하는 것이 좋습니다.
'도구 및 기타 > 개발상식' 카테고리의 다른 글
| 쿠키(Cookie), 세션(Session), 그리고 로컬 스토리지(Local Storage) (2) | 2024.11.13 |
|---|---|
| DNS (Domain Name System) (0) | 2024.11.12 |
| 지연 로딩 ( Lazy Loading ) (3) | 2024.11.11 |
| 트랜잭션 (Transaction) (1) | 2024.11.07 |
| @Controller와 @RestController (0) | 2023.07.21 |