묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
궁금한게 있습니다 선생님!
안녕하세요 선생님.강의를 모두 수강한 후 복습을 하던 중 궁금한 점이 생겨 질문드립니다. 좋아요 기능에서 동시성 문제를 해결하기 위해 행 잠금을 사용하는 것으로 이해했습니다.이 경우, 첫 번째 유저의 좋아요 요청이 처리되는 동안 해당 행이 잠기게 되는데, 만약 동시에 많은 사용자(수백~수천 명)가 좋아요 버튼을 누르는 상황 이라면요청들이 순차적으로 대기하게 되어 응답 지연이 발생되지는 않나요??또한 이런 이유 때문에 클라이언트 단에서는 낙관적 업데이트 를 적용하는게 맞는걸까요??
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
리렌더링 관련 문의
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 값이 필요하게 될 경우에는 어떻게 처리를 해줘야 될까요?
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
OAuth 프로필 생성 관련 질문입니다.
안녕하세요 강의 정말 잘 듣고있습니다.현재 강의를 무한 중첩 댓글 구현하기까지 수강했습니다!테스트를 위해 여러가지 사항들을 직접 체크하고있는데 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에 넣는걸 생각했습니다.createProfileexport 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.tsexport 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로 로그인 하면 사용자의 프로필 이미지와 이름이 받아와졌습니다.더 효율적이거나 더 좋은 방법이 있을까요? 혹은 제가 잘못 알고 있는게 있을까요?
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
6.2 회원가입 구현 18:06 AuthResponse 관련 문의
안녕하세요, 강의 잘 듣고 있습니다!6.2강 회원가입 구현 강의 18:06경에 설명해주시는 AuthResponse 타입의 정의?가 변경된 것인지, 제 코드 에디터에는 아래와 같이 표시됩니다. 첫 번째 객체 부분 {data: T; error: null}은 이해가 가는데요, 두 번째 객체 부분은 강의상 화면과 차이가 좀 있어서, 추가로 설명해주실 수 있으면 감사하겠습니다.
-
미해결[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
해당 강의 부분은 실제 활용하기에 부족해 제가 해결한 방법입니다.
해당 강의대로 진행하면 잘 안됩니다ㅠㅠ일단 Aurora and RDS로 진행했습니다.지금 날짜로 AWS에 Amazon RDS가 없더라구요그래서 문제가 있는지는 잘모르겠습니다.1. 현재 package.json 명령어에서 dist/main이 아닌 dist/main.js로 해야 합니다.이거 왜그런지 모르겠네요보안 그룹을 설정해줘야 합니다.사용자 지정 TCP 포트 3000 으로 열어줘야 합니다.3. RDS 보안그룹 문제어떤 분이 사용자 지정 TCP 해서 포트 3030을 추가해서 해결했다고 하는데 저는 잘모르겠습니다.아래 에러가 나타나는 경우1|main | [Nest] 6957 - 12/18/2025, 2:25:35 PM ERROR [TypeOrmModule] Unable to connect to the database. Retrying (7)... 1|main | error: no pg_hba.conf entry for host "172.31.32.15", user "mymap", database "mymap", no encryptionapp.module.ts에 아래 코드 추가TypeOrmModule.forRoot({ type:'postgres', host: process.env.DB_HOST, port:5432, username: process.env.DB_USER, password: process.env.DB_PASSWORD, database: process.env.DB_NAME, ssl: { rejectUnauthorized:false, }, // 추가 })왜 추가해야하는지는 아직 자세히 모릅니다.그러면 아래 에러가 뜹니다.error: database "mymap" does not exist그럼 아래 과정 수행해야 합니다.6. 이렇게 하면 아마도 잘 될 겁니다..ㅠ만약에 pgAdmin에 연결해서 보고 싶으면 구글링해서 하시면 되는데 중요한 건 보안 그룹에서 인바운드 규칙 추가하는 것(PostgreSQL/TCP/5432/0.0.0.0/0)과RDS 퍼블릭 엑세스가 "예"로 되어있어야 하는 것만 알아주시면 됩니다.사실 여쭤보고 싶은 것 없지만 혹시나 보신다면 위 과정에서 문제될 건 없는지 알려주시면 감사하겠습니다!
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
포스트 리스트를 불러오는 hook에 대하여 질문드립니다!
안녕하세요!타입 스크립트부터 현재 강의까지 너무 유용하게 잘 듣고 있는 수강생입니다! 9-1 강의를 수강하다가 문득 궁금함이 생겨서 질문 남겨 봅니다. A 유저와 B 유저가 있다고 가정했을 때A 유저가 프로필 상세 화면을 보고 있는 상태에서 B 유저가 새로운 포스트를 올렸는데,이후에 A 유저가 메인 리스트 화면으로 이동하면 B 유저가 올린 새로운 포스트가 로드되지 않는 것으로 보입니다! (새로 고침하면 당연히 정상적으로 보이고요) 제가 코드 작성을 하면서 놓친 부분이 있어 이러한 현상이 발생하는 것인지,아니면 이후 강의에서 해당 부분이 수정되는 것인지 여쭤보고 싶습니다. 늘 좋은 강의 감사합니다! 🙂 좋은 하루 보내세요~!
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
공부 방향에 대해서
안녕하십니까 이번에 책을 샀으나 잘 이해가 안되 강의와 함께 보기로 결정해서 공부하고잇는 초보자입니다 선생님 제가 공부를 하고있는데 자꾸 다 메모 할려고 하는데 프로그래밍은 메모하면서 공부하지말라고 암기하는것이 아닌 그때마다 찾아보라는 말이 많습니다 그래서 그냥 메모 같은거 필요없이 그때 이해만하고 넘어가도 진짜 괜찮을가요 뭔가 아직 초보자입장에서는 잊어먹을가 두렵습니다 예를 들면 바이트 와 웹팩의 차이 이런것도 암기를해둬야하는가 아닌 불안감 나중에 나혼자 만들수있을가? 같은불안이 좀 큽니다. 긴글 죄송합니다
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
CommentItem에 props를 전달하지만 받지 않는데 TypeScript 에러가 안 나는 이유가 궁금합니다
(10.3) 댓글 조회 기능 구현하기 8:50 CommentItem에서 props를 작성하기전 <CommentItem key={comment.id} {...comment} />에 {...commnet}를 넣어도 TypeScript에서 에러가 나지 않던데 이유가 궁금합니다. // comment-list.tsx {comments.map((comment) => ( <CommentItem key={comment.id} {...comment} /> ))} // comment-item.tsx export default function CommentItem() { // props를 안 받음 return <div>하드코딩된 내용</div> }
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
form action 과 onSubmit
진행중에 form 에 action 과 onSubmit 을 섞어서 사용하셨는데form action 과 onSubmit 을 어느상황에 어떤걸 선택해서 사용해야하는 기준이 있을까요? 어떤 기준에 따라 왜 사용하는지 정리가 안되서요 🤔
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
모달 store 관련 질문입니다.
안녕하세요, 이정환 강사님.강의를 모두 수강하고 혼자 프로젝트를 진행하고 있는 수강생입니다. 모달 store를 구현하던 중 의문점이 생겨 질문합니다.만약 postEditorModal에 더불어 다른 모달 데이터를 관리하는 스토어(예를 들어 projectEditorModal)을 만들고 싶으면, store 파일을 두 개로 나누어 만드는 것이 맞을까요? 처음에는 똑같은 state와 actions 값을 담는 store니 하나의 파일로 관리해서 만들어도 되지 않을까 생각했는데, devtools 이름을 나누어 관리하는 것이 버그 관리나 유지 보수 관점에서 더 유리할 것 같아서요. 감사합니다.
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
로컬스토리지 토큰 저장 시 보안문제
안녕하세요 선생님supabase의 회원가입 기능을 사용하여 가입한 경우 자동으로 로컬스토리지에 토큰정보들이 저장이 되는 부분에서 이 부분들이 보안적으로 문제가 되지 않나요?? supabase를 사용하는 실무에서 이러한 문제를 어떤식으로 보통 해결하나요?
-
미해결한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
supabase foreign key relation 설정이 안돼요
like테이블을 생성하고자 작성을 한 후 Add foregin key relation 을 클릭하여 public schema를 선택한 이후에도 하위 테이블 목록이 보이지 않습니다..ㅠㅠ딱히 다른 설정을 만진것이 없이 강의를 따라 쭉 해보고 있는데 무언가가 바뀐건가요?강의 내에서는 post테이블이면 public.post로 나오지만 지금 현재는 post로만 보이는 상태인데 어떤 부분이 바뀌었나? 혹은 설정을 못한 부분이 있나 잘 모르겠습니다..
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
나름 중요하다고 생각하는 강의에 대한 궁금점 질문 드려요~
이정환 쌤 강의는 무조건 다 듣는 프론트 개발자 학생입니다. 근데, 궁금한점이 있어 질문드려요. 리액트 강의부터 하시고, 그다음 Next.js 강의 하시고, 다시 리액트로 이번에 강의를 하시는데, 저는 이정환 쌤 Next.js 강의를 듣고 난 후에는 리액트로는 개발을 안하고 Next.js로만 개발했거든요. 다시 리액트로 돌아간 이유에 대해 궁금해서 질문드립니다. Next.js 말고 리액트를 선택한 이유가 있을까요? Next.js에 어떤 이슈가 있는걸까요?
-
미해결[리뉴얼] 맛집 지도앱 만들기 (React Native & NestJS)
소스코드가 강의 순서랑 다른가요?
❗질문 작성시 꼭 참고해주세요에러 메세지에서 단서를 찾을 수 있는 경우가 많습니다. 에러 메세지를 읽고 한번 검색해보시는것을 추천드립니다.질문글을 작성하실때는, 현재 문제(또는 에러)와 코드나 github을 첨부해주세요.개발중인 OS, ReactNative, Node 버전 등의 개발환경을 알려주셔야합니다.에러메세지는 일부분이 아닌 전체 상황을 올려주세요. 일부만 보여주시면 답변이 어렵습니다. (에러 일부만 자르거나 일부만 복사하지말아주세요) 8-8 듣고 있는데 다크모드에서 전체적으로 코드 변경을 하길래 참고하려고 깃에서 lecture8-8을 열었는데 약간 코드 구성이 다른거 같아요.
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
카카오로그인 에러
AxiosError: Request failed with status code 401 at settle (/Users/sujin/Development/_00_inflearn/code/SECTION19(finalProject)/backend/node_modules/axios/dist/node/axios.cjs:2106:12) at IncomingMessage.handleStreamEnd (/Users/sujin/Development/_00_inflearn/code/SECTION19(finalProject)/backend/node_modules/axios/dist/node/axios.cjs:3491:11) at IncomingMessage.emit (node:events:531:35) at endReadableNT (node:internal/streams/readable:1698:12) at process.processTicksAndRejections (node:internal/process/task_queues:90:21) at Axios.request (/Users/sujin/Development/_00_inflearn/code/SECTION19(finalProject)/backend/node_modules/axios/dist/node/axios.cjs:4731:41) at process.processTicksAndRejections (node:internal/process/task_queues:105:5) at async /Users/sujin/Development/_00_inflearn/code/SECTION19(finalProject)/backend/routes/auth.js:77:20카카오 로그인 버튼 클릭후 동의하기 누른 다음 이런 에러가 뜹니다. .env 파일은 이렇게 입력되어있고요.JWT_SECRET=sucoding!@34 KAKAO_REDIRECT_URI=http://localhost:4000/auth/kakao/callback FRONTEND_URL=http://localhost:5173 JWT_ACCESS_EXPIRES_IN=1h JWT_REFRESH_EXPIRES_IN=7d무엇이 문제일까요?
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
몽고DB 연결이 안됩니다.
이런 에러가 계속 뜨고 있습니다. MONGODB_URI=mongodb+srv://admin:qwe123!!@cluster0.eazdtgs.mongodb.net/react_blog?appName=Cluster0 .env 파일의 mongodb 넣는 곳입니다. 첫 clustor0 을 만들고 다른 에러가 나서 terminate 하고 새로 만들어서 한것입니다. 무엇이 문제일까요?
-
해결됨한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
51. (6.11) 회원가입시 프로필 정보 자동 생성하기
안녕하세요!useProfileData 훅에서 프로필 데이터를 조회하는 로직이 궁금해서 질문드립니다. useProfileData에서 PGRST116 에러 코드를 확인해서 프로필을 생성하는 로직이 있는데요,fetchProfile에서 .single() 대신 .maybeSingle()을 사용하고,null이면 createProfile을 호출하는 방식이 더 직관적인 것 같은데에러 코드를 확인하는 방식으로 구현하신 특별한 이유가 있을까요?실무에서는 어떤 방식을 선호하시는지도 궁금합니다!
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
섹션 19에 백엔드 부분 몽고DB 연결이 계속 끈깁니다.....
따로 몽고 DB URL로 하는 connect는 잘됬습니다만, 백엔드 소스를 동작 시켯을때에는 그 URL 로 연결시에 저렇게 failed가 뜨는데...이미 몽고DB에 아이피도 0.0.0.0/0해준상태입니다. 혹시 뭐가 문제일가요?...
-
미해결타입스크립트로 배우는 리액트(React.js) : 기초부터 최신 기술까지 완벽하게
최종 예제 코드
예제 코드는 한 강좌 후 최종 소스가 아니라 강좌시작 하기전 기초 소스 일까요? 예를 들어 134강의 경우 10-10 소스인데 예제코드 소스를 보면 jsx 정보 정도만 들어 있습니다.다른 강좌도 마찬가지로 기본 틀만 있고 강좌에 나온 파일 조차 만들어 지지 않은 경우가 많습니다.수업후 최종 소스도 받을수 있을까요?
-
미해결한 입 크기로 잘라먹는 실전 프로젝트 - SNS 편
Tailwind CSS IntelliSense 작동이 안되요...
안녕하세요 Tailwind CSS IntelliSense 작동이 안되서 그러는데 확인해 본 결과로 index.css에서@import "tw-animate-css"; 이거와@layer base { * { @apply border-border outline-ring/50; } body { @apply bg-background text-foreground; }}이 코드가 들어가면 작동을 하지 않습니다 혹시 이게 왜 그럴까요...?