묻고 답해요
143만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
이미지 업로드 url 오류 입니다.
freeboard_frontend 이미지 업로드 부분 진행중인데 upload 버튼 클릭해서 이미지를 선택하면 Cannot destructure property 'url' of 'undefined' as it is undefined.이라는 안내창이 뜨면서 정상적으로 실행이 되지 않습니다.. 원인을 알 수 있을까요?다른 분 문의 글을 보고 혹시 apollo셋팅 문제인가 싶어 yarn add apollo-upload-client 와 yarn add -D @types/apollo-upload-client 를 추가로 설치 해봤는데도 문제 해결이 안됩니다..
-
미해결[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
fetchPointTransactionsOfBuying 질문
위 사진과 같이 search에 'Terra'를 검색했는데 "usedItem":null 인 정보까지 받아와지는데 왜 이런가요?
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
graphql에서 확인 시 게시물이 없다고 나옵니다
브라우저에 내용은 모두 잘 입력이 되고 console창에서도 _id가 잘 나왔는데 graphql로 넘어가서 등록된 부분을 확인하려 하니 등록된 게시물이 없다고 나옵니다. 어떤 부분이 문제인걸까요?
-
해결됨Next + React Query로 SNS 서비스 만들기
RQProvider 하위의 컨포넌트는 모두 Client component인가요?
"use client";하위의 컴포넌트는 Client로 랜더링 된다고 하신거 같은데,QueryClientProvider가 client에서 랜더링 되는건 아닌가요? 해당 파일을 가보니 'use client'를 사용하고 있어서요.<QueryClientProvider></QueryClientProvider>로 감싸도 그 하위에 컴포넌트들이 SSR가 되는지 궁금합니다. 'use client' import * as React from 'react' import type { QueryClient } from '@tanstack/query-core' export const QueryClientContext = React.createContext<QueryClient | undefined>( undefined, ) export const useQueryClient = (queryClient?: QueryClient) => { const client = React.useContext(QueryClientContext) if (queryClient) { return queryClient } if (!client) { throw new Error('No QueryClient set, use QueryClientProvider to set one') } return client } export type QueryClientProviderProps = { client: QueryClient children?: React.ReactNode } export const QueryClientProvider = ({ client, children, }: QueryClientProviderProps): React.JSX.Element => { React.useEffect(() => { client.mount() return () => { client.unmount() } }, [client]) return ( <QueryClientContext.Provider value={client}> {children} </QueryClientContext.Provider> ) }
-
해결됨[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)
Next.js Part 2 - Server Action, Metadata
안녕하세요 ~해당 강의 8:26 즘에 http://localhost:3000/users 검색했을때 저는 타입에러가 뜨면서 강좌에서 처럼 결과가 검색이 안되는데 어떻게 해야 할까요 ?
-
해결됨Next + React Query로 SNS 서비스 만들기
connect.sid 삭제가 되지 않습니다.
개별적으로 서버를 만들어서 진행중입니다.// 로그인시 서버에서 발급하는 코드 response.cookie('connect.sid', accessToken, { httpOnly: true, sameSite: 'none', secure: false, }); // 프론트에서 아래와 같이 저장 if (res.ok && res.status === 204) { let setCookie = res.headers.get("set-cookie"); if (setCookie) { const parsed = cookie.parse(setCookie); cookies().set("connect.sid", parsed["connect.sid"]); const user = jwtDecode(parsed["connect.sid"]); return { ...user, }; } } // 서버에서 삭제하는 코드 logout(request: any, response: Response) { const { user } = request; response.clearCookie('connect.sid', { httpOnly: true, sameSite: 'none', secure: false, }); ... }로그인 하면 서버에서 쿠키 설정 -> 프론트에서 저장을 진행한 후, 로그아웃시 위 코드처럼 삭제하도록 하고있습니다.강의 하단부에 작성해주신것 처럼 아래와 같이 events부분에 작성하였는데 쿠키 삭제가 되지 않습니다 ㅠㅠ events에 넣지 않고 강의 그대로 했을 때는 s%3..으로 바뀌어서 삭제되지 않습니다. events에 넣었을때는 아예 값도 바뀌지 않고 삭제되지 않습니다. 어떤 작업이 필요할까요 ㅠㅠ //auth.ts events: { signOut: async (data) => { const token = cookies().get("connect.sid"); if (!token) return; const res = await logout(token.value); console.log("signOut"); }, }, // logout fetch export const logout = async (token: string) => { const res = await fetch(`${BASE_URL}/logout`, { method: "POST", headers: { Authorization: `Bearer ${token}`, }, credentials: "include", }); return res; };
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
types.ts 생성 오류
필요한 요소들 다 설치 되어있고, 오타없이 작성했는데도Unable to find template plugin matching '-typescript' 오류와 함께 types.ts가 생성이 안됩니다. 혹시나해서 >yarn add -D @graphql-codegen/typescript 다시 설치했지만 같은 오류가 뜹니다. >@graphql-codegen/typescript-plugin 도 설치해봤는데 아래와 같은 오류로 설치가 안되네요
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
css, div size와 크기가 다른 background image 적용 문의
background-image에 적용하는데 있어서 문의가 있습니다.outerbox.png 이미지 키기는 807px 544px 로 나옵니다.현재 outerbox css class에서 width 888px로 주면서 대략 81px 정도가 이미지가 반복되어서 표시됩니다. 이미지 반복을 없애기 위해서 아래와 같은 css를 추가했는데 이번에는 이미지가 잘려서 보입니다.background-repeat: no-repeat background-size: cover강사님 처럼 888px 544px div에 다른 이미지를 일치시켜서 표기하려면 어떻게 해야하나요 ?
-
해결됨Next + React Query로 SNS 서비스 만들기
server ,client 컴포넌트 랜더링 질문입니다!
안녕하세요~직접 만들어보고 비교하려고하는데 의문점이 하나 생겨서요!서버컴포넌트로 Link를 생성하고useSelectedLayoutSegment로 active클래스 처리해주려고 합니다!export default function SideBar() { const links = [ { path: "/home", pathName: "Home" }, { path: "/", pathName: "탐색하기" }, { path: "/", pathName: "쪽지" }, { path: "/", pathName: "프로필" }, ]; return ( <div className={classes.nav}> <div>logo</div> <nav> <ul> {links.map((link, idx) => { return ( <li key={`${link}-${idx}`}> <SideLink href={link.path}>{link.pathName}</SideLink> </li> ); })} </ul> </nav> <button className={classes.btn}>게시하기</button> </div> ); } interface SideLinkProps { children: ReactNode; href: string; } export default function SideLink({ children, href }: SideLinkProps) { const segment = useSelectedLayoutSegment(); const isSegment = href.slice(1); return ( <Link href={href} className={segment === isSegment ? classes.active : undefined} > {children} </Link> ); }근데 랜더링이Sidebar가 서버에서 초기 랜더링 하고client에서 class 반영한다 라고 이해하고 있는데용브라우저에서 "페이지 소스보기"를 했더니이미 class에 active가 반영된 상태로 랜더링 되어있어요캐시도 지우고 빌드해서 npm start 해봐도 "/home" path에서 소스보기 했더니 class가 반영된 상태로 서버에서 랜더링 되어옵니다.hook에 의한 할당될 class는 비워진 상태로 html를 생성하고 이후 client에서 hook을 이용한 클래스 부여가 된다고 알고 있었는데왜 서버에서 세그먼트 훅에 의한 class 처리가 되서 오는건지 궁금합니다!검색해도 명확한 답이 없어서 질문드려요!
-
해결됨[풀스택 완성] Supabase로 웹사이트 3개 클론하기 (Next.js 14)
슬랙 채널 개설 안내
안녕하세요 로펀입니다.강의를 수강하시면서 공지사항과 질문을 편하게 관리하기 위해 슬랙 채널을 개설했습니다 🙂강의와 관련된 질문이 있으실 경우 슬랙의 #supabase-nextjs-클론-강의 채널에서 질문 부탁드립니다. 💡 ”로펀의 인프런 상담소” 슬랙 채널 가입하기제 강의를 수강하시는 모든 분들은 슬랙 채널에 들어오실 수 있습니다. 슬랙에 들어오시면 더 빠르게 질문에 답변을 받아보실 수 있어요! 😉
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
500 오류
강의 듣고 복습하면서 과제도 푸는 중에 갑자기 인터넷 페이지로 보기 위해 실행을 하니, 500번 오류가 수업(example)랑 과제(practice) 둘다 뜨면서 아무것도 뜨지 않습니다.. import 해오는 부분은 아무 이상이 없고, 과제 같은 경우도 이전에 문제 없었던 페이지에서도 같은 500번 오류가 뜹니다 ㅠ
-
미해결Next + React Query로 SNS 서비스 만들기
type과 interface를 사용하는 기준이 궁금합니다.
model 폴더에서 PostImage는 interface를 사용하시고 Post컴포넌트에서는 type을 사용하셨는데 두 개를 다르게 사용하는 강사님만의 기준이 있나요 ? 제가 공부한 바로는 간단한 객체 타입일 경우 둘다 사용해도 상관없다. type은 복잡한 유니언 타입을 지정할때 사용한다 interface는 확장이 필요할 경우 사용한다고
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
재질문 합니다
위와 같이 작성하여 요청하였을 때이러한 에러가 나타납니다무엇이 문제일까요?검색해보니 전에도 질문이 올라왔는데 답변이 안달려있네요_id 값은 받아와지는데 name과 email 등 다른 정보 요청하면 위와 같은 오류가 나타납니다AI 답변 말고 강사님 답변 듣고싶습니다
-
해결됨[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
fetchUseditems 나 fetchUseditem에 제목이 어떤걸로 사용하나요?
판매자: name2019 LTE 32GB: remarks240.120원: price내용: contents태그: tags찜: pickedCount주소: useditemAddress를 사용을 하는데 "삼성전자 갤럭시탭 A 10.1" 이건 어디서 가져왔는지 모르겠습니다.title은 playground를 봐도 안 나와 있는데 어떤 걸 사용을 해야 하나요?
-
미해결[코드캠프] 부트캠프에서 만든 고농축 프론트엔드 코스
보다 직관적으로 수정하면 안되나요?
interface IUseMoveToPageReturn { onClickMoveToPage: (path: string) => () => void } export const useMoveToPage = (): IUseMoveToPageReturn => { const router = useRouter() const onClickMoveToPage = (path: string) => () => { void router.push(path) } return {onClickMoveToPage} }위 처럼 작성 후<button onClick={onClickMoveToPage("/markets")}>마켓 이동</button>호출 할 수도 있지만import { useRouter } from "next/router" export const useMoveToPage = (path: string) => { const router = useRouter() return () => router.push(path) }보다 직관적으로 하면 인터페이스로 typescript 지정 안하고<button onClick={useMoveToPage("/boards")}>게시판 이동</button>호출해서 쓸 수 있지 않나요?
-
미해결Next + React Query로 SNS 서비스 만들기
내가 나에게 채팅을 거는 이유
안녕하세요, 강사님, 개발 하는 도중에, test2계정으로 -> test1계정에 메시지를 걸 떄 원래는 test1계정이 나와야하는데, 현재 로그인한 유저의 정보를 불러오는 상황이 생겼습니다.이유가 무엇인지 궁금합니다!!import { HydrationBoundary, QueryClient, dehydrate, } from '@tanstack/react-query'; import style from './profile.module.css'; import UserPosts from './_component/UserPosts'; import { getUserPosts } from './_lib/getUserPosts'; import UserInfo from './_component/UserInfo'; import { auth } from '@/auth'; import { getUserServer } from './_lib/getUserServer'; import { User } from '@/model/User'; export async function generateMetadata({ params }: Props) { const user: User = await getUserServer({ queryKey: ['users', params.username], }); return { title: `${user.nickname} (${user.id})`, description: `${user.nickname} (${user.id})`, openGraph: { title: `${user.nickname} (${user.id}) / Z`, description: `${user.nickname} (${user.id})`, // 프로필 images: [ { url: `https://z.nodebirde.com${user.image}`, // upload width: 800, height: 600, }, ], }, }; } type Props = { params: { username: string }; }; export default async function Profile({ params }: Props) { const { username } = params; const queryClient = new QueryClient(); const session = await auth(); // 사용자 정보 쿼리로 가져옴 await queryClient.prefetchQuery({ queryKey: ['users', username], queryFn: getUserServer, }); // 해당 유저의 게시글 await queryClient.prefetchQuery({ queryKey: ['posts', 'users', username], queryFn: getUserPosts, }); const dehydratedState = dehydrate(queryClient); // 서버쪽에서 쿼리를 해온 것을 나중에 dehydratedState로 받으면 됨. // const user = { // id: 'zerohch0', // nickname: '제로초', // image: '/5Udwvqim.jpg', // }; return ( <main className={style.main}> <HydrationBoundary state={dehydratedState}> <UserInfo username={username} session={session} /> <div> <UserPosts username={username} /> </div> </HydrationBoundary> </main> ); }
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
소스 수정 후 자동 컴파일 문의드립니다.
1.3 NextJS 설치 편에서다크모드 설정하는 부분에서 문의드립니다.<ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange > {children} </ThemeProvider>설정 후, 영상에서는 dark, light로 수정하면 반영되는것을 확인할 수 있는데 제 코드에서는Warning: Extra attributes from the server: class,style그리고Warning: Prop className did not match. Server: "__className_aaf875 vsc-initialized" Client: "__className_aaf875"라는 워닝이 발생하여 자동적으로 반영되지 않는 것을 확인했습니다.해당 이슈를 수정할 수 있는 방법이 있을까요 ?
-
미해결Next + React Query로 SNS 서비스 만들기
next-auth session expire 관련 질문이 있습니다.
안녕하세요. 우선 강의 너무 잘 보고 있습니다 감사합니다!강의 내용을 기반으로 NextAuth 관련 작업을 하다가 궁금한 점이 생겼습니다.NextAuth로 signIn을 할 때 세션 정보가 쿠키에 저장되는데, 이때 max-age 옵션을 따로 설정하지 않으면 기본적으로 1달로 설정되고 있는 것 같습니다. 찾아보니 max-age 값을 최대값으로 설정하려고 해도(예: 4년), NextAuth에서는 자체적으로 최대 1년으로 제한하는 것 같습니다.여기서 제가 궁금한 것은, NextAuth를 사용하면 쿠키의 max-age가 최대 1년이고, 그렇다면 1년 후에 세션이 만료되니까 모든 사용자가 로그아웃되는 것인가? 라는 생각이 들었습니다.세션 저장 기한을 무기한으로 설정하는건 불가능해보이고,찾아보니 서버 환경에서 세션을 업데이트할 수 있는 unstable_update라는 함수를 발견했는데 문서에서 해당 함수는 세션 정보를 업데이트하는 것이고 cookie에 저장된 세션 자체의 expire를 조정하는 예시는 나와있지 않아서 이걸 사용하는게 맞는지도 확신이 안드는 상태입니다 ㅠㅠ지속적으로 접속하는 사용자에 한해서 세션 만료 시간을 연장할 수 있는 방법이 따로 있을까요?
-
해결됨Next + React Query로 SNS 서비스 만들기
챕터1까지 듣고 질문입니다. 새로고침해도 @modal이 유지되게 할 순 없을까요?
안녕하세요! 강의 잘듣고있습니다.login 폴더가 불필요한 루트 인 것 같아서 바로 인터셉터 라우터를 이용해 @modal로 연결했습니다.<Link href="/i/flow/login" className={styles.login}>로그인</Link>또 추가로 새로고침 해도 Modal을 유지하고 싶어서i/flow/login폴더에서 아래와 같이 마운트시에 인터셉터 하도록 유도하였습니다."use client"; import { useRouter } from "next/navigation"; import { useEffect } from "react"; export default function Login() { const router = useRouter(); useEffect(() => { router.replace("/i/flow/login"); }, [router]); return null; } 기존 유입방식으로 SSR Page에서 i/flow/login으로 이동 시, 인터셉터 라우팅하여 병렬 라우팅 하던것과 달리,바로유입 -> i/flow/login -> (replace) -> (.)i/flow/login/page.tsx 순으로 @modal이 출력될줄 알았는데모달이 출력되질 않네요..이유가 i/flow/login으로 바로 접속했기에 상위 폴더 영역에서 {modal}을 선언한 layout을 찾지 못하기 때문에 아무것도 뜨지 않는건가요?제가 이해한 것이 맞을지 검색해도 잘 안나와서 질문드립니다!
-
해결됨기초부터 배우는 Next YTMusic 클론 코딩 (with next.js 14, UI 마스터)
정적배포
안녕하세요 ! 강의를 따라하고있다가문득 생각이 들었는데요.channel / [id] 이렇게 동적 페이지가 나오게 되면 정적 배포를 하게 될땐 어떤 방식으로 하시게 되나요 ?