inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

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

해결됨

한 입 크기로 잘라먹는 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 조회수 102

11강 3:20

해결됨

(2027 대비!) 일주일만에 합격하는 정보처리기사 실기

문자열 쓸때 %를 2번 써야 출력시 %가 나온다고 하셨는데 /같은 경우는 한번만 써도 되는건가요? 혹시 %처럼 꼭 두번 써야 되는 문자가 더 있는지 궁금합니다

  • python
  • java
  • c
  • 정보처리기사
  • 정보처리산업기사
가보자고 댓글 2 좋아요 0 조회수 83

설치 문제 없는건가요?

미해결

대세는 쿠버네티스 (초급~중급편)

안녕하세요 선생님 kubectl get pod -A 와 kubectl get nodes 쳐서 이미지와 같이 모두 러닝 상태와 마스터 노드 1 및 워커 노드 2가 Ready 상태로 뜨면 설치 과정은 무사히 넘어간건가요? 그럼 다음에 다시 접속하려고 할때는 그냥 버추얼 머신으로 실행만 시키면 되는걸까요? 감사합니다

  • docker
  • kubernetes
  • devops
  • container
수철 댓글 1 좋아요 1 조회수 83

10강 11:42

해결됨

(2027 대비!) 일주일만에 합격하는 정보처리기사 실기

ptintf("\n");에서 \n이 있길래 출력값은 개행 되어 나오는 줄 알았는데요 왜 출력값이 아래와 같지 않은지 모르겠습니다, 그리고 아래와 같은 결과가 나오려면 코드가 어떻게 쓰여져야 하는지도 궁금합니다 1 2 3 4 5

  • python
  • java
  • c
  • 정보처리기사
  • 정보처리산업기사
가보자고 댓글 2 좋아요 0 조회수 124

xshell 접속오류

미해결

대세는 쿠버네티스 (초급~중급편)

안녕하세요 선생님 xshell 접속하는 과정중에 workernode1 이랑 2 는 잘 접속이되는데 마스터노드에서만 여기서 반응이 없는데 왜 그런걸까요? 감사합니다

  • docker
  • kubernetes
  • devops
  • container
댓글 2 좋아요 1 조회수 138

s,y로 책등 둥글리기가 안됩니다ㅠㅠ

해결됨

즐거운 블렌더 - 아이소메트릭 하우스

17:05 책등 부분만 선택해서 s-y 눌러서 다시 동그랗게 해주는 부분에서, 앞의 모델링을 모두 똑같이 했는데 저는 이렇게 책표지와 종이가 분리되면서 동그래져요 어떤부분에서 문제가 있었던걸까요? 혹시나 모델링에서 실수한게 있을까봐 처음부터 스크립트 보면서 다시 몇번이나 따라해봤는데 결과가 똑같아요.. ㅠ - 막힌 부분의 시간( 예를들면 3:24) 과 안 되는 부분의 현상을 자세히 적어주세요. - 사진을 첨부해주시면 상황에 대한 이해가 빠르기 때문에 되도록 같이 올려주세요. - 사진은 다른 상황도 보이도록 스크린샷으로 찍어주시면 더 좋습니다.

  • blender
  • 애니메이션
  • physics
  • 3d-modelling
윤다혜 댓글 2 좋아요 0 조회수 80

쿠키 생성 관련

미해결

타입스크립트로 배우는 Next.js 16+ 완전 정복 : 기초부터 최신 아키텍처까지

카카오 로그인 후 이메일을 입력하고 몽고DB에 이메일과 refresh token이 저장된 것 까지 확인은 했는데 쿠키가 생성되지 않고 있네요. 강사님 네이버메일로 소스코드링크를 보냈습니다.

  • javascript
  • react
  • typescript
  • next.js
  • jwt
태리바이트 댓글 3 좋아요 0 조회수 109

클로저의 형태로 만들다

해결됨

성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]

