inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

타입 에러 관련 질문입니다.

미해결

Supabase, Next 풀 스택 시작하기 (feat. 슈파베이스 OAuth, nextjs 14)

todoList 생성하기 에서 content가 계속 타입 에러가 뜨는데 이유가 뭘까요?

  • react
  • 클론코딩
  • next.js
  • supabase
홍정웅 댓글 1 좋아요 1 조회수 21

마지막 강의 잘림

미해결

AI 주식 자동 매매: Claude Code 하나로 완성하는 주식 자동매매 시스템 구축하기

마지막 강의가 잘린 것 같은데 올라오나요?

  • supabase
  • nextjs
  • ai-agent
  • mcp
  • claude
파라라라 댓글 0 좋아요 0 조회수 34

포스트 작성 중 이탈 방지 기능 (취소 버튼 클릭 시 오류)

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요 정환님, 이렇게 바로 또 질문을 드릴 줄은 몰랐는데.. 이번 포스트 작성 중 이탈 방지 기능 개발을 하다가 "확인 버튼"을 누르게 되면 정상적으로 모든 모달이 종료가 되지만, "취소 버튼"을 누르게 되면 AlertModal이 종료되지 않고 계속 리렌더링이 되는 현상이 발생합니다ㅠㅠ 해당 부분에 대해 저번처럼 메일로 프로젝트 파일을 압축해서 보내드려도 되는지 여쭤봅니다!

  • react
  • typescript
  • react-query
  • supabase
  • zustand
rkdla666 댓글 2 좋아요 0 조회수 55

