window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() NextJS의 데이터 가져오기 전략 - The Codest
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2021-04-09
소프트웨어 개발

NextJS의 데이터 가져오기 전략

The Codest

파웰 리브친스키

Software Engineer

최근 React 애플리케이션을 구축하는 방법으로 NextJS가 점점 더 인기를 얻고 있습니다. 물론 그 주요 원인은 NextJS가 여러 가지 데이터 가져오기 전략을 제공한다는 사실입니다.

그리고 이것들이 있습니다:

  • 클라이언트 측 렌더링: CSR,
  • 서버 측 렌더링: SSR,
  • 정적 사이트 렌더링: SSG,
  • 점진적 정적 재생: ISR.

NextJS는 일반 React 앱과 달리 사전 렌더링이라는 기능을 제공합니다. 즉, 초기 로드 중에 미리 렌더링된 HTML이 표시됩니다. 기존 React 애플리케이션에서는 전체 앱이 로드되고 클라이언트 측에서 렌더링됩니다. 그런 다음 JS 코드 가 로드되면 애플리케이션이 대화형 애플리케이션이 됩니다.

정적 생성

SSG에서는 빌드 시 HTML이 생성되어 각 요청에 재사용됩니다. 프로덕션 빌드가 생성된 후에는 모든 요청이 정적으로 생성된 HTML 파일을 재사용하게 됩니다.

또한 정적 생성에는 데이터가 있는 경우와 없는 경우의 두 가지 유형이 있습니다.

첫 번째 경우, 프로미스를 해결하여 데이터를 가져온 후 HTML이 생성됩니다. 이 경우 getStaticProps 데이터 가져오기 메서드를 사용할 수 있지만 Next.js 9.3 이상을 사용하는 경우에만 가능합니다. 그렇지 않은 경우 이전 getInitialProps 메서드는 더 이상 권장되지 않으며 더 이상 사용되지 않으므로 업그레이드를 고려하세요. 또한 이 메서드는 모든 클라이언트 측 탐색에서 호출되므로 모든 요청에서 데이터를 가져오지 않으려는 경우 효율적이지 않습니다.

내보내기 비동기 함수 getStaticProps() {{
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: { posts },
  };
} 

정말 멋진 것은 새로 출시된 ISR(증분 정적 재생성)이라는 기능으로, SSG와 SSR 사이에 있는 기능입니다. 이 기능을 사용하면 (재검증이라는 특정 키를 사용하여) 페이지를 점진적으로 재생성할 수 있습니다. 즉, 이 키를 사용하면 서버에서 가져온 데이터를 업데이트할 때마다 앱을 다시 빌드할 필요가 없습니다. 재검증 기간(초)과 함께 재검증 키를 추가하기만 하면 됩니다.

내보내기 비동기 함수 getStaticProps() {{
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts,
    },
    재검증: 30,
  };
}

즉, 해당 기간 이후에 요청이 들어오면 서버에서 데이터를 다시 가져옵니다.

또 다른 상황은 동적 페이지를 사용하는데 경로가 일부 외부 데이터에 따라 달라지는 경우입니다. 이 경우 어떤 동적 경로를 미리 로드해야 하는지 알려주는 getStaticPaths 메서드를 사용할 수 있습니다:

