inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

useSuspenseQuery 사용 시 SSR 401 이슈 관련

미해결

Next + React Query로 SNS 서비스 만들기

안녕하세요 강사님 좋은 강의 잘 듣고 있습니다! useSuspenseQuery를 사용 중에 고민이 생겨서 질문 드립니다. 제가 구현하고 있는 프로젝트의 대부분 API는 인증이 필요합니다. refresh token 은 http only 쿠키로 관리하고, access token 은 쿠키에 저장하고, 요청 헤더에 넣어 인증을 하고 있습니다. useSuspenseQuery 를 사용하는 페이지에서 SSR 단계에 401 에러가 발생합니다. 이후 CSR 전환 시에는 정상적으로 데이터를 불러와 화면은 최종적으로 렌더링됩니다. 해당 페이지를 dynamic import 로 CSR 강제하면 401이 발생하지 않습니다. 제가 추정한 원인은 클라이언트 컴포넌트 내부라도 초기 렌더링 시 SSR 패스에서 useSuspenseQuery 가 실행되어 서버에서 API 요청이 발생. 이때 공통 axios 인스턴스가 클라이언트 전용 방식으로 쿠키를 읽어 헤더에 토큰을 주입하도록 구현되어 있어, 서버 환경에서는 토큰을 읽지 못해 401이 발생하는 것으로 판단했습니다. 해결을 위해 시도한 방법 prefetchQuery + useSuspenseQuery 조합으로, prefetchQuery 단계에서 next/headers 를 통해 서버 환경에서 토큰을 읽어 주입하면 401이 사라졌습니다. 다만, 모든 useSuspenseQuery 호출 지점마다 prefetchQuery 를 추가하는 것은 과도하다고 느껴 대안을 모색 중입니다. 질문 사항 왜 SSR에서 실행되나요? 클라이언트 컴포넌트 내부에서 호출하는데도 useSuspenseQuery 가 SSR 렌더링 단계에서 동작하는 메커니즘을 정확히 이해하고 싶습니다. useSuspenseQuery 의 단점/주의점 강의에서는 주 사용을 권장해 주셨는데, 모든 데이터 관리에 useQuery 대신 useSuspenseQuery 사용하는게 좋은건지 실제 서비스에서 고려해야 할 단점이나 주의사항이 궁금합니다. 401을 피하는 권장 패턴 제 환경처럼 서버에서 토큰을 읽지 못해 401이 나는 경우, 제가 시도한 방법 인 prefetchQuery 적용 외에 권장되는 표준 패턴이 있을까요? prefetchQuery 를 여러 곳에서 사용할 때의 리스크 여러 페이지/쿼리에서 prefetchQuery 를 널리 적용하면 TTFB 지연, 직렬화된 캐시의 HTML 페이로드 증가, 중복 호출 등의 문제가 커질 수 있을까요? 그렇다면 적절한 적용 기준이나 완화 전략이 궁금합니다. 그리고 어떤 기준으로 prefetchQuery 를 적용하면 좋을지도 궁금합니다. 문서와 블로그, GPT 등을 찾아봤지만 명확히 정리하기 어렵고, 제가 질문을 드릴 수 있는 최고 전문가라고 생각하여 의견을 여쭙니다. 긴글 읽어주셔서 감사합니다! 아래 에러가 발생하는 예시 코드 첨부 드립니다. (APage를 CSR로 강제하면 에러 미발생) import Spinner from "@/components/common/spinner/Spinner"; import A from "@/components/pages/A"; import { Suspense } from "react"; import { ErrorBoundary } from "react-error-boundary"; interface APageProps { params: { id: string; }; } export default async function APage({ params, }: APageProps) { const { id } = params; const parsedId = parseInt(id); return ( <ErrorBoundary fallback={<div>에러가 발생했습니다</div>}> <Suspense fallback={<Spinner fullscreen />}> <A id={parsedId} /> </Suspense> </ErrorBoundary> ); } "use client"; import { useGetAList } from "@/api/A/queries/useGetAList"; interface AProps { id: number; } export default function A ({ id }: AProps) { const { data: probiomeList } = useGetAList(id); // 생략 import { queryKeys } from "@/constants/queryKeys"; import { UseSuspenseQueryCustomOptions } from "@/types"; import { useSuspenseQuery } from "@tanstack/react-query"; import { getAList } from "../A"; import { AList } from "@/types/A"; export function useGetAList( id: number, queryOptions?: UseSuspenseQueryCustomOptions<AList> ) { return useSuspenseQuery({ queryFn: () => getAList(id), queryKey: [ queryKeys.A.BASE, queryKeys.A.GET_A_LIST, id, ], ...queryOptions, }); }

  • react
  • next.js
  • react-query
  • next-auth
  • msw
dubu777 댓글 1 좋아요 0 조회수 203

질문)바이브코딩 웹제작

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