"포스트 생성에 실패했습니다" 실패 문구와 함께 에러가 발생합니다ㅠㅠ

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요 정환님! 정환님의 강의를 들으면서 코드를 따라 작성해보다가 포스트와 이미지를 최종적으로 업로드 하는 과정에서 아래의 캡쳐 사진과 같이 포스트 생성에 실패했다는 에러 메시지가 뜨게됩니다. 네트워크 탭에 보면, 포스트 부분은 잘 전달이 되는거같은데 이미지 생성에 관한 결과가 보이지 않는 것으로 보아 이미지 생성 관련 코드에서 문제가 생긴것같은데 무슨 문제일까요??..ㅠ 아래는 해당 코드들입니다. 이미지 생성 관련 코드를 가져왔는데 혹여나 다른 부분의 코드가 필요하면 추가 업로드 드리겠습니다. api/post.ts import type { PostEntity } from './../types'; import supabase from '@/lib/supabase'; export async function createPost(content: string) { const { data, error } = await supabase .from('post') .insert({ content }) .select() .single() if (error) throw error return data } export async function createPostWithImages({ content, images, userId }: { content: string images: File[] userId: string }) { // 1. 새로운 포스트 생성 (맨 위에서 생성한 포스트 비동기 함수 가져오기) const post = await createPost(content) if (images.length === 0) return post // 2. 이미지 업로드 try { const imageUrls = await Promise.all( images.map((image) => { const fileExtension = image.name.split(".").pop() || "webp" const fileName = `${Date.now()}-${crypto.randomUUID()}.${fileExtension}` const filePath = `${userId}/${post.id}/${fileName}` return uploadImage({ file: image, filePath }) }) ) // 3. 포스트 테이블 업데이트 const updatedPost = await updatePost({ id: post.id, image_urls: imageUrls }) return updatedPost } catch(error) { await deletePost(post.id) throw error } } export async function updatePost(post: Partial<PostEntity> & { id: number }) { const { data, error } = await supabase .from("post") .update(post) .eq("id", post.id) .select() .single() if (error) throw error return data } export async function deletePost(id: number) { const { data, error } = await supabase .from("post") .delete() .eq("id", id) .select() .single() if (error) throw error return data } hooks/mutations/post/use-create-post.ts import type { UseMutationCallback } from './../../../types'; import { createPost, createPostWithImages } from '@/api/post'; import { useMutation } from '@tanstack/react-query'; export function useCreatePost(callbacks?:UseMutationCallback) { return useMutation({ mutationFn: createPostWithImages, onSuccess: () => { if(callbacks?.onSuccess) callbacks.onSuccess() }, onError: (error) => { if (callbacks?.onError) callbacks.onError(error) } }) } components/modal/post-editor-modal.tsx import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog' import { useCreatePost } from '@/hooks/mutations/post/use-create-post' import { usePostEditorModal } from '@/store/post-editor-modal' import { useSession } from '@/store/session' import { ImageIcon, XIcon } from 'lucide-react' import { useRef, useState, useEffect, ChangeEvent } from 'react' import { toast } from "sonner" import { Carousel, CarouselContent, CarouselItem } from '../ui/carousel' type Image = { file: File, previewUrl: string } export default function PostEditorModal() { const session = useSession() const { isOpen, close } = usePostEditorModal() const { mutate: createPost, isPending: isCreatePostPending } = useCreatePost({ onSuccess: () => { close() }, onError: (error) => { toast.error("포스트 생성에 실패했습니다", { position: "top-center" }) } }) const [content, setContent] = useState("") const [images, setImages] = useState<Image[]>([]) const textareaRef = useRef<HTMLTextAreaElement>(null) const fileInputRef = useRef<HTMLInputElement>(null) const handleCloseModal = () => { close() } const handleCreatePostClick = () => { if (content.trim() === "") return createPost({ content, images: images.map((image) => image.file), userId: session!.user.id }) } const handleSelectImages = (e:ChangeEvent<HTMLInputElement>) => { if (e.target.files) { const files = Array.from(e.target.files) files.forEach((file) => { setImages((prev) => [ ...prev, { file, previewUrl: URL.createObjectURL(file) }, ]) }) } e.target.value = "" } const handleDeleteImage = (image:Image) => { setImages((prevImages) => prevImages.filter((item) => item.previewUrl !== image.previewUrl)) } useEffect(() => { if (textareaRef.current) { textareaRef.current.style.height = "auto" textareaRef.current.style.height = textareaRef.current.scrollHeight + "px" } }, [content]) useEffect(() => { if (!isOpen) return textareaRef.current?.focus() setContent("") setImages([]) }, [isOpen]) return ( <Dialog open={isOpen} onOpenChange={handleCloseModal}> <DialogContent className="max-h-[90vh]"> <DialogTitle>포스트 작성</DialogTitle> <textarea disabled={isCreatePostPending} ref={textareaRef} value={content} onChange={(e) => setContent(e.target.value)} className="max-h-125 min-h-25 focus:outline-none" placeholder="무슨 일이 있었나요?" /> <input onChange={handleSelectImages} ref={fileInputRef} type="file" accept="image/*" multiple className="hidden" /> {images.length > 0 && <Carousel> <CarouselContent> {images.map((image) => <CarouselItem className="basis-2/5" key={image.previewUrl}> <div className="relative"> <img src={image.previewUrl} className="h-full w-full rounded-sm object-cover" /> <div onClick={() => handleDeleteImage(image)} className="absolute top-0 right-0 m-1 cursor-pointer rounded-full bg-black/30 p-1" > <XIcon className="h-4 w-4 text-white"/> </div> </div> </CarouselItem>)} </CarouselContent> </Carousel>} <Button onClick={() => { fileInputRef.current?.click() }} variant={"outline"} className="cursor=pointer" > <ImageIcon/> 이미지 추가</Button> <Button disabled={isCreatePostPending} onClick={handleCreatePostClick} className="cursor=pointer"> 저장 </Button> </DialogContent> </Dialog> ) }

  • react
  • typescript
  • react-query
  • supabase
  • zustand
rkdla666 댓글 2 좋아요 0 조회수 57

플러터 세팅 후 새폴더 생성건

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

현재 수강 진도를 함께 알려주세요! 29. 4-1. 🤳 웹에서 앱으로의 대전환 - Flutter 개발환경 세팅(15:46초 진도) 구체적인 상황과 함께 질문해주세요! 플러터 셋팅 후 새폴더를 만드는데 검색>flutter> 관련 선택지가 강의안에서 처럼 안나와요. 상관없는건지, 잘못세팅이 된건지요?

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
Moon Hole 댓글 2 좋아요 0 조회수 51

강의 자료는 어디있나요?

미해결

비전공자 혼자서 하루 만에 수익화 앱 출시하기

강의 보다보면 중간중간 강의자료에 올려놓았다는 말이 있는데, 강의자료 아무리 찾아도 하나도 없는데 어디서 볼 수 있나요? ㅜㅠ 다른 강의 보면, 강의 옆에 다운받을 수 있는 버튼 나오던데, 이 강의는 하나도 없어요.

  • flutter
  • 모바일-디자인
  • cursor
  • supabase
  • 수익화
김혜선 댓글 1 좋아요 0 조회수 39

supabase mcp로 테이블 생성 보여주실떄

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

와 같이 프롬프트가 실시간으로 영어(글자가 깨지는)데 저만 이런가요?

  • react
  • 인공지능(ai)
  • claude
  • mcp
  • supabase
xyschoi 댓글 2 좋아요 0 조회수 52

강의자료는 어떻게 제작하시나요?

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

강사님, 강의 너무 잘 듣고 있습니다. 그런데 강의자료가 Next.js 도 그렇고 깔끔하게 잘 만드시던데 무엇으로 어떻게 제작하시는지 간략히 설명 좀 해주시면 감사하겠습니다.

  • react
  • typescript
  • react-query
  • supabase
  • zustand
아리마 댓글 2 좋아요 0 조회수 66

비밀번호 재설정 1회용 이메일 링크

미해결

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요! 비밀번호 재설정 이메일의 링크를 클릭한 후 비밀번호를 변경했는데, 같은 링크로 다시 접속해도 계속 비밀번호가 변경되는 것을 확인했습니다. 재설정 링크를 1회 사용 후 만료되게 하려면 어떻게 해야하나요?

  • react
  • typescript
  • react-query
  • supabase
  • zustand
쉬었음루피 댓글 1 좋아요 0 조회수 62

강의 수강 후 포트폴리오 준비 방향에 대해 조언 부탁드립니다.

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요 정환님. 저는 정환님의 강의를 모두 구매해서 수강하고 있는 수강생입니다. 현재는 바이브 코딩 강의를 제외한 강의들을 모두 수강했고, 지금은 복습을 진행하고 있습니다. 복습과 함께 프론트엔드 신입 지원용 개인 프로젝트를 준비하고 있는데, 정환님께 배운 내용을 최대한 활용해 보고 싶어서 질문드립니다. 개인 프로젝트 기술 스택은 Next.js + TanStack Query + Supabase 기반으로 생각하고 있습니다. 1. 제가 이전에 영어학원에서 근무한 경험이 있어서, 그 경험을 바탕으로 영어와 관련된 서비스를 만들어보려고 합니다. 예를 들어 영어 원서 학습 서비스나 영어 단어장 서비스 등을 생각하고 있는데, 이런 주제가 프론트엔드 신입 포트폴리오용 개인 프로젝트로 적절할지 궁금합니다. 2. 혹시 프론트엔드 신입 포트폴리오용으로 추천해 주실 만한 프로젝트 주제가 있을까요? 3. 현재 React, TypeScript, Next.js, TanStack Query를 학습하고 복습 중입니다. 신입 프론트엔드 개발자로 취업하기 위해 어느 정도 수준까지 준비하는 것이 좋을지, 그리고 추가로 공부하면 좋을 부분이 있다면 조언 부탁드립니다. 4. 정환님의 바이브 코딩 강의를 수강한 이후에는 AI를 활용한 프로젝트도 하나 진행해 보고 싶습니다. 프론트엔드 신입 포트폴리오 관점에서 추천해 주실 만한 AI 프로젝트 주제가 있을까요? 5.포트폴리오를 준비하는 입장에서 아래 항목들의 우선순위를 어떻게 가져가는 것이 좋을지도 궁금합니다. 현재 준비 기간이 넉넉하지 않아 세 가지를 모두 진행하지 못할 수도 있다는 생각이 들어서, 어떤 순서로 준비하는 것이 가장 효과적일지 조언 부탁드립니다. 1) 개인 프로젝트 2) AI 프로젝트 3) 팀 프로젝트 질문이 많았는데 시간 내어 읽어주셔서 감사합니다. 정환님 강의를 통해 정말 많은 도움을 받고 있습니다. 항상 좋은 강의 만들어주셔서 감사드립니다.

  • react
  • typescript
  • react-query
  • supabase
  • zustand