export async const getStaticProps = ({ params }) => {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();
  반환 {
    props: { post },
  };
}
내보내기 비동기 함수 getStaticPaths() {{
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  const paths = posts.map(({ id }) => ({ params: { id: `${id}` } }));
  반환 {
    경로
    fallback: false,
  };
}

어떤 동적 경로가 생성되었는지 확인할 수 있는 좋은 방법이 있습니다. 다음 빌드 및 다음 내보내기를 실행하면 새로 생성된 아웃 디렉터리에 앱의 정적 버전이 있습니다.

이제 사전 빌드 경로를 제한해 보겠습니다:

내보내기 비동기 함수 getStaticPaths() {
  반환 {
    경로: [{ params: { id: "1" } }, { params: { id: "2" } }],
    fallback: false,
  };
}

다음 내보내기를 실행하면 두 경우(경로 수가 제한된 경우와 그렇지 않은 경우) 모두 내 앱아웃포스트에서 발견되는 글의 수가 달라지는 것을 확인할 수 있습니다.

다음_내보내기

이제 중요하고 필수적인 폴백 매개변수에 대해 자세히 살펴보겠습니다. 이 매개변수는 빌드 시 페이지가 미리 렌더링되지 않은 경우 수행할 작업을 알려줍니다. true로 설정하면 getStaticProps가 실행되어 해당 페이지를 생성합니다. false이면 특정 경로를 로드하려고 시도한 후 404가 반환됩니다. 또 다른 한 가지: getStaticPaths에서 활성화된 폴백이 있는 페이지는 내보낼 수 없습니다.

아래에서 두 경우 모두 동일한 동적 페이지를 로드하려고 시도한 결과를 확인할 수 있습니다:

첫 번째 경우(경로 제한 없음)

먼저

두 번째 경우(경로가 제한되고 폴백이 false로 설정된 경우)

second<em>fallback</em>false

두 번째 경우(경로가 제한되고 폴백이 true로 설정된 경우)

두 번째<em>폴백</em>참

서버 측 렌더링

SSG와의 주요 차이점은 요청할 때마다 새로운 HTML이 생성된다는 점입니다. 주로 외부 데이터를 가져올 때 사용됩니다. 이 경우 서버에서 데이터를 업데이트할 때마다 앱을 다시 빌드할 필요가 없습니다.

export async 함수 getServerSideProps() {
  const res = await fetch("https://jsonplaceholder.typicode.com/posts");
  const posts = await res.json();
  return {
    props: {
      posts,
    },
  };
}

getServerSideProps 메서드는 getStaticProps와 매우 유사합니다. 차이점은 getServerSideProps는 요청이 있을 때마다 실행되는 반면, getStaticProps는 빌드 타임에 한 번 실행된다는 점입니다.

클라이언트 측 렌더링

클라이언트 측 렌더링을 사용하면 페이지의 초기 로딩 속도가 약간 느립니다. 서버와의 통신은 런타임에 이루어집니다. 보다 전통적인 방식으로도 가능합니다:

const Blog = () => {


 const [posts, setPosts] = useState([]);
  useEffect(() => {
    const fetchData = async () => {
      const res = await fetch(
     "https://jsonplaceholder.typicode.com/posts");
      const posts = await res.json();
      setPosts(posts);
    };
    fetchData();
  }, []);

또한 다른 솔루션인 'swr'을 사용할 수도 있습니다. Vercel*의 데이터 가져오기용 React Hook 라이브러리로, NextJS 제작자가 강력히 권장하는 솔루션입니다. SWR은 재검증하는 동안 상태를 나타냅니다.

* 데이터 소스: 버셀의 SWR

"swr"에서 useSWR을 가져옵니다;


const Blog = () =&gt; {
 const fetcher = (url) =&gt; fetch(url).then((r) =&gt; r.json());
 const { data: posts = [], error } = useSWR(
    "https://jsonplaceholder.typicode.com/posts", fetcher);
 if (오류) 반환 <div>글을 로드하지 못했습니다.</div>;
 if (!posts.length) return <div>로딩 중...</div>;
 반환 (
    <>
      {posts.map((post) =&gt; (
            {post.title}
        ))}
    </>
}

요약

NextJS는 각 페이지에서 사용할 데이터 가져오기 전략을 선택할 수 있는 추가적인 가능성을 제공합니다. 전체 애플리케이션에 대해 하나의 솔루션만 따를 필요는 없습니다.

바로 가기

  • getServerSideProps - 각 요청에 대해 가져온 데이터로 앱을 미리 렌더링해야 하는 경우
  • getStaticProps - 빌드 타임에 데이터를 한 번 가져와 업데이트 없이 각 요청에 사용할 수 있는 경우
  • getInitialProps - 권장되지 않으며 더 이상 사용되지 않습니다.
  • getStaticPaths - 동적 경로 사전 렌더링용
다음Js 장단점
디지털 제품 개발 컨설팅

자세히 읽어보세요:

Rails API 및 CORS. 의식의 전환

타입스크립트를 사용해야 하는 이유는 무엇인가요?

SaaS 프로젝트의 최고 품질 코드. (비기술적인) 창업자로서 왜 이 문제에 관심을 가져야 할까요?

관련 문서

소프트웨어 개발

미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트

The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...

최신
소프트웨어 개발

라트비아에 본사를 둔 10대 소프트웨어 개발 기업

최신 기사에서 라트비아 최고의 소프트웨어 개발 기업과 그들의 혁신적인 솔루션에 대해 알아보세요. 이러한 기술 리더들이 어떻게 귀사의 비즈니스를 향상시키는 데 도움을 줄 수 있는지 알아보세요.

thecodest
엔터프라이즈 및 스케일업 솔루션

Java 소프트웨어 개발 필수 사항: 성공적인 아웃소싱을 위한 가이드

The Codest로 효율성을 높이고 전문 지식을 활용하며 프로젝트 성공을 이끌 수 있는 성공적인 outsourcing Java 소프트웨어 개발에 대한 이 필수 가이드를 살펴보세요.

thecodest
소프트웨어 개발

폴란드 아웃소싱을 위한 최고의 가이드

폴란드에서 outsourcing가 급증한 것은 경제, 교육, 기술 발전으로 인한 IT 성장과 비즈니스 친화적인 환경이 조성된 덕분입니다.

더코데스트
엔터프라이즈 및 스케일업 솔루션

IT 감사 도구 및 기술에 대한 완벽한 가이드

IT 감사는 안전하고 효율적이며 규정을 준수하는 시스템을 보장합니다. 전체 기사를 읽고 그 중요성에 대해 자세히 알아보세요.

The Codest
야쿱 야쿠보비치 CTO & 공동 설립자

지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

    회사 소개

    The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

    영국 - 본사

    • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
      영국 런던

    폴란드 - 현지 기술 허브

    • 파브리츠나 오피스 파크, 알레야
      포코주 18, 31-564 크라쿠프
    • 뇌 대사관, 콘스트럭터스카
      11, 02-673 바르샤바, 폴란드

      The Codest

    • 홈
    • 회사 소개
    • 서비스
    • Case Studies
    • 방법 알아보기
    • 채용 정보
    • 사전

      서비스

    • IT 자문
    • 소프트웨어 개발
    • 백엔드 개발
    • 프론트엔드 개발
    • Staff Augmentation
    • 백엔드 개발자
    • 클라우드 엔지니어
    • 데이터 엔지니어
    • 기타
    • QA 엔지니어

      리소스

    • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
    • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
    • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
    • CTO와 CIO의 주요 과제는 무엇인가요?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • 웹사이트 이용 약관

    저작권 © 2025 by The Codest. 모든 권리 보유.

    ko_KRKorean
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean