๐พ antd๋ฅผ ํ์ฉํ upload component์ api request์ response์ ํ์
์๋ฌ
Summary
antd๋ฅผ ํ์ฉํด upload component๋ฅผ ๋ง๋๋ ๊ณผ์ ์์ api request์ response์ ํ์
์๋ฌ๊ฐ ๊ณ์ํด์ ๋ฐ์ํ์์. form์ ํตํด ์ ์ถํด์ผํ๋ api response ํ์
๊ณผ ์ง์ antd๋ฅผ ํตํด set๋๋ value์ ํ์
์ด ๋ฌ๋ผ ๋ฌธ์ ๊ฐ ์๊น. http 501, http 400 ์๋ฌ๊ฐ ๊ฐ์ด ์๊ฒจ๋จ
Supporting data
- formData
- formData๋ ๊ท์ ์ ์๋ ์ฝ์์์๋ ํ์ธ์ด ๋ถ๊ฐ(network ์ payload๋ ๋ง์ฐฌ๊ฐ์ง)
- file upload ๋ก์ง
- formData๋ฅผ file api๋ก ์ ๋ฌํ๊ณ ํ์ผ url๋ณํ
- url์ post ๋ฐฐ์ด์ ๋ด์ ์ฒ๋ฆฌ
Incident Response Analysis
api์ ํ์์ ๋ง๋ ๋ฐฐ์ด ๋ฐ๋ก, antd์ ํ์์ ๋ง๋ ๋ฐฐ์ด ๋ฐ๋ก ์์ฑ 1. api ํ์์ ๋ง๋ ๋ฐฐ์ด ๋ฐ๋ก ๋ง๋ค๊ณ api์ PUT์ํค๊ธฐ 2. antd์ ํ์์ผ๋ก ๋ณํํ ๋ฐฐ์ด์ ๋ฐ๋ก ๋ง๋ค์ด ํ๋ฉด์์ ๋ ๋๋ง์ ์ฉ(?)์ผ๋ก ์ฌ์ฉํ๊ธฐ -> ํ์ ์๋ฌ ๋ฐ์ํ์ง X
-> ์ค์ ์ฝ๋
form.getFieldValue()๋ฅผ ํตํด ๊ธฐ์กด์ default๊ฐ ํ ๋น- ํ์ผ ์
๋ก๋ ์ ,
beforUpload()๋ฅผ ํตํด ๊ฐ๊ฐ์ ํ์ผ์ยFormData๋ก ๋ณํํ๊ณ uploadFileList์ ์ถ๊ฐ form.setFieldValue()๋ฅผ ํตํด form์ uploadFileList๋ฅผ ์ง์ ํ ๋น
const [uploadFileList, setUploadFileList] = useState<string[]>(
form.getFieldValue(name) || []
);
const convertedFileList: UploadFile[] = uploadFileList?.map(convertUploadFile);
const handleUpload = (file: RcFile) => {
const image = new FormData();
image.append("multipartFile", file);
uploadFile({ domain, image })
.unwrap()
.then((value) => {
setUploadFileList([...uploadFileList, `https://${value.file_url}`]);
form.setFieldValue(name, [
...uploadFileList,
`https://${value.file_url}`,
]);
message.success("์
๋ก๋์ ์ฑ๊ณตํ์ต๋๋ค.");
})
.catch(() => {
message.error("์
๋ก๋์ ์คํจํ์ต๋๋ค.");
});
return true;
};
convertUploadFile()ย hook์ ํตํด antdํ์์ ๋ง๊ฒ ๋ณํ
const convertUploadFile = (fileUrl: string, index: number): UploadFile => {
return {
uid: `${-(index + 1)}`,
name: fileUrl,
status: "done",
url: fileUrl,
};
};
Post-Incident Analysis
- TypeError๋ฌธ์
- api์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ putํ ๋์ image_url์ type์
string - antd๋ฅผ ํตํด ์ค์ ๋ด๊ธฐ๋ filel์ type์ antd์ ์ฉ ๊ฐ์ฒด์ธ
uploadFile - image_url์ getํ ๋๋
string[]์ด๋ฏ๋ก fileList๋ฅผ ๋ ๋๋งํ ๋์ antd๊ฐ์ฒด๋ก ๋ฐ๊พธ์ด์ผํจ. - ์ด์๊ฐ์ api ์ GET, PUT ํ ๋ ์๋ก ๋ค๋ฅธ data type์ผ๋ก ์๋ฌ๊ฐ ๋ฐ์
- api์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ putํ ๋์ image_url์ type์
- ํ์ผ ์
๋ก๋ ์ ์ฉ api ์ ๋ํ ์ดํด ๋ถ์กฑ
- ํ์ผ ์ ๋ก๋ api์ requst๋ฐฉ๋ฒ๊ณผ response๊ฐ ๋ฌด์์ธ์ง ์ ๋๋ก ์ธ์งํ์ง ๋ชปํ์.
- ํ์ผ ์ ๋ก๋ api๋ formData๋ฅผ ๋ฐ์ file์ ์ ์ฉurl์ ๋ณํํด์ฃผ๋ ์ญํ ์ ํจ.
Timeline

Lessons Learned:
- ์๋ฌ ์ํ ํ์ธ
- api response, request type ํ์ธ
- ์ด์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ parameter ๊ณต์๋ฌธ์ ํ์ธํ๊ธฐ
Lessons Learned
- ์๋ฌ ์ํ ํ์ธ
- api response, request type ํ์ธ
- ์ด์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ parameter ๊ณต์๋ฌธ์ ํ์ธํ๊ธฐ