imhj11777 댓글 1 좋아요 2 조회수 76

25강 앱 아이콘 만드는 방법에서 그래픽 소스는 어디에 있나요?

미해결

비전공자 혼자서 하루 만에 수익화 앱 출시하기

강의를 듣다보니 figma로 제공된 디자인 소스 파일을 개인의 프로젝트로 복붙해서 이용하라는 부분이 있는데 강의자료가 없는 것 같습니다. 확인 부탁드립니다.

  • flutter
  • 모바일-디자인
  • cursor
  • supabase
  • 수익화
댓글 1 좋아요 0 조회수 50

회원가입 구현 (구현 후 최종 화면 출력 X)

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

해당 강의 수강중에 정환님께서 진행해주신 부분 그대로 똑같이 따라했는데 화면에서는 아예 아무것도 보이지않는.. 출력이 안됩니다..ㅠㅠ 무슨 문제일까요?? 예상은 api를 저장하는 auth.ts 부분부터 뭔가 잘못된거같은데 이유를 모르겠습니다. (그리고, 예외사항으로 import 부분의 빨간밑줄오류나 코드에서 오타가 아닌 빨간밑줄오류는 왜 생기는걸까요??ㅠ) 현재 진행중인 코드를 한번에 알아보기 쉽게 Github에 바로 올렸습니다. 링크 : https://github.com/Skyllerrr 안에 Repository의 첫 번째 프로젝트(onebite-SNS)입니다.

  • react
  • typescript
  • react-query
  • supabase
  • zustand
  • usemutation
