묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
- 
      
        
    미해결Next + React Query로 SNS 서비스 만들기
fetch 캐싱과 revalidate 관련
안녕하세요 제로초님 fetch 캐싱과 revalidate 관련해서 궁금한 점이 있어 질문드립니다. await fetch('https://api.example.com/posts', { next: { revalidate: 60 }, });A가 /posts를 최초 요청합니다.→ API에서 데이터를 받아오고, 해당 데이터는 Next.js 서버 캐시에 저장이후 60초 동안은 다른 누구든지 이 캐시된 데이터를 그대로 받음그런데 60초가 지나기 전에 DB에서 게시글 1번의 제목이나 내용이 수정됨60초가 지나고 A가 다시 목록을 요청→ 이 시점은 revalidate 만료 시점 이후이므로 재검증 타이밍→ 하지만 A는 여전히 이전 캐시 데이터를 먼저 받고,→ A의 요청을 계기로 Next.js가 백그라운드에서 API를 다시 fetch하여 캐시를 갱신곧이어 B가 /posts를 요청하면→ B는 A 덕분에 갱신된 최신 데이터를 바로 받음 제가 이해한 것이 맞을까요? 만약 저런식으로 동작하면 상세 페이지와 데이터 불일치 문제가 발생할 수 있지 않을까 해서요 만약 상세 페이지 요청도 이렇게 작성되어 있다면await fetch('https://api.example.com/posts/1', { next: { revalidate: 60 }, });A는 목록 요청만 했고, 상세 페이지는 요청하지 않음B는 A 이후에 목록을 보고 → 최신 제목을 확인한 뒤,→ 게시글 1번의 상세 페이지를 클릭그런데 상세 페이지의 제목은 여전히 수정 전의 이전 제목으로 보임→ 목록과 상세 페이지 간에 데이터가 불일치할 수 있음정리하자면 제가 이해한 Next.js의 fetch + revalidate 캐시 동작이 맞는지 궁금하고위와 같은 목록-상세의 데이터 불일치 현상은 실제로 발생 가능한 문제인지 궁금합니다. 제가 실제로 테스트해봤을 때 위 시나리오대로 목록과 상세 페이지에서 서로 다른 제목이 보이는 걸 확인했습니다. 혹시 제가 잘못 이해하고 테스트한 부분이 있는 건지, 아니면 실제로도 발생할 수 있는 동작인지 궁금합니다.
 - 
      
        
    해결됨한 입 크기로 잘라먹는 Next.js(v15)
리액트 쿼리를 사용할 이유...
안녕하세요! 강의 잘 듣고 있습니다. Next에서 제공하는 fetch의 기능만 잘 활용해도React Query를 사용할일이 잘 없을것같은데.. 무한스크롤같은 기능을 구현할때정도는 편하긴 할것같지만, 보통 App Router환경에서 React Query를 활용할 수 있는경우가 어떤 경우가 있을까요??
 - 
      
        
    미해결Next + React Query로 SNS 서비스 만들기
강의 듣는 방법
안녕하세요.강의를 어떤 방식으로 듣는 것이 가장 효율적인지 여쭤보고 싶습니다.처음 page.tsx를 만들 때는 하나하나 따라 만들며 진행했지만, 중간부터는 급하게 따라가기만 하다 보니 시간도 오래 걸리고, 오히려 비효율적이라는 생각이 들었습니다.또한 수업 자료의 GitHub를 보면 각 폴더 설명에 "따라치기 위해 보면 안 된다"고 안내되어 있어서, 제가 잘못된 방식으로 수강하고 있는 건 아닌지 고민이 됩니다.그리고 ch0~ch4 강의 이후의 코드를 올려주신 것은, 강의를 들으면서 이해가 안 되거나 따라가지 못한 부분이 있을 경우 해당 코드를 참고하거나 다운로드해서 사용해도 괜찮다는 의미일까요?또한 강의 초반에 GitHub에서 해당 폴더로 들어가 복사하고, 설명을 들으며 진도를 나가는 방식이라고 말씀하신 것을 보았는데, 그렇다면 굳이 모든 코드를 따라 치기보다는 전체 코드를 먼저 불러온 뒤 실행해두고, 강의를 들으며 흐름과 설명 위주로 이해하는 방식으로 수강해도 괜찮을지 궁금합니다.지금처럼 따라치며 수강하려다 보니 상대적으로 시간이 많이 소요되고, 비효율적일 수 있다는 생각이 들어 이렇게 문의드립니다.이에 대해 보다 효율적인 수강 방법에 대해 조언해주시면 감사하겠습니다.
 - 
      
        
    해결됨한 입 크기로 잘라먹는 Next.js(v15)
