안녕하세요. 유용한 강의와 연습 문제 감사합니다. 파이썬 연습 문제 6번 관련하여 아래와 같이 2가지 질문 드립니다. 문제에서 결과로 요구한 값과 코드로 도출하신 값이 달라, (결과는 ID만 도출, 맨 아랫줄의 값은 도메인이 포함된 전체 이메일로 도출) 아래와 같이 코드를 짜서 결과 값에 맞게 새로 코드를 짜서 도출하긴 했는데, 이런 방법으로 도출을 했을 때 문제가 발생할 여지가 있는지 문의 드립니다. (저는 비전공자로, 코딩에 대한 지식이 전혀 없기 때문에 단순히 확인을 위해 문의 드리는 점 참고 부탁드립니다.) 함수를 정의할 때 쓴 result와, for문에 사용한 result는 같은 값이지만, 마지막에 해당 함수를 출력할 때는 result가 아닌 다른 이름( F )으로 지정 후 출력해도 같은 결과가 나오는 것을 확인하였습니다. 그렇다면 마지막에 함수를 출력하기 위해 쓴 result는 def 구문 안에 있는 result와는 무관하다고 보면 될까요? 다른 이름으로 지정하는 것에 관례적인 문제가 있는지도 궁금합니다. email = [' abc132@naver.com ', ' wow880@gmail.com ', ' hahahahaha@naver.com '] def classifyEmail(email): result = {"naver" : [], "gmail" : []} for e in email: domain = e.split("@")[1] ID = e.split("@")[0] if domain == " naver.com ": result['naver'].append( ID ) else: result['gmail'].append( ID ) return result F = classifyEmail(email) print( F ) 감사합니다.
안녕하세요. 강의 잘 듣고 있습니다. 강의 수강하면서 질문이 하나 있는데요. 지금 제 상황은 1차적으로 출처를 각주에 적지 않음 그냥 본문뒤에 (출처:)를 적는 식으로 통일함 예시) 한글 공부가 너무 어렵네요 (출처: 내 머릿속) 이제 최종적으로 "(출처:" 로 시작해서 ")"로 끝나는 모든 문장을 각주로 넣고 싶음 입니다. 그러면 생각나는 아이디어로는 "(출처:" 로 시작해서 ")"로 끝나는 문장마다 해당 지점에서 각주를 추가하고 복사 후 원래 문장은 지우는 방식으로 반복을 해야 할 것 같은데요. 그런데 혼자 씨름해봐도 쉽지가 않네요. 혹시 어떤 함수를 사용해야할지 도움 주시면 감사하겠습니다. 완벽한 코드가 아니더라도, 어떻게 사용할지 아이디어라도 주시면 제가 해결하겠습니다! 제가 필요한 부분만 수강중인지라, 제목에서 저와 상관없다고 하는 기능은 안 들어서 혹시 설명해주신 강의가 있다면 제목 말씀해주시면 수강하겠습니다.
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이란 명령어를 쓸 수 있는건가요??
안녕하세요 강의 정말 잘 듣고있습니다. 현재 강의를 무한 중첩 댓글 구현하기까지 수강했습니다! 테스트를 위해 여러가지 사항들을 직접 체크하고있는데 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 프로젝트 하나 생성해서 따라하면 땡이지만...ㅋㅋㅋ) 살짝 궁금해서 질문 드립니다.