[study] 서버 사이드 렌더링 vs 클라이언트 사이드 렌더링 [웹 애플리케이션 렌더링 방식(SSR, CSR)]

2024. 4. 5. 16:57·◈ Study/기초튼튼 개발지식🥔
728x90


- 서버 사이드 렌더링 vs 클라이언트 사이드 렌더링

서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR)은 웹 개발에 있어 주요한 접근 방식이며, 각각의 방법은 웹 애플리케이션을 구축하고 렌더링하는 방식에 있어 서로 다른 접근을 제공한다.

1. 서버 사이드 렌더링(SSR)

웹 애플리케이션의 초기 요청 시 서버 측에서 HTML을 생성하여 클라이언트에 전달하는 방식이다. 이후에는 클라이언트 측에서 JS 파일을 다운로드하고 초기 렌더링을 받은 HTML을 해당 스크립트로 인터랙티브하게 만든다.

SEO(검색 엔진 최적화)에 유리하며, 초기 로딩 시간이 짧은 것이 특징이다.

- SSR 장점

  • SEO에 유리하며, 초기 로딩 시간이 짧음
  • 일부 장치에서는 클라이언트 사이드 렌더링보다 더 나은 성능을 보임

- SSR 단점

  • 서버 부하가 증가할 수 있음
  • 초기 로딩 시간 이후에는 클라이언트 측에서 추가적인 자바스크립트 로딩이 필요함

- SSR 특징

1) 서버 사이드 언어
Node.js, Python(Django, Flask), Java(Spring), Ruby(Rails) 등과 같은 언어를 주로 사용

2) 템플릿 엔진
서버 사이드 렌더링에서는 서버에서 HTML을 동적으로 생성해야 하므로, 템플릿 엔진이 필요. 대표적인 템플릿 엔진으로는 Pug(Jade), EJS, Handlebars 등이 있음

3) 서버 프레임워크
각 언어에 따라 해당 언어를 위한 서버 프레임워크가 사용. Node.js의 경우 Express.js가 널리 사용되며, Python의 경우 Django나 Flask, Java의 경우 Spring 등이 있음

2. 클라이언트 사이드 렌더링(CSR)

모든 렌더링이 클라이언트 측에서 이루어지는 방식이다. 클라이언트 사이드 렌더링은 초기에는 서버로부터 빈 HTML 파일을 받아오고, 이후에 자바스크립트를 사용하여 클라이언트 측에서 UI를 동적으로 렌더링한다.

대화형 웹 애플리케이션에 적합하며, 사용자 경험과 성능을 향상시킬 수 있다.

- CSR 장점

  • 대화형 UI 및 더 나은 사용자 경험을 제공할 수 있음
  • 서버 부하를 줄일 수 있음

- CSR 단점

  • 초기 로딩 시간이 길 수 있음
  • SEO에 불리할 수 있음

- CSR 특징

1) 클라이언트 사이드 언어
자바스크립트를 주로 사용하며, HTML, CSS와 함께 웹 페이지를 동적으로 렌더링

2) 프론트엔드 프레임워크 또는 라이브러리
React.js, Vue.js, Angular와 같은 프론트엔드 프레임워크 또는 라이브러리를 사용
(이들은 클라이언트 측에서 UI를 구축하고 관리하는 데 도움이 됨)

3) 클라이언트 사이드 라우팅
클라이언트 사이드 렌더링에서는 클라이언트 측에서 라우팅을 처리해야 함
(이를 위해 React Router, Vue Router와 같은 클라이언트 사이드 라우팅 라이브러리를 사용)

4) Ajax 및 비동기 통신 라이브러리
필요한 데이터를 비동기적으로 가져오기 위해 jQuery, Axios, Fetch API 등이 사용됨

3. SSR vs CSR

서버 사이드 렌더링(SSR)과 클라이언트 사이드 렌더링(CSR)은 각각의 장단점을 가지고 있으며, 웹 애플리케이션의 요구 사항과 목표에 따라 선택되어야 한다.

SEO를 중시하고 초기 로딩 속도를 최적화하려는 경우 SSR을 고려해보고, 대화형 웹 애플리케이션을 구축하고자 하는 경우 CSR을 고려해보는 것이 좋다. 종단 사용자의 요구와 웹 애플리케이션의 목적에 따라 적절한 렌더링 방식을 선택하여 최상의 결과를 얻을 수 있다.

- 어떤 상황에 어떤 방식을 선택해야 할까?

- 서버 사이드 렌더링(SSR)

  • 검색 엔진 최적화가 중요한 경우
  • 초기 로딩 속도가 매우 중요한 경우

- 클라이언트 사이드 렌더링(CSR)

  • 대화형 웹 애플리케이션을 구축하는 경우
  • 사용자 경험을 강조하는 경우

728x90
'◈ Study/기초튼튼 개발지식🥔' 카테고리의 다른 글
  • [study] JSESSIONID란? [Java EE 기반 웹 애플리케이션에서 세션을 식별하는 고유한 ID]
  • [study] Apache, GPL, MIT 오픈소스 라이선스 비교 [개발자를 위한 오픈 소스 라이선스 가이드]
  • [study] 개발에서 반영과 배포의 차이 [소프트웨어 개발의 핵심 단계: 반영과 배포의 이해]
  • [study] .htm과 .html의 차이 [MS-DOS 및 Windows 운영체제의 파일 시스템의 8.3 형식]