도서 생성 api 관련 질문
POST /book 해당 API에 { "title": "string", "subTitle": "string", "author": "string", "description": "string", "publisher": "string"}위 body를 넣어서 요청했을 때 { "statusCode": 400, "message": "coverImgUrl는 요청에 포함되지 않아야 합니다", "error": "Bad Request" }이런 에러가 나오는데 coverImgUrl가 없는데도 불구하고 위 에러가 나오는 이유는 뭘까요? 도서 생성 api는 사용할 수 없는 건가요..?
 - 
      
        
    미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
메인 브랜치로 이동
깃 실습처럼...몇몇 작업이 에러가 심해서 돌아가려고'깃 그래프'에서 돌아갈 커밋 위치한 곳에 reset current branch to this commit... 을 눌러 hard를 선택해 주었는데도...돌아가지를 안네요콘솔창에서 명령어 git reset --hard 810380ae 도 안먹고... ㅠㅠ(커서에서 에이전시에 시켰는데 810380ae로 돌아가로...여러 터미널 명령어를 실행했는데도 변하질 않네요)어찌해야 하나요? 다른 방법이 있는지 좀 알려주세요
 - 
      
        
    미해결Next + React Query로 SNS 서비스 만들기
40강 로그인
안녕하세요! 40강 관련 질문입니다. 강의에서 로그인 하는 방식을 두 가지 알려주셨습니다. 서버액션 사용서버액션 미사용 서버액션 미사용해서 구현할 때 tanstack query 의 mutation 을 사용하는 방식도 좋지 않을까 생각을 하는데요, 로그인 버튼에 loading 처리를 하거나 등 의 이유로요! 근데 제로초님은 useState 만 쓰셨는데, 간단하게 보여주기 위해서 그렇게 하신걸까요? 로그인/회원가입에 tanstack query 를 사용하는 것이 추천하는 방식은 아닌걸까요?? 제가 강의 들으면서 개인프로젝트에 적용하고 있어서, 어떤 방식이 좋은지 고민이 돼서 여쭙니다!
 - 
      
        
    미해결Next + React Query로 SNS 서비스 만들기
47강 팔로잉 게시글
안녕하세요 제로초님! 47강의 팔로잉 게시글은 SSR 안필요하다고 하셨는데 그 이유가 뭔가요?! 제 생각은.. 팔로우 한 것은 유저마다 달라서? ssr 자체가 말이 안돼서(?) 그런거라고 추측해봅니다.
 - 
      
        
    미해결한 입 크기로 잘라먹는 Next.js(v15)
npx prisma db push 오류
다른 분들도 위와 같은 에러가 많이 뜨시는 것 같은데 아직 해결 방법이 없는 걸까요? supabase 프로젝트 생성 딜레이로 예측하신다면 시간 두고 기다려봐야 하는 것일지 궁금하네요 ㅜ
 - 
      
        
    해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
수강질문
안녕하세요 ~강사님 수업 실무적으로 잘 가르쳐주셔서 너무 잘 듣고 만족합니다.현재 완벽한 프론트엔드코스를 거의 다 소화하고, 풀스택을 배우고자 합니다. 부트캠프에서 만든 고농축 백엔드 코스는 현재 수강한 프론트엔드 코스 내용과 겹치는 강의가 많고 강의량도 많다보니 구매가 고민스로운데요..강사님 강의중 관리자 모드와 유저모드간에 통신을 다루는 실무 프로젝트 중심의 백엔드까지 배울수 있는 강의가 있는지 추천받고 싶습니다.
 - 
      
        
    미해결웹 게임을 만들며 배우는 React
timeouts.current를 useEffect 의 input값으로 넣었을때
timeouts.current가 useEffect의 input 인자로 들어간거에 대해서 헷갈려서 제가 이해한게 맞는지 1번 확인 부탁드립니다. 2번은 질문입니다. useEffect에서 input 인자에 값이 있으면, componentDidUpdate도 수행한다고 하셨는데요. componentDidUpdate는 state의 값이 변할 때마다 수행이 되는거잖아요. 그러면 timeouts.current값이 변할때마다 useEffect안에 있는 내용이 실행된다는 건데, onClickRedo를 해줬을 때 timeouts.current에 직접 [] 를 설정해줬으므로, 값이 변해서 다시 useEffect를 실행해주는게 맞을까요?timeouts.current[i] 이 부분에서 timetouts.current 의 값이 변하는게 아니라고 하셨는데, 배열에 값을 넣어주는 것이 왜 timeouts.current가 변하는게 아닌건지 잘 모르겠어요...값을 넣어준다해서 배열이 달라지는게 아닌걸까요?
 - 
      
        
    미해결제로베이스부터 배우는 웹개발의 개념과 바이브 코딩