rkdla666 댓글 2 좋아요 0 조회수 95

(6.11) 회원가입시 프로필 정보 자동 생성하기 Q. 호출 순서 문의

미해결

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요 6.11 회원가입시 프로필 정보 자동 생성하기 강의중18:17 분 쯤에 아래처럼 useProfileData(session?.user.id) -> useEffect 훅을 선언하는데 처음에는 session?.user.id이 값이 없는데 useProfileData 훅을 먼저 부르는게 맞나요? 저는 useEffect -> useProfileData 이 순서가 맞다고 생각해서요 원본 export default function SessionProvider({ children }: { children: ReactNode }) { const session = useSession(); const setSession = useSetSession(); const isSessionLoaded = useIsSessionLoaded(); const { data: profile, isLoading: isProfileLoading, isPending, } = useProfileData(session?.user.id); useEffect(() => { supabase.auth.onAuthStateChange((event, session) => { setSession(session); }); }, []); if (!isSessionLoaded) return <GlobalLoader />; if (isProfileLoading) return <GlobalLoader />; return children; } 내 생각 export default function SessionProvider({ children }: { children: ReactNode }) { const session = useSession(); const setSession = useSetSession(); const isSessionLoaded = useIsSessionLoaded(); useEffect(() => { supabase.auth.onAuthStateChange((event, session) => { setSession(session); }); }, []); const { data: profile, isLoading: isProfileLoading, isPending, } = useProfileData(session?.user.id); if (!isSessionLoaded) return <GlobalLoader />; if (isProfileLoading) return <GlobalLoader />; return children; }

  • react
  • typescript
  • react-query
  • supabase
  • zustand
이민진 댓글 1 좋아요 0 조회수 68

수파베이스 ORM 질문

미해결

AI 시대에 살아남기: Supabase로 백엔드 뚝딱!

안녕하세요. 수파베이스 ORM 섹션을 듣고나니 일반적인 백엔드 서버와 api 라우트를 정의하고 데이터를 주고받는게 아닌 클라이언트에서 직접 수파베이스 ORM를 호출할 수 있는 것으로 확인되는데요! 현재 회사에 프론트엔드 개발자 2명이고 백엔드 지식이 많지않아 next.js + 수파베이스로 MVP 검증부터 진행할 것같습니다. 수파베이스로 MVP 검증후 별도의 백엔드 서버로 분리하게되었을때(분리가 꼭 필요한지도 사실 잘 모르겠습니다.) 분리비용을 최소화히기위해 api호출 과정을 next.js의 api라우트를 무조건 거쳐서 수파베이스를 접근하게하려고하는데 이런 과정이 유의미한 작업이 될 수 있는지 궁금합니다.

  • node.js
  • dbms/rdbms
  • oauth
  • backend
  • supabase
노강표 댓글 2 좋아요 0 조회수 84

트리거 질문

미해결

AI 시대에 살아남기: Supabase로 백엔드 뚝딱!

안녕하세요. 프론트엔드만하다가 강의보고 백엔드에대해 알아가는중입니다. 백엔드쪽은 아예 기반이 없다보니 하나하나 해보면서 따라가고있는중입니다. 1. 트리거는 ui로 설정을안하고 SQL 에디터로 설정을 해주셨는데 따로 이유가 있을까요?? 2. 트리거와 그 안에서 작성해주신 업데이트 함수가 별도로 관리되는것같더라고요. functions가 유틸함수고 Triggers가 시점과 적용대상(어느 테이블에 적용할지?)를 관리하는 영역으로 이해하는게 맞을까요? 3. 트리거는 테이블영역에서 적용이 불가능한가요? RSL처럼요!! 뭔가 분산되어있는 느낌이 있어서요. 4. 숙제내용 제출

  • node.js
  • dbms/rdbms
  • oauth
  • backend
  • supabase
