https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-nextjs?srsltid=AfmBOop98SToIvyP4ZLiwetJfX_FMn0dbu097kRsUWsuX9BOUxCY1Ihi
위 내용을 바탕으로 강의를 수강하며 정리하였습니다.
스트리밍(Streaming)
Next.js의 스트리밍
Next.js의 스트리밍은 Dynamic 페이지에 자주 활용
Next.js의 Dynamic 페이지들은 Next.js 서버에서 빌드타임에 생성되지 않기 때문에 풀라우트 캐시에는 저장 X
▼ 이런 상황에서
▼ 스트리밍을 통해 이렇게 제공 가능
vscode로 열기
vscode에서 .../onebite-next/ 폴더로 열기
터미널에서 section06 폴더 생성
vscode에서 /onebite-next/section06/ 폴더 생성
파일 옮기기
/onebite-next/section05 폴더에 있는 코드 중 아래 사진에 해당하는 코드만 선택하여 /onebite-next/section06 폴더로 옮기기
필요한 모듈 다운로드
생성된 /section06/ 폴더로 vscode에서 다시 열기
→ vscode 터미널을 열어서 npm i 명령어 실행
개발 모드로 넥스트 앱 실행
생성된 /section06/ 폴더로 vscode에서 다시 열기
→ vscode의 터미널 열기
→ npm run dev 명령어 실행
→ http://localhost:3000/ 로 이동하면 확인 가능
→ (종료 시에는) Ctrl+D나 Ctrl+C 입력
백엔드 서버 열기
vscode에서 새 창을 열고 /onebite-books-server/ 폴더로 열기
→ vscode 터미널을 열고 npm run start 명령어 실행
스트리밍 기능 구현: /src/app/(with-searchbar)/search/loading.tsx 코드 생성
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter02/src/app/(with-searchbar)/search/loading.tsx
딜레이 구현을 위해: /src/util/delay.ts 코드 생성
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter02/src/util/delay.ts
딜레이 구현을 위해: /src/app/(with-searchbar)/search/page.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter02/src/app/(with-searchbar)/search/page.tsx
loading.tsx로 설정한 로딩 시 실행되는 코드는 동일한 경로에 있는 컴포넌트만 스트리밍이 되도록 설정하는 게 아니라, 경로 아래에 있는 모든 페이지 컴포넌트들이 다 스트리밍이 되도록 설정loading.tsx 파일이 스트리밍하도록 설정하는 페이지 컴포넌트는 모든 페이지 컴포넌트는 아니고 async라는 키워드가 붙어서 비동기로 작동하도록 설정된 페이지 컴포넌트에만 스트리밍을 제공loading.tsx 파일은 무조건 page.tsx 코드, 즉 페이지 컴포넌트에만 스트리밍을 적용할 수 있음loading.tsx 파일로 설정된 스트리밍은 브라우저에서 쿼리 스트링이 변경될 때에는 틜거링 되지 않는다
loading.tsxSuspenseSuspense 컴포넌트로 비동기 컴포넌트를 감싸주면 해당 컴포넌트를 스트리밍하도록 설정해서 미완성 상태, 즉 로딩 상태로 남겨둠 <Suspense key={q || ""} fallback={<div>Loading ...</div>}>
<SearchResult q={q || ""} />
</Suspense>: 쿼리 스트링만 변경되었을 경우 로딩 상태가 다시 표시되지 않는 문제가 발생하지만, 해결도 가능vscode로 section06 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 모드 서버 열기
vscode에서 새 창을 열고 /onebite-books-server/ 폴더로 열기
→ vscode 터미널을 열고 npm run start로 백엔드 서버 열기
Suspense 맛보기
loading.tsx 코드 삭제Suspense 사용 : /src/app/(with-searchbar)/search/page.tsx 코드 수정Suspense로 하나의 페이지 내에서 여러 개의 비동기 컴포넌트들을 동시다발적으로 스트리밍 시 동작 확인
/src/app/(with-searchbar)/page.tsx 코드 수정
스켈레톤 = 뼈대
스켈레톤 UI = 뼈대 역할을 하는 UI
▼ Ex. 유튜브의 스켈레톤 UI
vscode로 section06 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 모드 서버 열기
vscode에서 새 창을 열고 /onebite-books-server/ 폴더로 열기
→ vscode 터미널을 열고 npm run start로 백엔드 서버 열기
스켈레톤 컴포넌트 생성: src/components/skeleton/book-item-skeleton.tsx 코드 생성
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter04/src/components/skeleton/book-item-skeleton.tsx
스켈레톤 컴포넌트 적용: /src/app/(with-searchbar)/page.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter04/src/app/(with-searchbar)/page.tsx
스켈레톤 컴포넌트의 스타일 파일 생성: src/components/skeleton/book-item-skeleton.module.css 코드 생성
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter04/src/components/skeleton/book-item-skeleton.module.css
스켈레톤 컴포넌트들을 리스트로 렌더링 해주는 컴포넌트 생성: src/components/skeleton/book-list-skeleton.tsx 코드 생성
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter04/src/components/skeleton/book-list-skeleton.tsx
생성한 스켈레톤을 검색 페이지에도 적용: /src/app/(with-searchbar)/search/page.tsx 코드 수정
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter04/src/app/(with-searchbar)/search/page.tsx
Next.js는 특정 경로에서 발생한 모든 오류들을 한꺼번에 처리할 수 있는 아주 편리한 에러 핸들링 기능을 제공
에러문 출력을 위해 try-catch문을 사용하는 대신, 에러를 처리하고 싶은 페이지 컴포넌트의 파일과 같은 위치에 에러를 처리할 파일을 하나 생성: error.tsx 코드 생성
→ 이때 에러 파일은 useClient라는 지시자를 통해 클라이언트 컴포넌트로 설정하는 것이 필수 ⭐
→ 해당 에러 파일과 같은 경로에 있거나 하위 경로에 있는 페이지에서 오류가 발생하게 되면 에러 컴포넌트가 페이지 컴포넌트 대신 화면에 출력
에러 컴포넌트에서 제공하는 props
errorresetrefresh() 메서드로 서버 컴포넌트를 다시 불러와서 리렌더링 한다고 해도 클라이언트 컴포넌트인 에러 상태가 사라지지 않기 때문에, reset()도 그 이후에 필수적으로 사용 필요error.tsx 파일은 동일한 경로에 있는 인덱스 페이지 + 하위 경로에 있는 모든 페이지에 다 동일하게 적용
vscode로 section06 폴더 열기
→ vscode 터미널을 열어서 npm run dev로 개발 모드 서버 열기
(에러 확인을 위해) 백엔드 서버는 구동 X
에러를 처리하는 파일 생성: /src/app/(with-searchbar)/error.tsx 코드 생성
https://github.com/onebite-nextjs/vod__onebite-next-codes/blob/main/section06/chapter05/src/app/(with-searchbar)/error.tsx
백엔드 서버 가동: vscode에서 새 창을 열고 /onebite-books-server/ 폴더로 열기
→ vscode 터미널을 열고 npm run start로 백엔드 서버 열기
여전히 발생하는 오류 제거를 위해 error.tsx 코드 수정 가능
refresh()로 현재 페이지에 필요한 서버 컴포넌트들을 다시 불러옴