묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Next.js 완벽 마스터 (v15): 노션 기반 개발자 블로그 만들기 (with 커서AI)
tailwind css v4 에서 색상 관련해서
안녕하세요. 강사님. tailwind v4에서 hsl 대신 oklch를 사용한다고 하는데,,, 이에 대한 안내도 있을까요? 아직 강의를 다 들은건 아니라서 커스텀 색상을 얼마나 추가할지는 모르겠는데 혹시 몰라서요!
-
미해결바이브 코딩: Next.js + FastAPI + Faster-Whisper로 음성 메모 앱 만들기
git 저장소 주소가 어디있나요?
강의 잘 듣고 있습니다. git 주소를 찾을 수 없네요. 감사합니다.
-
미해결Next + React Query로 SNS 서비스 만들기
msw ssr 관련 질문입니다.
안녕하세요 제로초님next 15버전으로 바뀌고나서 새로 처음부터 다시 강의를 들으면서 만들어 보고 있습니다. next 15버전으로 바뀌고 나서 옛날꺼랑 msw 설정이 바뀌었더라구요그런데 강의대로 msw 설정을 하니 ssr 적용이 제대로 안되는 것 같습니다.msw 설정 후 페이지의 network 탭에 localhost document의 미리보기 내용이 없습니다. ssr이 된다면 document에 미리보기에 내용이 넘어와야 하는데 msw 설정 후에 없습니다. 옛날에 만들어 놓았던, next14 버전으로 했었던 프로젝트에서는 미리보기에 내용이 잘 담겨 ssr이 잘되고 있고,15버전으로 진행한 프로젝트에서layout에 있는 mswprovider 컴포넌트를 없애주니 다시 미리보기에 내용이 생기는 것으로 보아 msw 설정에서 문제가 생긴 것으로 추측됩니다. 아래는 옛날 14 버전으로 진행했던 코드입니다. msw 2.1 버전입니다."use client"; import { useEffect } from "react"; export const MSWComponent = () => { useEffect(() => { if (typeof window !== "undefined") { if (process.env.NEXT_PUBLIC_API_MOCKING === "enabled") { require("@/mocks/browser"); } } }, []); return null; }; 아래는 지금 하고있는 코드입니다. msw 2.7.3 버전입니다."use client"; import { Suspense, use } from "react"; import { handlers } from "@/mocks/handlers"; const mockingEnabledPromise = typeof window !== "undefined" // browser일 때 ? import("@/mocks/browser").then(async ({ default: worker }) => { if (process.env.NODE_ENV === "production") { return; } await worker.start({ // msw가 처리할 수 없는 요청이 들어왔을 때 onUnhandledRequest(request, print) { if (request.url.includes("_next")) { // next가 내부적으로 처리하는 url이기 때문에 msw가 처리할 필요 없음 그래서 return return; } print.warning(); }, }); worker.use(...handlers); (module as any).hot?.dispose(() => { worker.stop(); }); console.log(worker.listHandlers()); }) : Promise.resolve(); export function MSWProvider({ children, }: Readonly<{ children: React.ReactNode; }>) { // If MSW is enabled, we need to wait for the worker to start, // so we wrap the children in a Suspense boundary until it's ready. return ( <Suspense fallback={null}> <MSWProviderWrapper>{children}</MSWProviderWrapper> </Suspense> ); } function MSWProviderWrapper({ children, }: Readonly<{ children: React.ReactNode; }>) { // use 사용해서 promise 실행 기다리고 children return use(mockingEnabledPromise); return children; } 제 추측으로는 MSWProvider에 있는 Suspense때문에 ssr 이 안되는 것 같은데, 맞는지 궁금합니다.그리고 맞다면 next 사용시 msw로 데이터를 mocking 하게 되면 ssr 확인을 어떻게 해야 할까요??
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
상호작용 구분 질문
어떤 사이트들을 보면 스크롤 하면 그 화면에 맡게 자동으로 그 다음 리스트들이 로딩해서 보여주던데요 이방식은 상호 작용이 있는것인지상호 작용이 없다고 봐야 하는지 궁금하네요
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
배포 하다 보니 궁금해서요 (초보 입장)
2.20 배포하기를 하다 보니현재 api 서버를 미리 만들어 주셔서 테스트 했는데사실상 section2 프로젝트 안에서 db 연결해서 진행되게 allinone으로 개발하는게 더 초보 입장에서 이해하기 쉬운데 원래 이렇게 구분해서 작업해야 하나요
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
2.19 파비콘이 안보여요
import { Html, Head, Main, NextScript } from "next/document"; export default function Document() { return ( <Html lang="kr"> <Head /> {/* favicon 설정 */} <link rel="icon" href="/public/favicon.ico" /> <body> <Main /> <NextScript /> </body> </Html> ); } 파비콘 설정 설명이 없어서 chatgpt가 알려줘서 이렇게 했는데 안보이네요
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
fallback상태일때 메타태그
안녕하세요 강사님 질문이 있습니다. fallback 상태일때는 SEO가 적용이 되지 않는것은 이해가 됐는데 서버에서 요청한 페이지(book/4)를 내려주면 결국 해당 페이지에 대한 SEO가 다시 잘 적용이 되는데 굳이 fallback 상태일때도 SEO를 신경써줘야하는 이유가 있나요?
-
미해결Next + React Query로 SNS 서비스 만들기
react-query enabled 옵션
react-query 사용 시enabled 옵션이 true인 경우queryFn을 실행하지는 않지만queryKey는 생성되는데 queryKey가 안 생기게 하자니 Hook을 조건부로 작성할 수 없어서 이런 방법은 불가능하고 queryFn은 실행하지 않으니 괜찮다는 생각도 드는데예를 들면 ["post", id]가 있고 id가 null인 경우queryKey는 ["post", null]로 무조건 생성이 되더군요. Observe도 많은 곳에서 쓸 수록 2 or 3 이런 식으로 증가하고요. 이게 성능에 문제가 없을지 아니면 queryKey 생성까지 막을 수 있는 방법이 있는지 궁금합니다.
-
미해결[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
쿠폰 다시 부탁드려도 될가여?
기존강의 업데이트 된 정보를 이제 봐서 쿠폰 정보를 놓쳤는데 혹시 쿠폰 다시 보내주실 수 있으신가여?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
prefetch 속성 질문
강사님의 강의를 들으면서 test 페이지가 프로그래메틱하게 이동하기 때문에 따로 useEffect를 사용해 프리페칭되도록 만드는 것과, Link 컴포넌트에 prefetch 속성을 false로 하여 프리페칭되지 않게 만들 수 있다고 이해했습니다! 그런데 직접 코드를 작성하고 npm run start로 재실행한 뒤 새로고침을 했는데도 search 페이지에 필요한 js번들이 남아있고 test 페이지의 번들은 프리페칭되지 않았는데 어디가 문제인지 알 수 있을까요?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
서버 에러가 납니다.
const { id } = await params; const response = await fetch(`${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/${id}}`); const book = await response.json();book { statusCode: 500, message: 'Internal server error' }nest가 실행중인곳에는 Argument id is missing.PrismaClientValidationError: Invalid this.prisma.book.findUnique() invocation in/Users/leecho/dev/onebite-books-server/src/book/book.service.ts:55:41 52 } 53 54 async findOneBook(id: number) {→ 55 const book = await this.prisma.book.findUnique({ select: { id: true, title: true, subTitle: true, description: true, author: true, publisher: true, coverImgUrl: true }, where: { + id: Int } })Argument id is missing. 이런 에러가 나는데 왜 이럴까요..?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
ssg와 프리패칭에 대해 질문이 있습니다.
안녕하세요. 강의 잘 듣고 있습니다.Next.js는 오직 초기 접속시에만 HTML 파일을 불러와 Hydration 하고 그 이후의 페이지 이동은 리액트의 CSR(Client Side Rendering) 방식으로 처리하게 됩니다. 따라서 새롭게 HTML이 요청되지 않고 오직 브라우저측에서 JS Bundle을 실행해 컴포넌트를 교체하는 방식으로만 페이지 이동이 처리됩니다.라고 설명주셨는데요. 하지만 ssg 파트에서는 페이지 요청시 이미 빌드된 html 을 반환한다고 하셨는데 이 부분이 잘 이해가 되지 않습니다. 빌드를 하면 SSR를 설정하지 않은 페이지는 기본적으로 SSG로 작동하고, 그렇다면 굳이 프리페칭을 하지 않더라도 이미 완성된 페이지를 반환해주는게 아닌가 싶어서 질문드립니다. 라우터를 이용하여 페이지를 이동할때는 CSR로 작동하고 url에 직접 경로로 접속 요청을 할때 SSG로 작동하는건가요??두 가지 개념이 헷갈립니다
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
프리패칭에 관한 간단한 질문이 있습니다
prefetch를 명시적으로 false로 설정하면, 예상대로 해당 링크에 대한 프리패칭이 발생하지 않는 것이 확인되었습니다.<Link href={"/search"} prefetch={false}>Search</Link>그런데 신기한 점은, 해당 링크에 마우스를 호버했을 때 네트워크 탭에서 /search 관련 리소스들이 프리패칭되는 현상이 보였다는 것입니다. 혹시 이러한 동작은 Next.js에서 어떻게 정의되거나 불리고 있는지 궁금합니다!
-
미해결한 입 크기로 잘라먹는 Next.js(v15)
SSG의 fallback 옵션
SSG의 fallback 옵션에 따른 렌더링 방식에 대해 좀 더 구체적으로 알고 싶습니다.fallback: "blocking"일 때, 빌드 타임에 사전 생성하지 않았던 경로에 대해서, 이후 접속 요청이 들어와 사전 렌더링되고, .next 서버에 저장되는 걸 확인했는데요.1) 저장되는 걸 캐싱이라고 이해해도 될까요?2) 그러면 그 이후의 요청에서는 더이상 재생성되지 않고, 이 페이지를 클라이언트에게 전달하나요?fallback: true 일 때, 빌드 타임에 사전 생성하지 않았던 경로의 접속이 들어왔습니다. 그 때, getStaticProps로 불러오는 데이터를 제외하고, 먼저 레이아웃을 내려준다고 이해했습니다. 그리고 추후에 Props만 따로 반환받아 페이지를 렌더링한다고 했는데, 그럼 받은 데이터를 가지고, CSR이 되는 건가요?위 상황에서 CSR이 맞다면, 해당 내용은 검색 크롤러가 알아내지 못해 SEO에 불리할 것 같은데요. 아니면 검색 크롤러가 getStaticProps 데이터가 올때까지 기다리고 해당 내용도 반영해서 문제가 없나요?감사합니다.
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
수업내용의문
안녕하세요 [CSS 09-2-3] 폰트 - 폰트와 크로스브라우징 강의 마지막에 다음강의에 안내된 그림,차트 모달 관련 강의가 없습니다.섹션 09 => [JS 09-1-1] 수업내용이 [ CSS 09-1-1] 과 같습니다. 중복업로드된것이 아닌지요 ?
-
해결됨Next.js 까보기: "쓸 줄 아는 개발자"에서 "알고 쓰는 개발자"로
색션1 예제 코드 질문드립니다.
안녕하세요,Next.js 라우팅은 어떻게 구현 했을까?색션에서 예제코드 주소를 알 수 있을까요?
-
미해결[리뉴얼] React로 NodeBird SNS 만들기
nextjs 15버전 사용 가능할까요?
영상하고 15버전하고 차이가 좀 있는거 같습니다
-
해결됨[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)
20:34초에 await이 아무 효과가 없다고 뜨는데 사용하신 이유가 궁금합니다
✅ 모든 질문들은 슬랙 채널에서 답변드리고 있습니다.💡 ”로펀의 인프런 상담소” 슬랙 채널 가입하기 💡평일중에는 퇴근 이후(저녁 7시)에 답변을 받아보실 수 있고, 주말중에는 상시 답변드리고 있습니다.안녕하세요! 로펀님 강의 잘 보고 있습니다 ㅎㅎ다름이 아니고 TodoList에서 할일 CRUD 기능을 구현할 때 20:34초에서 onChange 함수에 async, await를 걸어주셨는데, hover 하니까 await이 아무 효과가 없다고 뜨더라구요혹시 그럼에도 await를 달아주신 이유가 있나요?이전에 같이 일하던 동료분도 가끔 이렇게 쓰셨었는데.. 그때는 제가 await가 아무런 작용을 안하는데 왜 쓰지? 하면서 다 뺐었거든요.. 😂그러면 안됐을까요... 🥲 궁금합니다!!
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
ISR on-demand 사용해서 전체 새로고침 없이 새로운 추천도서 받아오기
안녕하세요!ISR on-demand 활용해서 인덱스 페이지에서 전체 페이지 새로고침 없이"새로 추천 받기" 버튼을 눌렀을 때 추천 도서(recoBooks)만 새롭게 받아오도록 구현하고 싶습니다.getStaticProps를 통해 전달된 recoBooks가 useState의 초기값으로 들어갈 때,해당 데이터도 여전히 빌드 타임에 fetch되어 정적 HTML과 함께 포함되는지 궁금합니다.개발자 도구를 보면 정적으로 렌더링되는 것 같은데, useState로 상태를 만들었기 때문에 초기 렌더링이 정적인지 아니면 클라이언트 측에서 동적으로 할당되는건지 헷갈립니다.// CSS Module import SearchableLayout from '@/components/searchable-layout'; import style from './index.module.css'; import { ReactNode, useState } from 'react'; import BookItem from '@/components/book-item'; import { InferGetStaticPropsType } from 'next'; import fetchBooks from '@/lib/fetch-books'; import fetchRandomBooks from '@/lib/fetch-random-books'; export const getStaticProps = async () => { console.log('인덱스 페이지'); const [allBooks, recoBooks] = await Promise.all([ // 병렬로 함수 호출하기 fetchBooks(), // fetchRandomBooks(), ]); return { props: { allBooks, recoBooks, }, }; }; export default function Home({ allBooks, recoBooks }: InferGetStaticPropsType<typeof getStaticProps>) { const [recommended, setRecommended] = useState(recoBooks); const revalidate = async () => { try { const response = await fetch('/api/revalidate'); const result = await response.json(); // console.log(result); if (result.revalidate) { //페이지 갱신이 됐을 때 const rebooks = await fetchRandomBooks(); setRecommended(rebooks); } else { //페이지 경신 안됐을 때 } } catch (err) { //에러처리 console.error(err); } }; // console.log(recoBooks); return ( <div className={style.container}> <section> <h3>지금 추천하는 도서</h3> <button onClick={revalidate}>새로 추천 받기</button> {recommended.map((book) => ( <BookItem key={book.id} {...book} /> ))} </section> <section> <h3>등록된 모든 도서</h3> {allBooks.map((book) => ( <BookItem key={book.id} {...book} /> ))} </section> </div> ); } Home.getLayout = (page: ReactNode) => { return <SearchableLayout>{page}</SearchableLayout>; };
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
2.7 글로벌 레이아웃 질문
강사님 영상대로 했는데 왜 저부분이 왜 적용이 안되는걸까요 혹 index.module.css 해도 배경을 하얀색으로 해야 하나요 강의 내용에는 별 말씀이 없으셨는데