[Next.js] Server Side Rendering

2022. 7. 4. 16:06·Next.js/이론
반응형

Next.js는 페이지에서 Server Side Rendering을 할 수 있게 지원해준다. 

API 데이터 혹은 서버로부터 정보를 가지고 올 때, 데이터를 가지고 오는 동안 Loading 화면을 띄운 적이 있을 것이다. 

 

하지만 Server Side Render 기능을 사용하면 프론트엔드 화면이 나오기 전에 미리 데이터를 불러와서 Loading 화면이 

필요없이 데이터를 나오게 할 수 있다. 

 

get server side props

import Seo from "../components/Head";

const Home = () => {
  return (
    <div>
      <Seo title="Home | Next" />
      <h1>Home</h1>
    </div>
  );
};

export default Home;

export async function getServerSideProps() {
  const { results } = await (
    await fetch("http://localhost:3000/api/movies")
  ).join();
  return {
    props: {
      results,
    },
  };
}

함수 명칭은 getServerSideProps 그대로 사용해야 하며, 다른 명칭으로 사용하면 제대로 기능을 적용할 수 없다. 

 

특이점으로 fetch 부분에 웹사이트 주소/api/movies로 되어있는 것을 확인할 수 있다. 

일반적이라면 주소부분은 제외하고 /api/movies만 넣을텐데, 서버에서 실행되는 기능이기 때문에 내부 주소가 아닌 

접근할 수 있는 외부 주소 전체를 넣어줘야한다. 

 

또, fetch에 사용된 기능이 지난번에 배운 rewrites와 연계된 방식인데, 서버에서 실행되므로, 브라우저의 network에는 

나오지 않기 때문에 원래 주소(https://api.themoivedb.org/...?api_key=${API_KEY}) 를 넣어줘도 문제없다. 

 

실행 단계를 예를들면 

1. _app.js에서 Component를 통해 컴포넌트를 화면에 출력한다.

<Component {...pageProps} />

2. 출력하는 컴포넌트에서 getServerSideProps가 있다면 화면을 출력하기 전에 실행해 실행 결과를 리턴한다.

export async function getServerSideProps() {
  const { results } = await (
    await fetch("http://localhost:3000/api/movies")
  ).join();
  return {
    props: {
      results,
    },
  };
}

3. 리턴된 결과물이 pageProps를 통해서 출력할 컴포넌트로 넘겨진다. 

<Component {...pageProps} />

4. 출력한 컴포넌트에서 results를 사용할 수 있다. 

import Seo from "../components/Head";

const Home = ({ results }) => {
  return (
    <div>
      <Seo title="Home | Next" />
      <h1>Home</h1>
    </div>
  );
};

export default Home;

export async function getServerSideProps() {
  const { results } = await (
    await fetch("http://localhost:3000/api/movies")
  ).join();
  return {
    props: {
      results,
    },
  };
}

 

이게 가능한 이유는 Next.js가 프론트엔드, 클라이언트만 존재하는 것이 아닌, 서버도 같이 실행되기 때문에 

SSR 기능을 사용할 수 있는 것이다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'Next.js > 이론' 카테고리의 다른 글

[Next.js] 404 페이지  (3) 2022.07.05
[Next.js] Dynamic Routes  (1) 2022.07.05
[Next.js] Redirect & Rewrite  (1) 2022.07.03
[Next.js] Pattern & Head  (1) 2022.07.02
[Next.js] Custom App  (1) 2022.07.01
'Next.js/이론' 카테고리의 다른 글
  • [Next.js] 404 페이지
  • [Next.js] Dynamic Routes
  • [Next.js] Redirect & Rewrite
  • [Next.js] Pattern & Head
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    redux
    ReactNative
    다이소
    식물
    Node.js
    react
    덤프
    바질
    CCNA
    next.js
    자바스크립트
    네트워크
    webpack
    영어회화
    typescript
    리얼클래스
    javascript
    네이버 부스트캠프
    Docker
    Babel
    타일러영어
    프로그래머스
    알고리즘
    리액트
    영어독학
    ChatGPT
    리얼학습일기
    타입스크립트
    CSS
    바질 키우기
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[Next.js] Server Side Rendering
상단으로

티스토리툴바