예르미(yermi)
예르미(yermi)
끊임없이 제 자신을 계발하는 개발자입니다👨🏻‍💻
  • 예르미(yermi)
    예르미의 코딩노트
    예르미(yermi)
  • 전체
    오늘
    어제
    • 분류 전체보기 (937)
      • ◎ Java (133)
        • Java☕ (93)
        • JSP📋 (26)
        • Applet🧳 (6)
        • Interview👨🏻‍🏫 (8)
      • ◎ JavaScript (48)
        • JavaScript🦎 (25)
        • jQuery🌊 (8)
        • React🌐 (2)
        • Vue.js🔰 (6)
        • Node.js🫒 (3)
        • Google App Script🐑 (4)
      • ◎ HTML5+CSS3 (17)
        • HTML5📝 (8)
        • CSS3🎨 (9)
      • ──────────── (0)
      • ▣ Framework (67)
        • Spring🍃 (36)
        • Spring Boot🍀 (12)
        • Bootstrap💜 (3)
        • Selenium🌕 (6)
        • MyBatis🐣 (10)
      • ▣ Tools (47)
        • API🎯 (18)
        • Library🎲 (15)
        • JitPack🚀 (3)
        • Jenkins👨🏻 (7)
        • Thymeleaf🌿 (4)
      • ▣ Server (32)
        • Apache Tomcat🐱 (14)
        • Apache HTTP Server🛡️ (1)
        • Nginx🧶 (7)
        • OracleXE💿 (4)
        • VisualSVN📡 (4)
      • ▣ OS : 운영체제 (18)
        • cmd : 명령프롬프트💻 (10)
        • Linux🐧 (8)
      • ▣ SQL : Database (56)
        • Oracle SQL🏮 (26)
        • PL SQL💾 (9)
        • MySQL🐬 (6)
        • MariaDB🦦 (6)
        • H2 Database🔠 (3)
        • SQL 실전문제🐌 (6)
      • ────────── (0)
      • ◈ Human Project (86)
        • Mini : Library Service📚 (15)
        • 화면 설계 [HTML]🐯 (10)
        • 서버 프로그램 구현🦁 (15)
        • Team : 여수어때🛫 (19)
        • Custom : Student🏫 (9)
        • Custom : Board📖 (18)
      • ◈ Yermi Project (40)
        • 조사모아(Josa-moa)📬 (5)
        • Riddle-Game🧩 (6)
        • 맛있을 지도🍚 (2)
        • 어디 가! 박대리!🙋🏻‍♂️ (5)
        • 조크베어🐻‍❄️ (4)
        • Looks Like Thirty🦉 (2)
        • Toy Project💎 (12)
        • 오픈소스 파헤치기🪐 (4)
      • ◈ Refactoring (15)
        • Mini : Library Service📚 (8)
        • 서버 프로그램 구현🦁 (1)
        • Team : 여수어때🛫 (0)
        • 쿼리 튜닝일지🔧 (6)
      • ◈ Coding Test (89)
        • 백준(BOJ)👨🏻‍💻 (70)
        • 프로그래머스😎 (2)
        • 코드트리🌳 (7)
        • 알고리즘(Algorithm)🎡 (10)
      • ◈ Study (102)
        • 기초튼튼 개발지식🥔 (25)
        • HTTP 웹 지식💡 (4)
        • 클린코드(Clean Code)🩺 (1)
        • 디자인패턴(GoF)🥞 (12)
        • 다이어그램(Diagram)📈 (4)
        • 파이썬(Python)🐍 (16)
        • 에러노트(Error Note)🧱 (34)
        • 웹 보안(Web Security)🔐 (6)
      • ◈ 공부모임 (39)
        • 혼공학습단⏰ (18)
        • 코드트리 챌린지👊🏻 (2)
        • 개발도서 100독👟 (8)
        • 나는 리뷰어다🌾 (11)
      • ◈ 자격증 공부 (37)
        • 정보처리기사🔱 (16)
        • 정보처리산업기사🔅 (9)
        • 컴퓨터활용능력 1급📼 (12)
      • ─────────── (0)
      • ◐ 기타 (113)
        • 알아두면 좋은 팁(tip)✨ (46)
        • 개발자의 일상🎈 (44)
        • 개발도서 서평🔍 (10)
        • 개발관련 세미나🎤 (2)
        • 블로그 꾸미기🎀 (9)
        • 사도신경 프로젝트🎚️ (2)
  • 인기 글

  • 최근 댓글

  • 태그

    html
    javascript
    Error Note
    CSS
    꿀팁
    Database
    BOJ
    일상
    Java
    자바스크립트
    코딩
    jsp
    spring
    프로그래밍
    백준 티어
    Oracle
    SQL
    코딩 테스트
    백준
    Project
  • 250x250
  • hELLO· Designed By정상우.v4.10.3
예르미(yermi)
[study] 서버 사이드 렌더링 vs 클라이언트 사이드 렌더링 [웹 애플리케이션 렌더링 방식(SSR, CSR)]
상단으로

티스토리툴바