안녕하세요 선생님, 혹시 전체 강의를 수강하진 않았지만 이 부분이 가능할것으로 생각들어 강의 결제하였는데, 궁금해서 문의드려요 lovable이나 replit으로 만든 웹을 안드로이드 앱으로 만들려면 어떻게 해야되는건가요? 이거에 대한 강의나 관련내용이 있을까요??저 그 방법이 있는거 같아서 결제했는데, 알려주실수 있나요?강의에 포함안되어 있다면 통상적으로 어떤식으로 만드는 궁금합니다.

  • flutter
  • next.js
  • cursor
화이팅! 댓글 2 좋아요 0 조회수 176

supabase 연결하는 프로젝트 단위 기준

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

supabase에 연결할 때, 만드는 서비스마다 프로젝트를 다르게 설정하면 되는 걸까요? 아니면 같은 프로젝트에다가 그냥 연결해도 알아서 별개로 DB를 구축해주는 건지 궁금합니다!

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
고구고구마 댓글 2 좋아요 0 조회수 158

안녕하세요 급하게 next.js를 배워아햐는데

해결됨

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

현재 react.js는 수강한상태이고 타입스크립트는 수강안한 상태입니다. 급하게 회사에서 next.js를 배우라고해서 인강을들어아햐는데 타입스크립트 모르고 react.js만 알아도 수강하는데 아무지장없을까요?

  • react
  • typescript
  • next.js
임다정 댓글 2 좋아요 0 조회수 110

리액트 쿼리 useinfinitequery 무한스크롤 구현 시 페이지가 이동할 경우 데이터가 보존되게 할 수 있나요??

미해결

Next + React Query로 SNS 서비스 만들기

