inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

한 입 크기로 잘라먹는 Next.js

jsbundle의 이름이 도중에 변경 되어도 nextjs가 인지하고 받아올 수 있나요??

해결된 질문

74

dl_audgh

작성한 질문수 6

0

안녕하세요 덕분에 next.js를 깊게 공부할 수 있었습니다.


next.js는 기존 리액트와 다르게 jsbundle(청크) 파일을 나누어 받아 옵니다.
강의에서 본 것처럼 청크 파일들이 각각의 유니크한 해쉬 값을 가지는 것도 확인했습니다.

시나리오

  1. next 프로젝트를 빌드

  2. 배포 된 웹페이지를 오픈

  3. next 프로젝트를 다시 빌드

  4. 기존의 웹페이지를 새로고침 하지 않고, 페이지 이동


기존 리액트 프로젝트에서는 하나의 청크 파일을 처음 한 번에 받아서 새로고침 전까지 1번의 이전 빌드된 웹페이지로 동작이 되는 것으로 알겠는데요.

next프로젝트에서는 jsbundle과 rsc_payload를 필요한 시점에 받으니까 새로 빌드한 파일엔 기존 청크해시 값과 달라서 문제가 생기지 않을까? 라는 생각이 들었습니다. 그런데 테스트 해보니 별다른 문제가 생기지 않는 것 같더라구요..

 

jsbundle과 rsc_payload의 유니크한(해쉬) 파일 이름이 도중에 변경 되더라도 next 서버측에서 찾을 수 있게 조치가 되어 있는 걸까요?

react typescript next.js

답변 2

0

이정환 Winterlood

안녕하세요 이정환입니다.

엄청나게 예리한 질문을 주셨네요 👀

실제로 이런 문제를 버전 왜곡(Version Skew)라고 부릅니다. 그리고 Next.js는 자체적으로 버전 왜곡에 대한 문제를 자동으로 해결하는 기능을 제공하고 있습니다.이에 대해서는 다음 공식문서에 자세한 설명이 나와 있으니 공식문서 링크로 제 설명을 대신하겠습니다 😃

https://nextjs.org/docs/pages/building-your-application/deploying#version-skew

0

dl_audgh

정말 감사합니다!!

0

dl_audgh

혹시 하나만 더 질문드려도 괜찮을까요??


예를들어 foo폴더 page컴포넌트에 'use client'를 사용해서 클라이언트 컴포넌트로 만들었는데요 그래도 foo?_rsc를 받을 수 있는 이유가 무엇일까요??
제가 한 번 생각 해보기로는

  1. 서버 컴포넌트인 layout컴포넌트 내에 page 컴포넌트가 있어서 rsc_payload를 받아 온것이다.

  2. page 컴포넌트가 서버 컴포넌트던 클라이언트 컴포넌트던, nextjs는 해당 페이지에 대한 js번들 경로를 가지고 있어야 하기 때문에 자체적으로 서버 컴포넌트를 만들고, rsc_payload를 만들어 내려준다.

     

 

0

이정환 Winterlood

안녕하세요 이정환입니다.

넵 그럼요 질문은 언제든지 얼마든지 환영입니다!

아래의 질문과 동일한 내용을 질문해 주신 것 같아 질문 링크로 답변을 대체하겠습니다 😃

https://www.inflearn.com/community/questions/1538507/page%EB%A5%BC-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8%EB%A1%9C-%EC%9E%91%EC%84%B1%ED%95%B4%EB%8F%84-rsc-payload%EA%B0%80-%EC%83%9D%EC%84%B1%EB%90%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. dl_audgh님께서 Next.js에서의 js 번들 파일과 관련하여 질문해 주셨네요.

일반적으로 Next.js는 빌드된 페이지의 정적 파일을 아주 효율적으로 관리하고 로드하게 설계되어 있습니다. 이에 따라, JS 번들 파일과 리액트 서버 컴포넌트 페이로드(RSC Payload)도 각 파일의 콘텐츠를 바탕으로 유니크 해쉬를 생성하여 관리합니다. 이 구조는 개별 번들 파일이 변할 때 발생할 수 있는 충돌을 방지하면서 최신의 파일을 빠르게 로드하는 데 도움을 줍니다.

유니크 해쉬와 서버 핸들링

  1. 유니크 해쉬: 각 js 번들 및 RSC Payload 파일은 콘텐츠 기반의 해쉬로 생성됩니다. 이는 웹앱이 빌드되면 번들링되는 파일이 변경 사항에 따라 다르게 생성된다는 의미입니다.

  2. Next.js 서버의 관리: Next.js 서버는 해당 해쉬 값들을 기반으로 클라이언트 요청에 대해 적절한 파일을 제공합니다. 클라이언트 쪽에서 페이지를 새로고침하지 않고도 페이지 전환과 JS 번들 로드를 원활하게 할 수 있는 이유는 이러한 서버 측 처리 능력 덕분입니다.

  3. 변경 시 처리: 새로운 빌드가 있으면, 클라이언트는 기존의 캐시된 파일을 사용하다가 페이지를 새로고침할 때 최신 버전의 JS 번들 파일을 로드하여 갱신하게 됩니다. 이전 캐시된 파일이 사용되지 않고, 해쉬 변경과 더불어 서버가 이를 처리하여 사용자가 최신 내용을 받을 수 있게 합니다.

이러한 메커니즘 덕분에 유니크한 해쉬가 생성되더라도, 서버는 이에 대한 효율적인 대응을 하여 사용자에게 무리가 없이 서비스를 제공할 수 있습니다. 이는 동적인 업데이트와 빠른 응답을 가능케 하여 우수한 사용자 경험을 만들어줍니다.

추가적으로 더 궁금한 점이 있으시다면, 아래의 관련해서 좀 더 상세하게 설명된 게시물을 확인해보시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

풀라우트캐시 동작 원리에서 데이터 캐시 관련 질문

0

23

2

next.js 프로젝트

0

28

1

Next.js + Tanstack Query BFF 구조 질문

0

29

2

Next.js 사전렌더링 이해하기 부분

0

34

2

모달 관련 질문

0

42

3

렌더링 관련 질문

0

80

2

중복으로 하나의 api를 요청할 때 캐싱 옵션 통일화

0

64

2

라우트 세그먼트 옵션 강좌 노트에 사소한 제보 남깁니다.

0

65

2

SSR시 context에 params말고 query를 사용하면 안되나요?

0

75

2

npx prisma db push 시 에러가 뜹니다.

0

94

3

vercel 배포를 실패하였습니다.

0

101

3

Image 컴포넌트 사용시 브라우저 콘솔에 경고는 왜 뜨는걸까요?

0

57

2

getServerSideProps 함수와 SSR의 관계

0

78

6

없는 페이지인데 풀라우트캐시로 저장이 되는 이유가 궁금합니다

0

61

2

실제 프로젝트에서 SSR 사용에 관해서 질문드립니다.

0

117

2

일반적인 nextjs project architecture에 대하여..

0

90

2

2.14 Search에서 작성한건 static이긴하지만 CSR이 아닌가요?

0

74

2

배포 시 오류 발생

0

90

2

백엔드 서버 오류납니다.

0

83

2

취약점 제거시 nestjs 버전 문제가 생길까요?

0

93

1

eslint.config.mjs 내 rules 어떻게 설정 하나요?

0

107

1

[book]/[id]/page.tsx 모달 띄울 때 성능 하락 현상은 ReviewList를 불러오면서 발생하는 문제 같습니다.

0

63

2

빨간줄 설정

0

77

2

익스텐션 질문

0

61

1