묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스
피그마 링크
안녕하세요 ~수업 듣기 시작하고 싸이월드 만들기 1탄에서 피그마가 나오는데 예제자료를 보면서 할수 있는 피그마 링크가 어디에 있는지요 ?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
상태관리
next는 자동적으로 캐시 저장기능이 있고 next에서도 DB 데이터가 필요한 페이지에서 직접 불러와서 사용하는 것을 권장한다 라고 말씀해주셨는데요 그러면 next는 보통 zustand, recoli, redux와 같은 상태관리 라이브러리를 사용하지 않는 것을 추천하시나요?아니면 사용하는 것을 추천하시나요??
-
미해결Next + React Query로 SNS 서비스 만들기
useEffect의 의존성 배열에 fetchNextPage를 넣는 이유가 궁금합니다
useEffect(() => { if (inView) { hasNextPage &&fetchNextPage(); } }, [inView, hasNextPage, fetchNextPage]);이렇게 useEffect를 작성하셨는데 fetchNextPage를 useEffect의 의존성배열에 넣는 이유가 궁금합니다
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
page를 클라이언트 컴포넌트로 작성해도 rsc_payload가 생성되는 이유는 무엇인가요??
안녕하세요! 덕분에 nextjs에 대해 깊에 알아가고 있습니다.제목처럼 page 컴포넌트에 'use client'를 명시하고 빌드 해도 해당 페이지에 대한 rsc_payload가 생성되어서 .next 빌드 파일을 살펴 보았습니다.페이지를 클라이언트 컴포넌트로 작성하던 서버 컴포넌트로 작성하던 .next 빌드 파일 server, static/chunk/app 폴더에 모두 page.js 파일이 생성되는 것을 확인했습니다.1. server 폴더에 있는 page.js는 해당 페이지에 필요한 번들 파일에 대한 내용인 거고, static 폴더에 있는 page.js는 해당 페이지에 그려질 내용에 대한 파일인 건가요??2. 그래서 page컴포넌트를 클라이언트 컴포넌트로 만들어도 페이지에서 사용할 번들 파일의 주소를 알아야 하기 때문에 rsc_payload를 만들어서 내려주는 건가요??
-
미해결Next + React Query로 SNS 서비스 만들기
레이아웃은 서버 데이터에 변경사항이 있을 때는 렌더링을 해주나요?
레이아웃은 네비게이션을 해도 상태를 유지하고 렌더링을 하지 않는다라고 이해했습니다.그런데, 오른쪽 레이아웃을 만들면서 패러렐 라우트라던지 template를 쓰지 않고 (비록 컴포넌트를 분리하긴 했으나) 서버에서 데이터를 뿌려주는 미래를 상상하고 쭉 코드를 짜고 계시는 모습을 보면서,레이아웃이 서버 데이터는 변경사항을 화면에 반영해주는 것처럼 이해가 되었습니다.뒷부분은 수강하지 않았습니다. 제가 잘못 이해 중인가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
padding 과 box-sizing 질문
14분 부터 css 전체선택자 box-sizing 이 border-box 라서 padding 을 하게되면 a 태그의 크기가 줄어들어야 하는 것 아닌가요? 왜 padding을 통해 크기를 키운다고 말씀하시나요?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
스트리밍으로 받은 <script />내부의 데이터가 SEO에 영향이 가는지 알고 싶어요
안녕하세요 !강의를 듣기전부터 궁금했던 내용인데 강의를 듣고나서도 답을 찾지 못해서 질문을 남깁니다..!개발자도구 > Network 탭 > 문서 > 응답이나 소스보기에 서버사이드에서 불러온 데이터가 HTML로 만들어져있으면 SEO에 영향을 주는 데이터라고 알고 있어요제가 혼자 테스트해보려고 만든 스트리밍에서는 <script /> 내부에만 서버 사이드에서 패치한 데이터가 들어가있고 HTML로 만들어지지는 않았더라고요( 아마 <script />에 있는 정보가 RSC Payload겠죠..? )그래서 이게 SEO에 영향이 가는 데이터일지 궁금해서 여기저기 찾다가 발견한 Next Playground에서는 HTML로도 만들어지고 <script />에도 들어가있더라고요최종적으로 궁금한것은 <script />에만 들어있는 스트리밍된 데이터도 SEO에 영향을 주는지가 궁금해요그리고 영향을 주든 안주든 이런 정보는 어디서 찾아봐야하는지 어떻게 검증하는지 알고 싶습니다..!( 참고로 Playground에서 패치하는 첫번째 리스트의 이름인 Fusce commodo porta로 확인해봤습니다! )
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
7.7 리뷰 삭제 실습
안녕하세요!등록되어 있는 리뷰를 삭제하기를 누르게 되면"Error: Internal Server Error" 에러가 발생합니다 백엔드 로컬 서버 콘솔에서는 아래의 사진과 에러 메세지가 뜹니다해결했습니다!
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
jsbundle의 이름이 도중에 변경 되어도 nextjs가 인지하고 받아올 수 있나요??
안녕하세요 덕분에 next.js를 깊게 공부할 수 있었습니다.next.js는 기존 리액트와 다르게 jsbundle(청크) 파일을 나누어 받아 옵니다.강의에서 본 것처럼 청크 파일들이 각각의 유니크한 해쉬 값을 가지는 것도 확인했습니다.시나리오next 프로젝트를 빌드배포 된 웹페이지를 오픈next 프로젝트를 다시 빌드기존의 웹페이지를 새로고침 하지 않고, 페이지 이동기존 리액트 프로젝트에서는 하나의 청크 파일을 처음 한 번에 받아서 새로고침 전까지 1번의 이전 빌드된 웹페이지로 동작이 되는 것으로 알겠는데요.next프로젝트에서는 jsbundle과 rsc_payload를 필요한 시점에 받으니까 새로 빌드한 파일엔 기존 청크해시 값과 달라서 문제가 생기지 않을까? 라는 생각이 들었습니다. 그런데 테스트 해보니 별다른 문제가 생기지 않는 것 같더라구요.. jsbundle과 rsc_payload의 유니크한(해쉬) 파일 이름이 도중에 변경 되더라도 next 서버측에서 찾을 수 있게 조치가 되어 있는 걸까요?
-
미해결한 입 크기로 잘라먹는 Next.js(v15)
section02에다 프로젝트 설치후 npm run dev 입력했더니 이미지가 깨집니다
안녕하세요npx create-next-app@14 section02 설치 후 (강의 8분49초), npm run dev 실행후 브라우저에 localhost:3000 입력했더니 이미지가 깨져서 나옵니다.해당 프로젝트를 지우고 다시 설치해도 그대로입니다.
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스 결제 관련 문의드립니다.
현재 강의와 관련없는거 알지만 혹시나해서 문의남깁니다. 현재 강의 구매한 분들 대상으로[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스강의 90% 할인해서 구매할 수 있었던 것으로 기억하는데, 이미 기간이 끝난거 알지만 지금이라도 할인된 가격으로 구매할 수 있을까 해서 문의남깁니다.
-
미해결Next + React Query로 SNS 서비스 만들기
서버, 클라이언트 데이터 중복 호출 문제
강의와 같이 구현한다면page.tsx 에서 데이터 fetchPostRecommends.tsx 에서 는 다시 데이터를 fetch 하지 않고 HydrationBoundary를 통해 넘어온 데이터를 사용이렇게 page.tsx 에서만 데이터가 fetch 되어야 맞는거지요 ?제가 구현한 소스코드에서는 getPostRecommends 쪽에 로그를 찍어서 확인해보니 page.tsx 에서도 한번 호출하고 PostRecommends.tsx 에서도 한번 호출해서 총 2번 로그가 찍히더라구요.이론대로라면 page.tsx 에서 1번 호출했을 때만 로그가 찍혀야 하는 것이 맞는거죠?아 강의는 " 클라이언트 react-query" 입니다.
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
에러 핸들링 실습 예제
안녕하세요!6.5 에러 핸들링 강의를 들으며 실습을 진행하고 있는데브라우저에 http://localhost:3000을 접속하면 "지금 추천하는 도서"에 캐시를 사용안하는데 데이터가 조회가 되고 있습니다. 코드를 잘못적었을까봐 깃허브에 올려주신 소스로 개발서버 실행해도 같은 상황입니다.
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
풀라우트캐시 3강. book/4를 URL로 요청시 렌더링 과정
안녕하세요 선생님, 질문이 있어서 남깁니다.만약 book/4를 URL로 요청하면 과정이 URL로 book/4 요청 시 Link 등이 없으므로 프리페칭은 안됨- 서버에서 JS 실행 (렌더링)- 렌더링 된 HTML 브라우저에 넘김- 브라우저에서 화면에 렌더링- 서버에서 JSBundel, RSC payload 브라우저에 넘김- 수화과정- 상호작용 가능 이게 맞나요? book/1~3은 staticPage로 풀라우트캐시되어있으니URL로 요청하면 풀라우트캐시에서 바로 HIT해서 주는거고요?
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
suspense관련 질문 있습니다! 섹션6 5.2풀 라우트 캐시2강의
안녕하세요! 강의 잘 듣고 있습니다! suspense태그 관련 질문이 있습니다! 5.2 풀 라우트 캐시2 강의에서 저희가 useSearchParams() 훅이 빌드타임에서 실행되는 오류를 없애기 위해 <SearchBar/ > 컴포넌트를 suspense로 감싸잖아요 이때 강의 4분45초 쯤에서 사전 suspense를 사용해서 이제 사전 렌더링 과정에서 완전히 배제한다고 하셨는데, 그러면 페이지를 만들때 suspense로 감싼 컴포넌트는 nextjs app router방식이 아니라 csr방식으로 구현이 되는건가요 나머지 컴포넌트들만 approuter의 사전 렌더링 방식으로 구현이 되는건가요?? 제가 정리했을땐 동적 페이지도 정적 페이지도 사전렌더링의 시점은 다르지만 (요청할때, 빌드할때) 사전렌더링이라는 기능은 nextjs에서 기본으로 작동한다고 알고 있습니다! 그래서 사전렌더링에서 완전 배제된다는 부분이 헷갈려서 질문 남깁니다!
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
컴포넌트 단위 에러 처리는 이전 처럼 에러 바운더리를 래핑하면 되나요?
🚨 아래의 가이드라인을 꼭 읽고 질문을 올려주시기 바랍니다 🚨질문 하시기 전에 꼭 확인해주세요- 질문 전 구글에 먼저 검색해보세요 (답변을 기다리는 시간을 아낄 수 있습니다)- 코드에 오타가 없는지 면밀히 체크해보세요 (Date와 Data를 많이 헷갈리십니다)- 이전에 올린 질문에 달린 답변들에 꼭 반응해주세요 (질문에 대한 답변만 받으시고 쌩 가시면 속상해요 😢)질문 하실때 꼭 확인하세요- 제목만 보고도 무슨 문제가 있는지 대충 알 수 있도록 자세한 제목을 정해주세요 (단순 단어 X)- 질문의 배경정보를 제공해주세요 (이 문제가 언제 어떻게 발생했고 어디까지 시도해보셨는지)- 문제를 재현하도록 코드샌드박스나 깃허브 링크로 전달해주세요 (프로젝트 코드에서 문제가 발생할 경우)- 답변이 달렸다면 꼭 확인하고 반응을 남겨주세요- 강의의 몇 분 몇 초 관련 질문인지 알려주세요!- 서로 예의를 지키며 존중하는 문화를 만들어가요. - 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
params부분 에러
fetch 부분에서 다음과 같이 작성하였는데 params.id부분에서 id 부분에Property 'id' does not exist on type 'Promise<{ id: string | string[]; }>'.ts(2339)이러한 에러가 발생합니다. const result = await fetch( `${process.env.NEXT_PUBLIC_API_SERVER_URL}/book/${params.id}` );
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
캐싱 옵션이 적용되질않아요.
어떠한 옵션을 적용해도 콘솔과 같은데 뭐가 잘못되었을까요?새로고침이나, 로고를 눌러서 인덱스 파일에 가도 똑같은 로그만 나타납니다.
-
미해결따라하며 배우는 리액트 A-Z[19버전 반영]
react-beatiful-dnd에서 문제가 발생합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 기능상에 문제가 있는건 아니지만, 계속해서 아래의 에러가 발생합니다.사용하고 있는 버전의 문제일까요?{ "name": "react-todo-app", "version": "0.1.0", "private": true, "dependencies": { "@testing-library/dom": "10.4.0", "@testing-library/jest-dom": "6.6.3", "@testing-library/react": "16.2.0", "@testing-library/user-event": "13.5.0", "react": "^19.0.0", "react-beautiful-dnd": "13.1.1", "react-dom": "^19.0.0", "react-scripts": "5.0.1", "web-vitals": "2.1.4" }, "scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject" }, "eslintConfig": { "extends": [ "react-app", "react-app/jest" ] }, "browserslist": { "production": [ ">0.2%", "not dead", "not op_mini all" ], "development": [ "last 1 chrome version", "last 1 firefox version", "last 1 safari version" ] }, "devDependencies": { "autoprefixer": "10.4.20", "postcss": "8.5.3", "tailwindcss": "3.4.17" } } Lists.jsimport React from 'react'; import List from './List.js' import { DragDropContext, Draggable, Droppable } from 'react-beautiful-dnd'; const Lists = React.memo(({todoData, setTodoData}) => { // console.log('Lists Component') const handleEnd = (result) => { if(!result.destination) return; const newTodoData = Array.from(todoData); const [reorderedItem] = newTodoData.splice(result.source.index, 1); newTodoData.splice(result.destination.index, 0, reorderedItem); setTodoData(newTodoData); } return <div> <DragDropContext onDragEnd={handleEnd}> <Droppable droppableId='todo'> {(provided, snapshot) => ( <div ref={provided.innerRef} {...provided.droppableProps} > {(todoData ?? []).map((data, index) => ( <Draggable key={data.id} draggableId={data.id.toString()} index={index} > {(provided, snapshot) => ( <List key={data.id} id={data.id} title={data.title} completed={data.completed} provided={provided} snapshot={snapshot} todoData={todoData} setTodoData={setTodoData} /> )} </Draggable> ))} {provided.placeholder} </div> )} </Droppable> </DragDropContext> </div>; }) export default Lists; App.jsimport React, {useState} from 'react' import "./App.css" import Lists from './components/Lists' import Form from './components/Form' export default function App() { // console.log('App Component') const [todoData, setTodoData] = useState([ { id: 1, title: '운동하기', completed: false, }, { id: 2, title: '공부하기', completed: false, } ]) const [value, setValue] = useState("") return ( <div className="flex items-center justify-center w-screen h-screen bg-blue-100" > <div className='full p-6 m-4 bg-white rounded shadow md:w-3/4 md:max-w-lg lg:w-3/4 lg:max-w-lg'> <div className="flex justify-between mb-3"> <h1>할 일 목록</h1> </div> <Lists todoData={todoData} setTodoData={setTodoData} /> <Form value={value} setValue={setValue} setTodoData={setTodoData}/> </div> </div> ) }
-
해결됨한 입 크기로 잘라먹는 Next.js(v15)
Error: Route "/search" used `searchParams.q`. `searchParams` should be awaited before using its properties.
안녕하세요 강사님해당 오류는 최신버전에서 발생하는건가요?! 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:12:32) 10 | return ( 11 | <div>> 12 | Search 페이지 : {searchParams.q} | ^ 13 | <ClientComponent> 14 | <></> 15 | </ClientComponent>import ClientComponent from "@/components/client-component"; export default function Page({ searchParams, }: { searchParams: { q?: string; } }) { return ( <div> Search 페이지 : {searchParams.q} <ClientComponent> <></> </ClientComponent> </div> ) }