ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CSR vs SSR, Next.js
    Frontend 2023. 6. 12. 01:42
    728x90

    CSR(Client Side Rendering)

    1. ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€ ์ ‘๊ทผ
    2. ์„œ๋ฒ„๊ฐ€ ์›น์ด ํ•„์š”๋กœ ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ์™€ ์Šคํƒ€์ผ์ด ํฌํ•จ๋œ ๊ธฐ๋ณธ html ๋งˆํฌ์—…๋งŒ ์ „์†ก
    3. ํด๋ผ์ด์–ธํŠธ๊ฐ€ html๊ณผ js ๋‹ค์šด ๋ฐ›์Œ
    4. ๋‹ค์šด ์™„๋ฃŒ๋œ js๊ฐ€ ์‹คํ–‰, ๋ฐ์ดํ„ฐ๋ฅผ ์œ„ํ•œ api ํ˜ธ์ถœ
    5. ์„œ๋ฒ„๊ฐ€ api๋กœ๋ถ€ํ„ฐ์˜ ์š”์ฒญ์— ์‘๋‹ต
    6. api๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ ํ›„ ํŽ˜์ด์ง€ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅ

     

    ์žฅ์ 

    1. ์ดˆ๊ธฐ ๋กœ๋”ฉ ์ดํ›„์— ํŽ˜์ด์ง€ ์ผ๋ถ€๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋Š” ๊ตฌ๋™ ์†๋„๊ฐ€ ๋น ๋ฆ„
    2. ์„œ๋ฒ„ ๋ถ€ํ•˜ ์ ์Œ

    ๋‹จ์ 

    1. ์ดˆ๊ธฐ ๋กœ๋”ฉ ์†๋„ ๋Š๋ฆผ
    2. SEO์— ๋ถˆ๋ฆฌ

     

    SEO(๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”)

    ๊ฒ€์ƒ‰์—”์ง„์ด ์›น์„ ํฌ๋กค๋งํ•˜๋ฉด์„œ ํŽ˜์ด์ง€์— ์ปจํ…์ธ  ์ƒ‰์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด csr์—์„œ๋Š” ๋นˆ html๋งŒ ์žˆ์–ด, ๊ฒ€์ƒ‰ ๋ด‡์ด ๋นˆ ํŽ˜์ด์ง€๋กœ ์ฐฉ๊ฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8" />
        <link rel="icon" href="/favicon.ico" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <meta name="theme-color" content="#000000" />
        <meta
          name="description"
          content="Web site created using create-react-app"
        />
        <title>React App</title>
        <script type="module" crossorigin src="/assets/index-000087cd.js"></script>
        <link rel="stylesheet" href="/assets/index-9f116458.css">
      </head>
      <body>
        <noscript>You need to enable JavaScript to run this app.</noscript>
        <div id="root"></div>
      </body>
    </html>

    ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ์—”์ง„์€ ๋‹ค๋ฅธ ๊ฒ€์ƒ‰ ์—”์ง„๊ณผ ๋‹ฌ๋ฆฌ ๊ฒ€์ƒ‰์—”์ง„์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ํƒ‘์žฌ๋˜์–ด ์žˆ์–ด์„œ ํŽ˜์ด์ง€๋ฅผ ํฌ๋กค๋งํ•ด ๊ฐˆ ๋•Œ๋„ ์žˆ์ง€๋งŒ ๋ชจ๋“  ํŽ˜์ด์ง€์— ๋Œ€ํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ด ์ฃผ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ์›น ์„œ๋น„์Šค์˜ ๊ฒ€์ƒ‰ ์—”์ง„ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง์„ ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

     

    SSR(Server Side Rendering)

    1. ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€ ์ ‘๊ทผ
    2. ์„œ๋ฒ„๋Š” ํŽ˜์ด์ง€๋ฅผ ๋ Œ๋”๋ง ํ•ด์„œ ๊ฒฐ๊ณผ๋กœ ์ƒ์„ฑํ•œ html ํŽ˜์ด์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ๋กœ ์ „์†ก
    3. html์€ ์ฆ‰์‹œ ๋ Œ๋”๋ง, ์‚ฌ์ดํŠธ ์ž์ฒด๋Š” ์กฐ์ž‘ ๋ถˆ๊ฐ€๋Šฅ
    4. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋ฐ›์Œ
    5. ๋‹ค์šด ๋ฐ›๋Š” ๋™์•ˆ ์‚ฌ์šฉ์ž๊ฐ€ ์ปจํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์กฐ์ž‘ ๋ถˆ๊ฐ€๋Šฅ, ์›น์€ ์‚ฌ์šฉ์ž ์กฐ์ž‘์„ ๊ธฐ์–ตํ•จ
    6. ๋ธŒ๋ผ์šฐ์ €๊ฐ€ js ํ”„๋ ˆ์ž„์›Œํฌ ์‹คํ–‰
    7. js๊นŒ์ง€ ์ปดํŒŒ์ผ ๋˜๊ณ  ๊ธฐ์–ตํ•˜๊ณ  ์žˆ๋˜ ์‚ฌ์šฉ์ž ์กฐ์ž‘์ด ์‹คํ–‰๋˜๊ณ  ์›น ํŽ˜์ด์ง€์™€ ์‚ฌ์šฉ์ž ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ€๋Šฅ

     

    ์žฅ์ 

    1. ์ดˆ๊ธฐ ๊ตฌ๋™ ์†๋„ ๋น ๋ฆ„
    2. SEO์— ์œ ๋ฆฌ

    ๋‹จ์ 

    1. ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ด ๋‚˜์จ
    2. ์„œ๋ฒ„ ๋ถ€ํ•˜ ์กด์žฌ
    3. ํ™”๋ฉด ๊นœ๋ฐ•์ž„ ์กด์žฌ

    ๋ Œ๋”๋ง ๋ฐฉ์‹ ์„ ํƒ ๊ธฐ์ค€

    SSR

    1. ์ƒ์œ„ ๋…ธ์ถœ์ด ํ•„์š”
    2. ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ๋™์ผํ•œ ๋‚ด์šฉ์„ ๋…ธ์ถœ
    3. ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ฌ๋ผ์ ธ์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘๊ธฐ ์–ด๋ ค์šด ํŽ˜์ด์ง€

    CSR

    1. ๊ฐœ์ธ์ •๋ณด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์„ฑ
    2. ๋ณด๋‹ค ๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•˜๊ธฐ๋ฅผ ์›ํ•จ
    3. ์ƒ์œ„๋…ธ์ถœ๋ณด๋‹ค ๊ณ ๊ฐ์˜ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ๊ฐ€ ์ค‘์š”

    SSR์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ Next.js

    Next.js๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซํŽ˜์ด์ง€๋Š” ๋ฐฑ์—”๋“œ ์„œ๋ฒ„์—์„œ ๋ Œ๋”๋งํ•˜์—ฌ ๋นˆ html์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฑ„์›Œ์ง„ html์„ ๋ฐ›์•„ ๊ฒ€์ƒ‰์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , ๊ทธ ๋‹ค์Œ ํŽ˜์ด์ง€๋ถ€ํ„ฐ๋Š” CSR๋ฐฉ์‹์„ ์ ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„๋งŒ ๊ฐฑ์‹ ํ•ด ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ๊ตฌํ˜„

    Next.js(version 12)์˜ getServerSideProps ์˜ˆ์•ฝ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    export async function getServerSideProps() {
      const userData = await (
        await fetch(`http://example.com/api/user`)
      ).json();
      return {
        props: {
          user: userData,
        },
      };
    }
    
    function IndexPage(props) {
        return <div>Welcome, {props.user.name}</div>;
    }
    
    export default IndexPage;
    1. getServerSideProps ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ต์ŠคํฌํŠธ
    2. getServerSideProps ํ•จ์ˆ˜๋Š” props๋ผ๋Š” ์†์„ฑ๊ฐ’์„ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
    3. IndexPageํ•จ์ˆ˜์—์„œ Props๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Œ

    next.js 13๋ฒ„์ „ ๋ถ€ํ„ฐ๋Š” App router๋ฅผ ์ด์šฉํ•˜๋ฉฐ getServerSideProps ๋“ฑ์˜ ๋ฐฉ์‹์€ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.(https://nextjs.org/docs/app/building-your-application/data-fetching#old-methods).


     

    REF

    https://miracleground.tistory.com/entry/SSR์„œ๋ฒ„์‚ฌ์ด๋“œ-๋ Œ๋”๋ง๊ณผ-CSRํด๋ผ์ด์–ธํŠธ-์‚ฌ์ด๋“œ-๋ Œ๋”๋ง

    https://proglish.tistory.com/216

    https://www.youtube.com/watch?v=YuqB8D6eCKE

    https://velog.io/@support/CSR-VS-SSR-Next.js

    ์‹ค์ „์—์„œ ๋ฐ”๋กœ ์“ฐ๋Š” Next.js

    728x90
Designed by Tistory.