노강표 댓글 1 좋아요 0 조회수 69

명시적 타입 선언(콜론 타입 선언)과 as 타입 단언 차이

미해결

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

안녕하세요 6.8 Zustand를 이용해 세션 관리하기 4:52초에 타입 선언 부분에 타입 문의가 있어서요! 아래처럼 차이가 뭔지 잘 모르겟네요 강사님은 as 타입선언으로 자주 쓰시던데 ai 물어보니 initailState: State 이 형식이 명시적 타입 선언 이라 더 엄격해서 추천한다고 하던데 as로 타입 단언 하는 이유가 있으신가요? const initailState: State = { isLoaded: false, session: null, }; const initailState = { isLoaded: false, session: null, } as State;

  • react
  • typescript
  • react-query
  • supabase
  • zustand
이민진 댓글 2 좋아요 0 조회수 82

Claude Code + Supabase 보안 대응 방안 Q&A

미해결

클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지

Claude Code + Supabase 보안 대응 방안 Q&A 목적 : Supabase 사용 시 보안 위험에 대한 전문가 조언 요청 출처 : dalgom.bami Threads 글 ( https://www.threads.com/@dalgom.bami/post/DOYjgEGEvOA?xmt=AQF0oN0fFrAEMy9AqIrJ1n__kxIwi7ImgsTyjVUTh2DH0g ) 안녕하세요, 강사님께서 가르쳐주신 Claude Code와 Supabase를 활용한 개발 워크플로우를 배워가면서 정말 큰 도움을 받고 있습니다. 특히 개발 속도 향상에 대해서는 정말 효과적이라고 느꼈습니다. 다만, 최근에 한 Threads 글을 접하면서 몇 가지 우려사항이 생겼습니다. 실제로 Supabase를 써보니 생기는 보안 위험성에 대해 경험담을 이야기하는 글이었는데, 그 내용이 저희가 배운 워크플로우와 직접적으로 연결되는 부분이 있어서 전문가인 강사님의 견해를 정중히 구해봅니다. 🚨 주요 우려사항 3가지 Q1. RLS(Row Level Security) 설정의 위험성 해당 글에서는 다음과 같은 문제를 지적했습니다: "여러 사용자가 엮여있는 복잡한 기능(예: 사용자 A가 사용자 B의 글에 좋아요) 의 경우, AI 코딩 도구는 복잡성을 피하기 위해 권한을 다 풀어버리는 경우 가 엄청 많았다." 실제 사례: - 비로그인 사용자도 다른 사람의 개인정보가 Response에 노출됨 - Network tab에서 확인 시 모든 데이터 조회 가능 - RLS가 제대로 설정되지 않아서 발생한 문제 질문: Claude Code(또는 다른 AI 도구)에게 Supabase 작업을 의뢰할 때, 복잡한 RLS 정책이 올바르게 설정되도록 강제할 수 있는 방법이 있을까요? 개발 단계에서 이러한 RLS 오설정을 미리 감지할 수 있는 검증 방법(테스트, 문서 체크 등)이 있을까요? 강사님께서 추천하시는 "올바른 RLS 지시사항"이 있을까요? 예를 들어, AI에게 요청할 때 구체적으로 어떻게 명시해야 보안 구멍이 최소화될까요? Q2. Migration 파일 관리와 AI의 한계 "RLS를 Dashboard UI에서 설정하면 코드로 추적 불가능하고, AI가 기존 설정을 파악하기 어렵다. Migration 파일로 관리해야 AI가 기존 설정을 이해할 수 있지만, 이것도 AI가 여러 버전의 Migration 파일을 읽고 이해해야 한다는 의미다. 결국 AI는 기존 설정을 완벽히 이해할 수 없어서 충돌하는 설정을 추가할 확률이 높다." 질문: Claude Code로 Supabase 작업을 할 때, Migration 파일의 버전 관리를 어떻게 해야 AI가 기존 설정을 명확하게 인식할 수 있을까요? 메모리 파일( CLAUDE.md )에 "현재 RLS 정책 요약" 또는 "Migration 히스토리 요약"을 저장해두는 것이 도움이 될까요? 강사님께서 추천하시는 최선의 관리 방식은 무엇일까요? Option A: Dashboard UI는 절대 쓰지 말고 항상 Migration 파일로만 관리? Option B: Dashboard에서 변경 후, 매번 SQL Export해서 Migration으로 변환? Option C: 다른 방식? Q3. Trigger & RPC 오남용으로 인한 유지보수 악화 "복잡한 기능을 구현할 때 AI는 점점 RLS, Trigger, RPC를 남발해서 유지보수가 아예 불가능할 정도의 코드, 기존 데이터가 손실될만한 코드를 무지성으로 찍어낸다." 질문: Claude Code에게 Supabase 작업을 의뢰할 때, Trigger와 RPC 사용을 적절히 제한하는 방법이 있을까요? 예를 들어, AI에게 미리 "RPC는 이 3가지 경우에만 사용하되, 그 외에는 절대 쓰지 말아달라"라고 명시할 수 있는 효과적인 프롬프트가 있을까요? 만약 AI가 불필요하게 Trigger/RPC를 추가했다고 판단되면, "이건 너무 복잡하니까 클라이언트에서 처리하자" 같은 명확한 지시사항이 도움이 될까요? Q4. 프로토타입 vs 실제 서비스 단계에서의 Supabase 사용 "PoC(프로토타입) 단계에서는 Supabase를 적극 활용해도 좋지만, 실제 서비스가 시작되고 사용자가 생기면 일반 백엔드 스택으로 migration해야 한다. 다행히 PostgreSQL 기반이라 마이그레이션이 비교적 쉽다." 질문: 강사님께서도 이 의견에 동의하시나요? 아니면 Supabase도 충분히 프로덕션 레벨의 보안을 유지할 수 있다고 생각하시나요? 만약 동의하신다면, 어느 정도 규모(DAU, 데이터 량, 기능 복잡도)에서 백엔드 스택으로 마이그레이션하는 것이 현실적일까요? 그 전환 지점까지 Supabase를 "안전하게" 사용하는 체크리스트가 있을까요? Q5. 개발자(Claude Code 사용자)가 반드시 알아야 할 백엔드 지식 질문: 강사님께서 생각하시는 "Supabase를 안전하게 쓰는 데 필수적인 최소한의 백엔드 지식"은 무엇일까요? 그 지식들을 Claude Code 사용자들이 미리 학습하도록 권장하시는 방법이 있을까요? Q6. Claude Code + Supabase 안전 가이드라인 제안 위의 위험성들을 고려할 때, Claude Code 사용자들이 Supabase를 안전하게 사용할 수 있도록 하는 일종의 "체계화된 가이드라인"이 필요하다고 생각합니다. 제안 & 질문: 강사님께서 생각하시는 "Claude Code + Supabase 안전 개발 체크리스트"는 어떤 형태일까요? 예를 들어: □ 이 작업에 RLS가 필요한지 명확히 정의했는가? □ AI에게 요청할 때 RLS 정책을 구체적으로 명시했는가? □ Migration 파일로 저장했는가? □ 개발 환경에서 Network tab으로 데이터 노출 여부 확인했는가? □ Trigger/RPC 사용이 정말 필요한지 재검토했는가? 혹은 Supabase를 쓸 때만 따로 체크리스트를 가져야 할까요? 강사님께서 향후 강의에서 이런 부분을 더 강조하거나 추가 자료를 제공하실 계획이 있으신가요? 🙏 마무리 강사님의 강의를 통해 Claude Code의 강력함을 많이 배우고 있습니다. 다만 강한 도구일수록 신중하게 사용해야 한다는 것을 배웠고, 특히 백엔드와 보안 관련해서는 더욱 그렇다고 생각합니다. 다소 길고 상세한 질문들이지만, 강사님의 전문가적 관점에서의 조언을 진심으로 기다리고 있습니다. 감사합니다! 🙏

  • supabase
  • 보안
  • 백엔드
송숭이 댓글 1 좋아요 0 조회수 70

Node 관련 질문입니다

해결됨

비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE

npx create-next-app@latest . --typescript --tailwind --app 터미널에 입력을 하면 이런 오류가 뜨는데 왜그럴까요?

  • flutter
  • next.js
  • cursor
  • supabase
  • 바이브코딩
tlstjdtn65 댓글 3 좋아요 0 조회수 82

useMutation 적용 후 새로운 글 등록시 content가 안보여요

해결됨

한 입 크기로 잘라먹는 React.js 실전 프로젝트 - SNS 편

useMutation 적용후, 새로운 아이템을 추가하면, 아이템은 추가 되지만 안에 컨텐츠 내용은 안나오고, 삭제도 안되네요? 어디를 놓친걸까요??

  • react
  • typescript
  • react-query
  • supabase
  • zustand
powerwmj 댓글 2 좋아요 0 조회수 86

인기 태그

인프런 TOP Writers

주간 인기글