1) useModalStore() 의 타입을 지정할때는
❌ useModalStore()
zustand의 create 함수를 사용하여 만든 상태 관리 함수이므로 제네릭을 직접 전달하는 방식이 지원되지 않습니다.
Zustand의 create() 함수는 이미 상태 관리 스토어의 타입을 정의하는 방식으로 사용되기 때문에, 추가적인 제네릭 인자를 받을 수 없습니다.
✅ const { closeModal }: CloseModalType = useModalStore();
useModalStore()가 ModalStore 타입을 기반으로 생성되었고, 그 안에서 필요한 속성(closeModal)만 구조 분해 할당 후, 타입을 별도로 지정했기 때문
axios에 onUploadProgress 옵션이 있음
프론트에서 백엔드로 넘어가는 진행률을 보여줌
-> onUploadProgress가 100%이 됐더라도 백엔드에서 db에 제대로 저장됐는지는 알수 없다.
백엔드에서 db에 제대로 저장됐는지, 저장되고있는 진행률 이런거는 onUploadProgress로는 알수 없다. 그건 백엔드에서 보내줘야됨
(백엔드의 추가 처리 시간이 길어지면, 유저가 "왜 멈췄지?" 또는 "오류인가?"라고 생각할 가능성이 큼.)
해결책 gpt 제시
-> 유저가 100%라고 보기 전에 모든 작업이 완료되도록, 네트워크 전송과 백엔드 처리를 합쳐 단일 진행률로 표시.
예:
네트워크 전송 = 전체의 70%.
백엔드 처리 = 전체의 30%.
const calculateTotalProgress = (uploadProgress: number, backendProgress: number) => {
const uploadWeight = 0.7; // 네트워크 전송 비율
const backendWeight = 0.3; // 백엔드 처리 비율
return Math.round(uploadProgress * uploadWeight + backendProgress * backendWeight);
};
-> 백엔드의 진행률만 보여주는 방법도 있음
const [progress, setProgress] = useState(0);
const [status, setStatus] = useState("uploading");
// "uploading" | "processing" | "done" // 진행률 확인
const checkProgress = async () => {
try { const response = await axios.get("/upload/status");
setProgress(response.data.progress);
setStatus(response.data.status); }
catch (error) {
console.error("진행 상태를 확인하는 중 에러 발생:", error); } };
useEffect(() => { const interval = setInterval(() => {
checkProgress(); }, 1000);
// 1초마다 진행 상태 확인 return () => clearInterval(interval);
// 컴포넌트 언마운트 시 정리 }, []);