웹서비스를 만들고나서..
선생님이 가르쳐 주신 웹서비스를 만들고 나서(컨텐츠,로그인,결제 등 전부 포함),위의 것들로 커서에서 구글 플레이스토어, 애플 스토어 등에 올릴 수 있나요?커서와 수파베이스,버셀로 웹페이지 만들어서 사람들하게 공유하는것은 가능한데, 그걸 또 앱 배포용 코드(?)로 변환해서 만들 수 있는지요?쳇지피티에 물어보면 이미 만들어진 웹서비스를 앱용으로도 가능하다는데...커서에서도 쉽게(현재까지는 쉽게 배워서 쉽네요 ^^) 변환을 시킬 수 있는지 알고 싶습니다~
 - 
      
        
    해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
const, let 사용 질문 드립니다.
안녕하세요! 파이널 과제를 완성하고 레퍼런스 코드를 보며 공부를 하다가 const와 let 사용에 대해 질문이 생겼습니다. 레퍼런스 코드에서는 함수 내에서 값이 변화하는 변수가 아니면 전부 const로 변수 선언을 하였는데, 주로 const를 많이 사용하고 값이 변화하는 경우에만 let으로 선언을 하는 걸까요? const를 주로 쓰는 이유가 따로 존재할까요? 주로 권장되는 스타일인지 궁금합니다. 미리 답변 감사합니다.
 - 
      
        
    미해결Next + React Query로 SNS 서비스 만들기
Post 정보 불러올 때
안녕하세요 제로초님 질문있습니다. 강의에서 post 데이터 서버로부터 불러오고 화면에 렌더링 해주는 과정을 아래와 같이 이해하였습니다. prefetchQuery 로 서버로부터 데이터를 가져온다.그렇게 가져온 데이터를 client component 에서 useQuery 로 가져온다 위와 같이 하는 이유가 궁금합니다. 사실 처음부터 클라이언트 컴포넌트로 useQuery 만 써도 문제없이 동작할텐데useQuery 이전에 prefetchQuery 로 먼저 불러오는 이유는 ssr 을 위해서이고, 그말은 즉 seo 를 위해서 인가요? (useQuery 만 사용하면 csr 방식이여서..?) 감사합니다.
 - 
      
        
    미해결코드로 배우는 React 19 with 스프링부트 API서버
스프링부트 부분은 리뉴얼되진 않은건가요?
안녕하세요. 강의가 리뉴얼 되었다고 해서 다시 보고있습니다. 리뉴얼 해주셔서 감사합니다. 혹시 리액트 부분만 리뉴얼 되고 스프링부트 부분은 리뉴얼 된 부분이 없는건가요? 감사합니다.
 - 
      
        
    미해결만들면서 배우는 리액트 : 기초
const 변수와 컴포넌트의 차이
안녕하세요, 강의 잘듣고 있습니다. const 변수로 선언된 태그를 컴포넌트화 시키셨는데 const와 컴포넌트의 차이가 궁금합니다! 즉, const는 변수이고 컴포넌트는 함수라고 인지하면 되는지 궁금합니다. 답변 부탁드려요. 감사합니다.
 - 
      
        
    미해결웹 개발자의 연봉을 올려주는 하이브리드앱 with Expo 프레임워크
iOS 가상키보드 대응
iOS 디바이스에서 input 요소에 포커스가 되면 가상키보드가 나타나면서 다음과 같은 문제가 발생합니다:문제 상황:가상키보드가 올라오면서 웹뷰의 전체 document가 위로 이동position: fixed로 설정한 헤더, 바텀 버튼 등의 엘리먼트들이 함께 올라가면서 고정 위치를 유지하지 못함시도해본 해결방법:가상 인풋(virtual input) 방식 적용 → 효과 없음Visual Viewport API 활용 → 해결되지 않음질문: 이 문제를 해결할 수 있는 효과적인 방법이 있을까요? 특히 iOS Safari 웹뷰 환경에서 position: fixed 엘리먼트가 가상키보드의 영향을 받지 않고 제자리를 유지할 수 있는 방법을 찾고 있습니다.
 - 
      
        
    해결됨한 입 크기로 잘라먹는 Next.js(v15)