더보기 버튼 클릭 시 페이지 이동 (page=1 -> page=2) + 무한스크롤 구현 기능 구현이 필요해서 아래와 같이 구현해보았는데 어쩔땐 되고 어쩔땐 안되더라구요... 만약 데이터를 10개씩 불러올 경우 10개 -> 20개 -> 30개 -> 40개 이러다 갑자기 다시 10개가 됩니다... 원래 useInfiniteQuery 무한스크롤 구현 시 페이지이동하면서 기존 데이터를 보존하는 방법이 불가능한건지 아님 제가 코드를 잘못짠건지 궁금합니다... const useInfiniteQuery = (params: Params) => { const searchParams = useSearchParams() const page = searchParams.get('page') return useInfiniteQuery({ queryKey: [CONTENTS_KEY, params], queryFn: ({ pageParam }) => { return getContentsApiClient({ ...params, ...outLinkParams(), page: Number(pageParam) }) }, getNextPageParam: (lastPage, _, lastPageParam) => { // 마지막 page라면 hasNextPage가 false const lastPageNumber = Math.ceil(lastPage.totalCount / (params.size || 10)) if (lastPageNumber === lastPageParam) { return undefined } return Number(lastPageParam) + 1 }, initialPageParam: Number(page) || 1, placeholderData: keepPreviousData, }) } //더보기 버튼 // 클릭 시 페이지 이동 function AddMore({ fetchNextPage, totalPages }: { fetchNextPage: () => void; totalPages: number }) { const searchParams = useSearchParams() const pathname = usePathname() const params = new URLSearchParams(searchParams.toString()) const pageNo = Number(searchParams.get('page') || 1) params.set('page', (pageNo + 1).toString()) if (totalPages === pageNo) return null return ( <div className={cn('wrap')}> <Link className={cn('link')} href={`${pathname}?${params.toString()}`} onClick={fetchNextPage} scroll={false} > <span className={cn('label')}>더보기</span> </Link> </div> ) } 강의 잘 듣고있습니다. 감사합니다! 참고로 백엔드는 문제가 없습니다.

  • react
  • next.js
  • react-query
  • next-auth
  • msw
변재정 댓글 3 좋아요 0 조회수 214

api 를 호출해야만 ISR 이 적용 되는것 같은데 자동으로 적용하려면 어떻게 해야 하나요?

해결됨

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

🚨 필독) 질문하시기 전에 꼭 읽어주세요 (10초 소요) 제목을 구체적으로 작성해 주세요 ✅ 좋은 예 : 감정일기장 Home 구현중 xx 이슈가 발생합니다. ⛔ ️ 나쁜 예 : 이거 왜 안되나요?, 오류나요 도와주세요 등 비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 코드의 이슈는 전체 프로젝트를 "링크 형태"로 올려주셔야 원인을 파악할 수 있습니다. 깃허브, 구글드라이브 등의 수단을 통해 링크 형태로 전달해주세요 직접 실행해보며 원인을 파악해야 하기 때문에 텍스트 형태로 붙여넣는건 삼가해주세요 🥲 답변이 도움이 되셨다면 답글 or 해결완료 버튼을 클릭해주세요 비슷한 궁금함을 갖고 계신 분들께 도움이 될 수 있어요! 제 답변이 여러분께 도움이 되었는지 저도 알고 싶어요 🥲 강의 내용에 궁금한 점이 있다면 몇 챕터의 몇 분 몇 초인지 알려주시면 더 좋아요 더 빠른 답변이 가능합니다!

  • react
  • typescript
  • next.js
강지웅 댓글 1 좋아요 0 조회수 130

커리큘럼 질문

미해결

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다! [코드팩토리 디스코드] https://bit.ly/3HzRzUM 안녕하세요. 코드팩토리님, 강의 너무 잘보고 있습니다. 커리큘럼에 대해서 질문이 있는데 강의 소개에서는 배포에 대한 부분이 언급이 되어있는데 현재 커리큘럼을 쭉 보면 배포에 대한 부분이 없는데 혹시 아직 추가가 안된건가요?

  • javascript
  • typescript
  • rest-api
  • nestjs
  • backend
석지웅 댓글 2 좋아요 0 조회수 124

services-col mx-2 my-3

미해결

부트스트랩 5(Bootstrap 5) - 기초부터 웹 프로젝트 만들기

버전의 문제인가 싶어서 강사님 수업자료 다운받아서 CSS만, JS만, HTML만 해봤으나 원인을 찾지못하여 글 남깁니다. mx-2가 먹히지 않는것인지 이미지 사이에 공백이 없네요.

  • HTML/CSS
  • javascript
  • bootstrap
  • 웹-디자인
slothmaru 댓글 2 좋아요 0 조회수 78

List.jsx에서 검색어를 입력 시 getAnalyzedData() 함수가 지속적으로 호출되는 이유가 뭔가요

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

안녕하세요. 강의 잘 보고 있습니다. 웹 페이지 중 List영역의 검색창에 단어를 입럭할 때 마다 getAnalyzed() 함수가 호출되는 이유가 궁금합니다. 저의 부족한 실력으로나마 추측을 했을 때, 검색창에 해당하는<input>태그에 입력이 발생할 때 마다 search라는 내부 state의 값이 바뀌게 되어 랜더링이 다시 진행되고, 이에따라 getAnalyzed()가 실행되는 것 같습니다. 답변 기다리겠습니다. 감사합니다!

  • javascript
  • react
  • node.js
박영현 댓글 2 좋아요 -1 조회수 104

remark-gfm

미해결

Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)

remark-gfm 설치 이후 모든 css 가 망가지고 글자와 이미지만 렌더링 되는데 뭐가 문제일까요? global css 에서 import 한것도 아니고 영상과 같이 Plugin 으로 했어요. next-mdx-remote 깃헙 보니까 업데이트도 1년 지났고 버그 로그 많던데 그거 때문이려나요? https://github.com/hashicorp/next-mdx-remote next 공식문서에서도 next-mdx-remote 는 더이상 없고 next-mdx-remote-client 만 있던데 그거 쓰면 되는걸까요?

  • react
  • 블로그
  • next.js
  • cursor
  • cursorai
주병규 댓글 2 좋아요 0 조회수 145

마크업 파트 가독성 향상 방법

미해결

Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)

전부 다 따라하면서 배우고 있습니다! 다만, 마크업 파트 에서 이렇게 글자 색으로 인해 가독성이 떨어지는데 마크업 파트 속성을 바꿀 방법은 없을까요?

  • react
  • 블로그
  • next.js
  • cursor
  • cursorai
주병규 댓글 2 좋아요 0 조회수 90

Next.js 블로그 결과물 공유 이벤트 진행 여부

미해결

Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)

