안녕하세요! 지방 사립 4년제 내년 8월 코스모스 졸업 예정인 학생입니다. 아직 많이 부족하지만 무작정 공부하는 것보다 취직할 때 필요한 요소가 뭔지를 알고 빠르게 포트폴리오를 채우고 싶어 이번 강의를 듣게 되었습니다. 제 상황을 간략히 설명드리자면 그동안 진로를 정하지 못하고 이것저것 찍먹만 하다가 올해 하반기부터 백엔드로 진로를 정하고 본격적으로 학습하기 시작했습니다. 현재는 Spring 기초와 큰돌님 코딩테스트 강의 들으며 공부 중입니다. 공부를 하면 할수록 객체지향과 구현에 부족함을 절실히 느끼고 있습니다. 현재 제가 한 프로젝트를 영끌해 보면 그나마 과제 수준의 데이터 분석 프로젝트 2건과 완성도 낮은 개인 프로젝트 1건이 전부고 수상 경력, 대외활동은 없습니다. 이전에 진행한 개인 프로젝트는 LLM의 도움을 많이 받아서 Next.js+FastAPI+GeminiAPI를 활용하여 회원가입, 글쓰기 등 기본적인 CRUD, 작성한 게시물에 대해 AI에게 피드백을 받는 것을 구현하는 것 정도만 했습니다. 처음으로 웹 사이트를 만들다 보니 코드가 난잡하고, 기획/설계 없이 빠른 기능 구현에 힘을 쏟다 보니 한계가 보여 개발을 멈췄습니다. Q1. 기존에 한 개인 프로젝트는 어떻게 해야 할지 고민입니다. LLM의 도움을 많이 받기도 했고 취직에는 Spring이 유리하다고 생각해서, 포트폴리오용으로 살리는 게 나을지 폐기하고 새로운 프로젝트를 하는 게 나을지 고민입니다. 만약 포트폴리용으로 쓴다고 하면 코드와 구조를 개선해서 다시 만든다거나 Spring으로 새롭게 만들거나 해야 된다고 생각되는데 어떻게 생각하시나요? Q2. 부트캠프를 다니는 것을 고려 중인데 어떻게 생각하시는지 궁금합니다. 혼자 공부하는 것도 한계가 있고 부트캠프를 하면서 팀 프로젝트도 할 수 있어서 좋은 기회가 될 거라고 생각합니다. 큰돌님이 추천하는 부트캠프 중 지금 시기에 할 수 있는게 SW마에스트로와 프로그래머스 백엔드 과정 정도뿐인데 SW마에스트로에 들어가기엔 지금 포트폴리오도 초라해서 프로그래머스 백엔드 과정을 고민중입니다. 부트캠프 추천 영상에서 "강사의 질이 중요하다"고 하셨는데 강사의 경력을 판단하는 기준이 있는지도 궁금합니다. Q3. 팀 프로젝트 시작 시기와 팀원 구하는 팁 궁금합니다. 이번 강의에서 팀 프로젝트의 중요성을 많이 강조하셔서 빠르게 팀 프로젝트를 완성하는 걸 목표로 하고 싶은데 제 실력이 팀원들에게 민폐가 될까 봐 망설여집니다. 어느정도 기술 구현 능력을 갖췄을 때 팀 프로젝트를 참여하는 게 좋을까요? 그리고 스터디를 통해 팀원을 구하는 걸 추천하셨는데 스터디를 하다보면 흐지부지 끝나는 경우가 많던데 결국 최대한 다양한 사람을 만나보는 것 밖에 답이 없을까요?
3-5 스택 강의에서 쓰인 탑 문제 코드 스니펫에 정답과 현재풀이값이 불일치하는 오류가 있어서 알려드립니다. print("정답 = [0, 0, 0, 3, 3, 3, 6] / 현재 풀이 값 = ",get_receiver_top_orders([3,9,9,3,5,7,2])) 라고 되어 있는데 강의에서는 현재 풀이 값이 아래와 같이 나옵니다. 아래가 정답이 되어야 할 것 같습니다. [0, 0, 2, 3, 3, 3, 6]
안녕하세요 선생님. 강의를 모두 수강한 후 복습을 하던 중 궁금한 점이 생겨 질문드립니다. 좋아요 기능에서 동시성 문제를 해결하기 위해 행 잠금 을 사용하는 것으로 이해했습니다. 이 경우, 첫 번째 유저의 좋아요 요청이 처리되는 동안 해당 행이 잠기게 되는데, 만약 동시에 많은 사용자(수백~수천 명)가 좋아요 버튼을 누르는 상황 이라면 요청들이 순차적으로 대기하게 되어 응답 지연이 발생되지는 않나요?? 또한 이런 이유 때문에 클라이언트 단에서는 낙관적 업데이트 를 적용하는게 맞는걸까요??
안녕하세요. 유용한 강의와 연습 문제 감사합니다. 파이썬 연습 문제 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차적으로 출처를 각주에 적지 않음 그냥 본문뒤에 (출처:)를 적는 식으로 통일함 예시) 한글 공부가 너무 어렵네요 (출처: 내 머릿속) 이제 최종적으로 "(출처:" 로 시작해서 ")"로 끝나는 모든 문장을 각주로 넣고 싶음 입니다. 그러면 생각나는 아이디어로는 "(출처:" 로 시작해서 ")"로 끝나는 문장마다 해당 지점에서 각주를 추가하고 복사 후 원래 문장은 지우는 방식으로 반복을 해야 할 것 같은데요. 그런데 혼자 씨름해봐도 쉽지가 않네요. 혹시 어떤 함수를 사용해야할지 도움 주시면 감사하겠습니다. 완벽한 코드가 아니더라도, 어떻게 사용할지 아이디어라도 주시면 제가 해결하겠습니다! 제가 필요한 부분만 수강중인지라, 제목에서 저와 상관없다고 하는 기능은 안 들어서 혹시 설명해주신 강의가 있다면 제목 말씀해주시면 수강하겠습니다.
안녕하세요 강의 정말 잘 듣고있습니다. 현재 강의를 무한 중첩 댓글 구현하기까지 수강했습니다! 테스트를 위해 여러가지 사항들을 직접 체크하고있는데 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로 로그인 하면 사용자의 프로필 이미지와 이름이 받아와졌습니다. 더 효율적이거나 더 좋은 방법이 있을까요? 혹은 제가 잘못 알고 있는게 있을까요?