6.3 ~ 6.4 search 페이지에서 문제가 있습니다.
import BookItem from "@/app/components/book-item"; import BookListSkeleton from "@/app/components/skeleton/book-list-skeleton"; import { fetchSearchBooks } from "@/app/lib/fetch-search-books"; import { Suspense } from "react"; // export const dynamic = "force-dynamic"; // 특정 페이지 유형을 강제로 설정하는 dynamic 세그먼트 옵션 // 1. auto - 아무것도 강제하지 않는 옵션, 기본형 // 2. force-dynamic - dynamic 페이지를 강제하는 옵션 // 3. force-static - static 페이지를 강제하는 옵션 // 4. error - static 페이지를 강제하지만 이로 인해 오류가 발생할 것으로 예상되면 빌드과정에서 오류를 발생하는 옵션 async function SearchResult({ q }: { q: string }) { const searchBooks = await fetchSearchBooks(q); return ( <> {searchBooks.map((book) => { return <BookItem key={book.id} {...book} />; })} </> ); } export default async function Page({ searchParams, }: { searchParams: { q?: string }; }) { return ( <Suspense fallback={<BookListSkeleton count={3} />}> <SearchResult q={searchParams.q || ""} /> </Suspense> ); } 스켈레톤 UI를 적용하고 있는데 속도를 3g로 하고 새로고침을 해도 Suspence가 작동하지 않고 페이지가 랜더링 됩니다.그리고 터미널에서 이런 에러가 발생하고 있습니다.Error: Route "/search" used `searchParams.q`. `searchParams` should be awaited before using its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis at Page (src/app/(with-searchbar)/search/page.tsx:31:37) 29 | return ( 30 | <Suspense fallback={<BookListSkeleton count={3} />}> > 31 | <SearchResult q={searchParams.q || ""} /> | ^ 32 | </Suspense> 33 | ); 34 | } GET /search?q=%ED%95%9C 200 in 47msSearchResult가 서버 컴포넌트로 만들어져 있어서 서버에서 이미 만들어 가져오기 때문에 fallback이 적용되지 않는건가요? SearchResult를 클라이언트 컴포넌트로 바꿔야지 해결되는 문제인가요?
 - 
      
        
    해결됨한 입 크기로 잘라먹는 Next.js(v15)
클라이언트 컴포넌트 렌더 시점에 대한 질문
궁금한 내용"NextJS에서 클라이언트 컴포넌트도 SSR을 수행하는데, 상호작용이 불가능한 정도의 SSR을 수행하여 리액트 트리를 구성하여 HTML을 만들고, HTML과 함께 클라이언트에 자바스크립트 번들 형태(하이드레이션 용도)로 전달된다." 라고 알고 있는데 맞는 말일까요? 그렇다면, '첫 페이지 로드 시'에만 1번과 같이 동작하고 첫 페이지가 아닌 '다른 페이지'에 들어갈 땐 CSR처럼(JS번들을 클라이언트에게 전달하여 브라우저 단에서 리액트 생명주기 시작) 동작한다면, 강의 중 나온 SearchBar 컴포넌트는 빌드 단계에 렌더링되는 컴포넌트 안에 있다하더라도 CSR될 것인데 Suspense로 래핑하여 클라이언트 단에서 렌더링이 되게끔 강제할 필요가 없지 않나요? 클라이언트 컴포넌트로 선언된 페이지 컴포넌트(create 페이지)가 next/link를 통해 프리패칭된 것을 네트워크 탭을 통해 확인했습니다. 다만, 클라이언트 페이지 컴포넌트 임에도 RSC Playload로 가져온 것을 확인했는데, 이것은 왜 그런 걸까요? 첫 페이지 로드 이후 페이지 이동 시에 CSR로 동작한다하더라도 진입하는 페이지의 RSC Payload와 JS번들은 주기적으로 서버로부터 가져와야하지 않나요? 아래의 그림에는 JS 실행 전에 서버로부터 가져오는 단계가 보이지 않는데 프리 패칭 과정이 생략된 걸까요?
 - 
      
        
    해결됨아바타 커뮤니티앱 만들기 (React Native Expo)
expo, cli 선택 중 고민이있습니다..
안녕하세요, 강사님. 좋은 강의 감사히 듣고 있습니다!현재 실제 앱 출시를 목표로 개발을 시작하려고 하는데, Expo와 CLI 중 어떤 방식으로 진행할지 고민 중입니다.공식 문서에서도 Expo를 권장하고 있고, Prebuild 기능 덕분에 대부분의 네이티브 라이브러리도 사용할 수 있고, 성능 최적화도 많이 이루어진 것으로 알고 있습니다.CLI와 Expo 사이의 런타임 성능이나 최종 번들 용량 차이에 대한 정확한 비교 자료가 부족해 선택이 쉽지 않은 상황입니다.강사님께서 CLI와 Expo를 모두 사용해보셨을 때, 두 방식 간에 실제 체감되는 성능이나 앱 용량 차이가 유의미했는지 궁금합니다.만약 차이가 크다면 CLI를 선택하는 쪽이 맞을 것 같기도 한데, 강사님의 의견이 듣고 싶습니다. 감사합니다!
 - 
      
        
    미해결React Native with Expo: 제로초에게 제대로 배우기
제가 빌드한 앱이 실행되지 않아요
npm ls react "react": "19.0.0",npm ls react-native"react-native": "0.79.2",npm ls expo = "expo": "~53.0.9",문제:expo go 앱에서 제가 빌드한 앱을 실행하면 로딩이 계속되다가 위와 같은 화면이 뜹니다.터미널에서도 에러를 찾을 수 없어서 이렇게 질문 드립니다.