안녕하세요, 선생님. 아직 디스코드에 Next.js 블로그 결과물 공유하면 실용적인 블로그 소스코드 받을 수 있는 이벤트 진행하고 있나요?

  • react
  • 블로그
  • next.js
  • cursor
  • cursorai
산독기 댓글 1 좋아요 0 조회수 93

[수업 노트] ISR 공식 문서 링크 변경

해결됨

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

현재 강의 수업노트에 첨부된 ISR 공식 문서 링크에 접속하면 SSR 관련 문서로 표시되고 있습니다. 문서 링크가 아래로 변경된 것으로 보입니다. https://nextjs.org/docs/pages/guides/incremental-static-regeneration

  • react
  • typescript
  • next.js
Next 댓글 2 좋아요 0 조회수 86

Git Graph가 강사님처럼 나타나지 않는데요.

미해결

제로베이스부터 배우는 웹개발의 개념과 바이브 코딩

강사님처럼 메인 탭으로 열리지 않고, 좌측 하단에 작게 열리고 작게 열린 부분에서 마우스 우측 클릭해도 이전 버전으로 돌아가는 메뉴가 안 뜹니다.

  • react
  • 웹앱
  • next.js
  • cursor
  • 인공지능(ai)
hackingbiz 댓글 2 좋아요 0 조회수 359

9.2) 14분 10초 - SEO 패러렐 라우트 페이지 미적용 문제

해결됨

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

62. 검색 엔진 최적화(SEO)에서 보면 상세페이지의 메타데이터 설정하는 부분에서 이전시간에 적용한 인터셉트/패러렐 라우트 때문인지 모달 형태로 뜨면 book/[id]에 설정한 메타 태그가 적용되지 않고, 최상위 (with-searchbar) 부분에 적용한 부분이 뜹니다. 하지만 새로고침해서 최초 접속 상태로 상세페이지에 접근하면 book/[id]에 설정한 meta태그랑 오픈그래프가 보입니다! 이게 의도하신 부분 맞을까요? 어차피 링크로 공유할때는 맨 처음 접속하는 것과 마찬가지니까 크게 상관 없는 부분일까요!? 강의 잘 수강하고 있습니다! 감사합니다.

  • react
  • typescript
  • next.js
보키 댓글 2 좋아요 0 조회수 86

useRef를 사용하는 이유

