inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

6.3) 스트리밍 2. 컴포넌트 스트리밍 적용하기

15버전 이후의 (searchParams,Params) Promise타입 명시후 리액트 서스펜스 실습 질문

해결된 질문

182

상상

작성한 질문수 2

2

스크린샷 2025-11-09 오후 8.58.16.png.webp

react typescript next.js 카카오공채-개발

답변 3

2

이정환 Winterlood

안녕하세요 이정환입니다

두번째 사진으로 첨부해 주신 것 처럼 async 키워드를 붙인채로 강의 진행하시면 됩니다!

추가로 정확한 용어 정의가 필요할 것 같아요! 서스펜션->서스펜스가 정확한 용어입니다.

(서스펜션은 자동차의 ... 장치를 말합니다)

 

PS.

올바른 방향으로 실습 잘 진행하고 계시니 걱정하지 않으셔도 괜찮습니다!!

혹시 비슷한 고민이 또 생기시거나

버전관련해서 또 새로운 이슈가 있다면 얼마든지 질문 주세요 !!

1

상상

다행이네요! 답변감사합니다.
앗 ㅋㅋㅋㅋ 그러네요. 강의에서 그냥 들리는대로 서스펜션인지 서스펜슨지 둘 다 들려서 누구하나 딱찝어서 질문 작성하기 그래가지고 막 짬뽕으로 질문글을 적었었던 기억이 나는데 방금 질문글도 서스펜스로 용어 수정했습니다! 알려주셔서 감사합니다

2

Codingbear

Next 15버전 부터 cookies, headers, params, searchParams, draftMode 등이 비동기 API 화 되었습니다.

따라서 비동기 방식으로 코드를 처리해야 하며 따라서 함수에 async를 선언해줘야 합니다.

 

만약 일시적인 동기화 방식으로 처리하고자 한다면 아래 코드와 같이 React의 use() 사용해 보세요.

'use client';

import { use } from 'react';

export default function Page({ 
  searchParams 
}: { 
  searchParams: Promise<{ q?: string }> 
}) {
  const { q } = use(searchParams);

 //.... 생략
}

 

1

상상

차선책 알려주셔서 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 상상님.

Next.js 15 버전 이후로 searchParamsparams는 비동기로 처리되며, Promise 타입을 사용하게 되었습니다. 관련하여 질문해주신 내용은 이러한 변화에 대한 적응 과정으로, 비동기 함수 내에서 서스펜션(Suspense)을 사용하는 방법과 관련이 있습니다.

핵심 개선점

  1. Promise 타입 적용: Next.js 15에서는 searchParams와 같은 객체들이 비동기적으로 반환되므로, Promise 타입을 명시해야 합니다.
  2. async/await 사용: searchParams의 값을 사용하기 위해서는 await를 통해 비동기 작업을 완료해야 하며, 이에 따라 함수는 async 키워드를 사용합니다.
  3. 서스펜션 적용 여부: 서스펜스는 기본적으로 비동기 작업을 처리하는 데 사용되며, async 키워드 사용 자체는 서스펜스 적용에 직접적인 영향을 미치지 않습니다. 따라서, 이번 실습에서는 함수를 비동기 함수로 유지하면서 서스펜스를 적용해도 무방합니다.

제안된 코드 및 올바른 방향

// async를 유지한 상태로 구현
export default async function Page({ searchParams }: { searchParams: Promise<{ q?: string }> }) {
  const { q } = await searchParams;

  return <SearchResult q={q || ""} />;
}

이와 같은 방식으로 비동기성을 유지하며, 서스펜션을 사용해 데이터를 처리할 수 있습니다. 현재 질문자님의 방법은 Next.js의 최신 버전에 맞추어 적절히 적용되었으며, 실습의 방향 또한 잘 잡고 계신 것으로 보입니다.

관련하여 유사한 질문과 답변을 찾을 수 있습니다:
- Error: Route “/search” used searchParams.q. searchParams should be awaited before using its properties.: 비동기 API 사용 시 주의해야 할 점과 코드 수정 방법.

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

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

0

32

2

next.js 프로젝트

0

33

1

Next.js + Tanstack Query BFF 구조 질문

0

34

2

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

0

39

2

모달 관련 질문

0

45

3

렌더링 관련 질문

0

82

2

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

0

64

2

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

0

66

2

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

0

75

2

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

0

96

3

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

0

105

3

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

0

60

2

getServerSideProps 함수와 SSR의 관계

0

79

6

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

0

61

2

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

0

118

2

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

0

93

2

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

0

74

2

배포 시 오류 발생

0

91

2

백엔드 서버 오류납니다.

0

86

2

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

0

94

1

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

0

109

1

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

0

63

2

빨간줄 설정

0

80

2

익스텐션 질문

0

61

1