리액트 프레임워크
SEO(Search Engine Optimization)을 위한 SSR(Server-Side Rendering) 때문에 많이 쓴다고 알고 있다.
넥스트에서 제공하는 튜토리얼을 해석하면서 왜 쓰는지 알아봐야겠다
완전한 리액트 웹 어플리케이션을 빌드하라면 고려해야할 중요한 사항들이 있음
💡 참고 )
프레임워크는 이런 문제들을 해결할 수 있다. 사용하기 좋게 올바른 수준의 추상화를 가지고 있어야하고, DX도 좋아야 함.
넥스트가 개발자 경험을 위해 겨냥하고 있는 것들
자세한 예시
동적 라우트
pages/blog/[slug].js
→ /blog/:slug
(/blog/hello-world
)pages/[username]/settings.js
→ /:username/settings
(/foo/settings
)pages/post/[...all].js
→ /post/*
(/post/2020/id/title
)클라이언트 사이드 라우팅(Client-side routing)
<Link />
컴포넌트 제공
뷰포트 안의 링크 컴포넌트는 SSG를 사용하는 페이지에 대해 기본적으로 프리페치(prefetch)됨. 서버에서 렌더된 라우트에 의한 데이터는 프리페치 되지 않음.
→ 이게 뭔 소리냐면 링크 컴포넌트가 화면에 보이면 링크 클릭 안해도 넥스트에서 링크랑 연결된 페이지 코드를 미리 로드함. 그래서 페이지 전환이 부드러움
새로고침도 안함. 이전에 받아온 데이터는 서버에 요청도 다시 안함.
참고로 Link 컴포넌트를 쓸 때, 칠드런으로 <a>
를 왜 넣어야할까?
안 넣어주면 next에서 if문으로 알아서 넣어주는 부분이 있긴함
공식 문서 설명을 좀 더 찾아보니, <a>
태그로 href 어트리뷰트를 넣어서 SEO에 손상이 가지 않게 하려고.
기본적으로 넥스트는 모든 페이지에 프리렌더가 적용됨. 이게 무슨말이냐면 넥스트가 매 페이지를 미리 html로 생성(generate)한다는 거임.
생성된 html은 그 페이지에 필요한 최소한의 자스 코드랑 연결됨. 브라우저에 의해 페이지가 로드되면, 자스 코드가 실행되고 페이지를 완전 interactive하게 만들어줌. (이 과정을 hydration이라고 부름)
프리렌더링에는 두 가지 형태가 있음. HTML을 생성하는 방식에 차이가 있음.
넥스트에서는 위 방식을 매 페이지마다 고를 수 있긴함.
넥스트에서는 성능상의 이유로 SSR 보다는 SSG를 사용하길 추천함. 정적으로 생성된 페이지는 성능 향상을 위한 추가 구성 없이 CDN에서 캐싱될 수 있음.
클라이언트 측 데이터 페칭으로, 페이지의 일부는 클라이언트 측 자스로 완전히 로딩될 수도 있음.
💡 CDN? Content Delievery Network 콘첸츠 전송 기술. 서버와 사용자 사이의 물리적인 거리를 줄여 로딩 시간을 줄임. 각 지역의 캐시 서버를 분산 배치해서 원본 서버가 아닌 캐시 서버가 콘텐츠를 전달함.다음 편에는 SSG, SSR, Hydration에 대해 알아보겠음.