해결됨

한 입 크기로 잘라 먹는 리액트(React.js) : 기초부터 실전까지

todo list 구현 중 id 값을 변경할 때 useState가 아닌 useRef를 사용하는 이유가 무엇인가요? useRef를 사용하는 이유와 사용되는 경우를 아직 이해하지 못해 조금 더 자세하게 알려주시면 감사하겠습니다ㅠ

  • javascript
  • react
  • node.js
댓글 2 좋아요 0 조회수 143

구글에드센스 velcel 상업적이용

미해결

제로베이스부터 배우는 웹개발의 개념과 바이브 코딩

안녕하세요. 좋은강의 제공해주셔서 감사합니다. vercel 무료 티어 같은 경우 구글에드센스를 상업적 이용으로 치부하고 있어 규정에 어긋나게 되는거 같은데 다른 대안이나 방안이 있을까요?

  • react
  • 웹앱
  • next.js
  • cursor
  • 인공지능(ai)
안상수 댓글 1 좋아요 0 조회수 413

데이터 패칭과 프리패칭 순서

해결됨

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

안녕하세요 강사님, 복습하는 과정 중에 Page Router 기준으로 SSR + 프리패칭 + Hydration 흐름을 제가 이해한 대로 정리해보았는데, 이게 맞는지 확인 부탁드립니다. 사용자가 /a 페이지에 있을 때 <Link href="/c" prefetch> 가 있으면, 브라우저는 백그라운드에서 /c.js (코드 스플리팅된 JS 청크)만 미리 받아 캐시에 저장해둔다. → 이 단계에서는 HTML이나 데이터( getServerSideProps 결과)는 가져오지 않는다. 사용자가 실제로 /c 를 클릭하면, 서버가 getServerSideProps 를 실행해서 데이터를 패칭하고, 그 결과를 반영한 SSR HTML + JSON을 브라우저에 내려준다. 브라우저는 HTML을 먼저 렌더링해서 FCP가 나오고, 이어서 캐시에 있던 /c.js 를 실행한다. 그 후 React가 HTML과 JS를 매칭시켜 Hydration을 수행하여 이벤트 핸들러를 연결한다. 즉, SSR 페이지 전환 시 1. User 클릭 → (서버) HTML 생성 및 데이터 패칭 → (브라우저) HTML 렌더링 → JS 실행 → Hydration 이고, 프리패칭은 그 전에 JS만 준비해 두는 과정으로 이해했습니다. 제가 이해한 흐름이 맞을까요? 머메이드로 도식화하자면 다음과 같습니다 . 위가 맞다면, 빠른 페이지 전환을 위해하는 프리패칭을 했지만 결국 데이터 패칭 및 HTML을 서버에서 다시 그려오는데 빠른 전환이 가능한건지 궁금합니다. 혹시 여기서 놓치고 있는 부분이나, 실제 네트워크 요청에서 다른 점이 있다면 알려주시면 감사하겠습니다!

  • react
  • typescript
  • next.js
kos7662 댓글 2 좋아요 0 조회수 113

2-3강 질문이 있습니다

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

2-3 강 7분~ 안녕하세요. Cursor Rule 관련 부분이 질문이 있습니다. 7분 무렵보면 AI 가 자동 초안을 생성하여 일관성을 향상시켜준다고 하였는데, 이것은 외부 파일을 이어 받아 프로젝트를 진행할때 필요한 과정인건가요? 만약 제가 혼자서 처음부터 끝까지 Cursor 에서 작업을 한다면 따로 Cursor Rule 을 만들 필요까지는 없는건지 아니면 그 경우에도 일관성을 위해 어느정도 코드를 만들어 놓은 상황에서 이것을 진행하여 AI 가 조금 지나고 났을때 잊지 않게 해야하는지 궁금합니다.

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
ghuhan18 댓글 2 좋아요 0 조회수 102

인기 태그

인프런 TOP Writers

주간 인기글