되게 간단한 질문인데요, 클로저 파트를 듣다보면 "함수를 클로저 형태로 만들었다.."라는 말씀을 종종 하시는데 이걸 콜백함수를 받는 함수라고 보면 되겠죠...? 함수자체는 콜백을 받는 함수로 만들고, 실행하는 구문쪽에서 클로저의 형태로 실행했다 =>로 이해해도 되려나요?.?

  • ios
  • swift
  • 동시성
jj4783 댓글 1 좋아요 0 조회수 79

관계도출부분 질문입니다.

해결됨

쉽게 배우는 데이터 모델링 : 기본부터 실전 테이블 설계까지 (DASP/DAP)

학습 관련 질문을 남겨주세요. 구체적으로 적을수록 좋아요! 실습중에 궁금한점이 있으시면 erdcloud 링크를 첨부해주세요! 데이터 모델링 설명중에 나오는 '용어'들은 강의나 책마다 조금씩 다를 수 있습니다. https://drive.google.com/file/d/1ImDk6PSaolScBZnvEw_Y_Y8Kzxh7wvZd/view?usp=sharing 질문 내용 안녕하세요, 강사님. DAP 시험을 준비하며 강의를 수강하고 있는 수강생입니다. 관계 도출 부분에서 막히는 지점이 있어 질문드립니다. '물류운송시스템' 문제의 화물운송스케줄 엔터티 관련 질문입니다. 화물운송과 운송수단스케줄이 M:M 관계라고 판단하여, 식별자를 운송번호 + 운송스케줄번호 + 운송순번 으로 도출했습니다. 그런데 답안에서는 운송출발순번 과 도착운송순번 두 개의 속성이 식별자에 포함되어 있었습니다. 하나의 화물이 특정 스케줄 내에서 출발 경유지와 도착 경유지를 함께 가져야 한다는 점 때문에 순번이 두 개로 나뉜 것인지 궁금합니다. 이런 경우를 어떤 기준으로 판단해서 식별자를 도출해야 하는지 설명 부탁드립니다. 감사합니다.

  • sql
  • dbms/rdbms
  • ERD
  • database-modeling
  • dasp
멋있는맛 댓글 1 좋아요 0 조회수 83

프로덕션 부분 사용 불가

해결됨

[Unity6] Claude Code CLI로 게임 개발부터 출시까지

강의 순서대로 따라오면서 구글 스토어 출시 강의인데, 해당 화면에서 진입이 안되는데, 버튼 눌렀을때 프로덕션, 12명 이상의 테스터가 비공개 테스트 참여를 선택, 12명 이상의 테스터를 대상으로 14일 이상 비공개 테스트 진행이 있습니다. 해당 부분이 필수인가요 ?

  • node.js
  • C#
  • unity
  • Stable Diffusion
  • cli
  • 유니티6
  • claude
너드코더 댓글 2 좋아요 0 조회수 104

강의중 '스타터킷'을 링크로 보내줬다고 하는데, 어디서 받는건가요?

미해결

비개발자를 위한 Claude Code: AI에게 일 맡기기부터 앱·업무 자동화까지

클로드코드 실습 강의 2분 40초정도에 '스타터킷'을 링크로 보내줬다고 하는데, 어디서 받을 수 있는건가요?

  • product-management
  • 인공지능(ai)
  • claude
  • 바이브코딩
박칠성 댓글 1 좋아요 0 조회수 60

rotation.x 방향

미해결

Three.js로 시작하는 3D 인터랙티브 웹

큐브의 고개를 들게 만드려면 -20을 해야하는 것 아닌가 싶어 질문드립니다! 마찬가지로 왼쪽을 보게 돌리려면 y도 -인 것 같아요

  • blender
  • 인터랙티브-웹
  • three.js
김소중 댓글 2 좋아요 0 조회수 92

디스코드 초대를수락할 수 없음이라고 떠요

미해결

[Rookiss] 클로드 코드 개발을 위한 CS 입문 (인터랙티브 교재)

선생님 디스코드 안들어가져요 ㅠㅠ

  • next.js
  • 인공지능(ai)
  • claude
  • ax(에이전트-경험)
아요 댓글 1 좋아요 0 조회수 162

docker 마지막 실습(app(flask) + mysql) 연동 과정

