Execution failed for task ':org.zerock.mallapi.MallapiApplication.main()'. > Process 'command 'C:\Users\User\.jdks\temurin-21.0.9\bin\java.exe'' finished with non-zero exit value 1 * Try: > Run with --stacktrace option to get the stack trace. > Run with --info or --debug option to get more log output. > Run with --scan to generate a Build Scan (powered by Develocity). > Get more help at https://help.gradle.org .
안녕하세요 선생님. 강의를 모두 수강한 후 복습을 하던 중 궁금한 점이 생겨 질문드립니다. 좋아요 기능에서 동시성 문제를 해결하기 위해 행 잠금 을 사용하는 것으로 이해했습니다. 이 경우, 첫 번째 유저의 좋아요 요청이 처리되는 동안 해당 행이 잠기게 되는데, 만약 동시에 많은 사용자(수백~수천 명)가 좋아요 버튼을 누르는 상황 이라면 요청들이 순차적으로 대기하게 되어 응답 지연이 발생되지는 않나요?? 또한 이런 이유 때문에 클라이언트 단에서는 낙관적 업데이트 를 적용하는게 맞는걸까요??
안녕하세요 짐코딩님! 클로드 코드 가격 정책 수업을 듣고 나서 결제 관련 의문이 드는 점이 발생하여 문의 드립니다. 현재 Cursor AI Pro 계정을 $20씩 지불하여 사용중입니다. 이러한 상황 속에서 클로드 코드를 추가적으로 $20를 Pro 버전을 추가적으로 결제해야 되는 건가요? 그렇게 될 경우 총 $40라는 부담스러운 가격을 지불해야되는 상황인데 어떻게 해야될 지 잘 모르겠습니다. 해당 수업을 따라가기 위해서는 Cursor AI 구독을 취소하고 Claude Code Pro를 결제해서 수업을 들어야 하는 지 여부에 대해서 여쭤보고 싶습니다.
클로드 코드 가격 정책 수업을 듣고 나서 결제 관련 의문이 드는 점이 발생하여 문의 드립니다. 현재 Cursor AI Pro 계정을 $20씩 지불하여 사용중입니다. 이러한 상황 속에서 클로드 코드를 추가적으로 $20를 Pro 버전을 추가적으로 결제해야 되는 건가요? 그렇게 될 경우 총 $40라는 부담스러운 가격을 지불해야되는 상황인데 어떻게 해야될 지 잘 모르겠습니다. 또한 이러할 경우 해당 수업을 따라가기 위해서는 Cursor AI 구독을 취소하고 Claude Code Pro를 결제해서 수업을 들어야 하는 지 여부에 대해서 여쭤보고 싶습니다.
toggleTodo = useCallback( ( id : number) => { <-- 여기 이 지점에 todos 라는 state 값이 필요한 상황 ( 체크 로직 등등.. ) setTodos( (todos) => todos.map( (todo) => todo.id === id ? { ...todo, completed: !todo.completed } : todo ); }, []); 위 부분에 todos 의 state 값이 필요하게 되면 의존성 배열에 todos 를 넣어줘야 될꺼 같은데요. 이렇게 되면 React.memo 에 의해 전달될 toggleTodo props 도 변경되게 될것으로 예측 되고 결국 자식 컴포넌트들이 리렌더링이 계속 발생되지 않을까 싶은데요. 위 부분에 todos 의 state 값이 필요하게 될 경우에는 어떻게 처리를 해줘야 될까요?
PS D:\programming\react-Lee\projects\section12> vercel login vercel : 'vercel' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름 이 정확한지 확인하고 경로가 포함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + vercel login + ~~~~~~ + CategoryInfo : ObjectNotFound: (vercel:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException PS D:\programming\react-Lee\projects\section12> --- vercel login이란 명령어를 입력하니 위와 같은 에러가 뜨는데요. vscode에 아무것도 안깔고 회원가입만 했다고 vercel이란 명령어를 쓸 수 있는건가요??
안녕하세요! 유익한 강의 감사합니다. Executor 설명 중 한 가지를 정정드리고 싶습니다. 강의에서 설명해주신 내용은 maxPoolSize까지 바로 스레드가 생성되는 것으로 이해될 수 있는데, 실제 동작은 먼저 corePoolSize만큼 스레드를 생성하고, 그 이후 요청은 큐에 쌓이며, 큐가 가득 찼을 때 maxPoolSize까지 확장되는 구조입니다. 물론 강의 흐름상 의도적으로 설명을 단순화하신 것일 수도 있습니다만, 혼동될 수 있는 부분이라 참고용으로 댓글 남깁니다!
안녕하세요 강의 정말 잘 듣고있습니다. 현재 강의를 무한 중첩 댓글 구현하기까지 수강했습니다! 테스트를 위해 여러가지 사항들을 직접 체크하고있는데 Github로 로그인한 사용자의 정보들(avatar_url, name)들은 기본적으로 사용하지 않고 랜덤한 닉네임과 기본 아바타 이미지가 나오는게 정상 동작일까요? 제가 이해한 흐름은 다음과 같습니다. 1. Github(OAuth) 로그인 2. Supabase Authentication > Users에 사용자 생성 (profile 테이블에는 아직 생성 되지 않음) 3. SessionProvider에서 useProfileData 호출 export default function SessionProvider({ children }: { children: ReactNode }) { const session = useSession(); const setSession = useSetSession(); const isSessionLoaded = useIsSessionLoaded(); const { data: profile, isLoading: isProfileLoading } = useProfileData( session?.user.id, ); useEffect(() => { supabase.auth.onAuthStateChange((event, session) => { setSession(session); }); }, []); if (!isSessionLoaded) return <GlobalLoader />; if (isProfileLoading) return <GlobalLoader />; return children; } 4. fetchProfile(userId) 실행 export async function fetchProfile(userId: string) { const { data, error } = await supabase .from("profile") .select("*") .eq("id", userId) .single(); if (error) throw error; return data; } Supabase Table Editor > profile 에는 아무런 결과가 저장되어 있지 않기 때문에 PostgrestError: PGRST116 에러 발생 useProfileData catch 블록 실행 → createProfile 호출 랜덤한 닉네임 + avatar_url이 기본으로 저장 만약 제가 이해한 흐름이 맞다면 어떤 방법을 써야할까요? 제일 먼저 드는 생각은 createProfile에 session을 매개변수로 받아서 session.user.user_metadata.full_name 과 avatar_url 을 insert에 넣는걸 생각했습니다. createProfile export async function createProfile(userId: string, session?: Session) { const { data, error } = await supabase .from("profile") .insert({ id: userId, // ↓ 여기 수정 했어용 nickname: session?.user.user_metadata?.full_name || getRandomNickname(), avatar_url: session?.user.user_metadata?.avatar_url || null, }) .select() .single(); if (error) throw error; return data; } use-profile-data.ts export function useProfileData(userId?: string) { const session = useSession(); const isMine = userId === session?.user.id; return useQuery({ queryKey: QUERY_KEYS.profile.byId(userId!), queryFn: async () => { try { const profile = await fetchProfile(userId!); return profile; } catch (error) { if (isMine && (error as PostgrestError).code === "PGRST116") { return await createProfile(userId!, session!); // 여기 session 추가 했어용 } throw error; } }, enabled: !!userId, }); } 이렇게 코드를 수정하고 profile table을 삭제한 후 다시 Github로 로그인 하면 사용자의 프로필 이미지와 이름이 받아와졌습니다. 더 효율적이거나 더 좋은 방법이 있을까요? 혹은 제가 잘못 알고 있는게 있을까요?
큰돌님 안녕하세요. 알고리즘강의부터 유튜브까지 잘 시청하고있습니다. 프론트엔드를 목표로 준비를 하고있는데 대부분 포트폴리오 페이지를 하나씩 구축을 하고 이력서와 같이 첨부하더라구요.. 과거에 리액트 + GSAP로 인터렉션 위주로 만들어놓은게 있지만 손볼것도 많고 요즘은 NextJS가 추세라하여 새로 만들어야할것같은데 이부분이 프론트 지원시 거이 필수적인지 궁금합니다.
React-Router 설정 강의 다름이 아니고요 강의 내용을 보면 생성위치가 PS: C\r2025\front\ch2 폴더 (당연히 ch2 겠지만요...^^) 로 되어있는데요 ch1 프로젝트에서 계속 진행하면 안되나요? 아니면 ch2 로 다시 만들어서 진행해야 할까요? 그리고 ch2 만들때 특이 사항이 없는지.. 갑자기.. frontend/ch2 폴더에서 진행을 하셔서요... (ch2 프로젝트 하나 생성해서 따라하면 땡이지만...ㅋㅋㅋ) 살짝 궁금해서 질문 드립니다.
안녕하세요! 제가 vercel에 배포를하려고 시도하고 있습니다. 현재까지 진행 상황과 문제를 정리하면 아래와 같습니다. 프로젝트 배포는 정상적으로 완료됨 그러나 브라우저에 접속 시 파비콘이 표시되지 않음 <link rel="icon" type="image/svg+xml" href="/favicon.ico" /> public 폴더 내 favicon.ico 파일 존재 로컬 개발 서버(npm run dev)에서는 정상적으로 표시됨 배포 후 URL 접속 시 브라우저 캐시를 지워도 여전히 표시되지 않음 혹시 Vercel 환경에서 파비콘이 정상적으로 나오도록 하기 위해 추가로 확인해야 할 부분이나, 권장 설정이 있을지 조언 부탁드립니다.