해결됨

실리콘밸리 엔지니어와 함께하는 Docker

#compose.yml 파일 부분 수정 depends_on: -db compose를 실행하는 과정에서 db가 app보다 먼저 실행되긴 하지만 db 커넥션이 준비되기전에 app이 실행되어 오류가 발생합니다. depends_on: db: condition: service_healthy db의 healthcheck 결과를 실제로 체크해서, healthycheck가 끝날때까지 기다렸다가 app이 실행되기에 오류를 해결할 수 있었습니다. 수강생분들 참고하시면 좋을꺼 같습니다. 좋은 강의 감사드립니다. 화이팅입니다.!!

  • docker
  • container
  • mysql
  • db
ssung85 댓글 2 좋아요 1 조회수 102

대상좌표계 누락

해결됨

QGIS 입문자 올인원 스타터팩 (이론/실습형)

2강_23번 11분쯤 강의를 듣고 있는데 강의에서는 5174 대상 좌표계를 선택했는데 제 QGIS 프로그램은 3개 밖에 나오지 않습니다. 버전이 다른건가요?

  • qgis
  • GIS
  • data-visualization
  • data-analysis
  • spatial-data
jmhsla7 댓글 2 좋아요 1 조회수 96

pcskjs@naver.com

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

강의 자료 제목의 메일 주소로 송부 부탁드립니다.

  • python
김종석 댓글 1 좋아요 0 조회수 80

shp. 필드값 오류 발생

해결됨

QGIS 입문자 올인원 스타터팩 (이론/실습형)

2강 벡터 실습 중에 shp. 파일을 그대로 드래그해서 넣었습니다. 근데 필드값이 이렇게 오류가 발생하였습니다. 엑셀의 경우 상단 레이어를 통해 강의대로 보정을 했는데 shp. 파일은 제가 찾아볼 수가 없어서 문의 드립니다.

  • qgis
  • GIS
  • data-visualization
  • data-analysis
  • spatial-data
jmhsla7 댓글 2 좋아요 1 조회수 119

Function Types Error

해결됨

성공적인 진짜 iOS 개발자 되기 [기초부터 실무까지]

cal라는 함수를 옵셔널로 타입지정만 해둔채로, 타함수에서 다른 함수를 할당시키는 예제가 제 에디터에서는 에러가 나는데 원인 알 수 있을까요 func plus(n1: Int, n2: Int) -> Int { return n1 + n2 } func minus(n1: Int, n2: Int) -> Int { return n1 - n2 } var calc: ((Int, Int) -> Int)? func selectButton(type: String) { if type == "+" { calc = plus } else if type == "-" { calc = minus } } var target1 = 1 var target2 = 3 func showResult() { calc?(target1, target2) } Main actor-isolated var 'calc' can not be mutated from a nonisolated context ?

  • ios
  • swift
  • 동시성
jj4783 댓글 1 좋아요 0 조회수 70

로컬호스트에 웹훅으로 불어오기 오류

해결됨

전문 사주팔자 AI Agent 만들기 - 풀스택 n8n+Python

일주일만에 다시 실행하는 갑자기 로컬호스트에서 운세보기 했을때 분석중이라고 만 뜨고 엔팔엔에서 웹훅에서 불러오기 오류가 계속 됩니다.

  • python
  • 인공지능(ai)
  • 프롬프트엔지니어링
  • ai-agent
  • n8n
hanul.baro.1004 댓글 2 좋아요 0 조회수 85

단축키 질문

미해결

3dsmax 모델링 고수의 비밀! (Modeling Expert Technique)

첨부파일에 있는 단축키가 load cutom ui scheme으로 로드가 안되는데 어떻게 하나요?... 핫키는 첨부파일에서 불러와서 적용이된거같은데 load custom ui schem이 안되네요... UI는 일단 그대로구요 3ds max 2022, 2023둘다 안되는거 같아요...

  • 3ds-max
ssy6308msh2 댓글 2 좋아요 0 조회수 96

인기 태그

인프런 TOP Writers

주간 인기글