저번 포스트에서는 Supabase로 데이터 테이블을 생성하고, Next.js에 연동하여 CRUD를 구현하는 방법에 대해 간단하게 알아보았다면
이번에는 Supabase의 Storage 기능을 통해 dropbox처럼 파일을 업로드하는 방법을 알아보고자 한다.
🌱 이 포스트는 해당 강의를 수강한 후 수업 내용을 기반으로 작성되었으며, 이미지 클릭 시 강의 소개 페이지로 이동합니다.
Dropbox를 사용하면 파일을 클라우드에 업로드하고, 저장된 파일을 어디서나 인터넷에 접속해 다운로드하거나 공유할 수 있다. 또한 Dropbox는 파일 동기화, 백업, 공유 기능 등을 제공하여 다양한 기기에서 파일을 쉽게 관리할 수 있게 해주는데, 이 모든 기능은 Dropbox가 클라우드 저장소 서비스이기 때문에 가능한 것이다.
클라우드 저장소는 인터넷을 사용해 데이터를 원격 서비스에 저장 및 관리하는 서비스를 의미한다.
🤠 Supabase는 Supabase Storage를 통해 파일을 저장하고 관리할 수 있는 클라우드 저장소 기능을 제공합니다!
Supabase Storage makes it simple to upload and serve files of any size, providing a robust framework for file access controls.
Supabase Storage는 크기에 관계없이 파일을 쉽게 업로드하고 제공할 수 있게 해주며, 파일 접근 제어를 위한 강력한 프레임워크를 제공합니다.
[ Supabase Storage 공식 문서 中 ]
export async function uploadFile(formData: FormData) {
const supabase = await createServerSupabaseClient();
const file = formData.get("file");
if (file instanceof File) {
const { data, error } = await supabase.storage
.from(process.env.NEXT_PUBLIC_STORAGE_BUCKET)
.upload(file.name, file, { upsert: true });
handleError(error);
return data;
} else {
throw new Error("The formData does not contain a file.");
}
}
FormData
타입의 파일을 인자로 받는다.createServerSupabaseClient
를 통해 Supabase 클라이언트를 생성한다.formData.get("file")
을 통해 FormData 객체에서 file
키에 해당하는 파일을 추출한다.supabase.storage
로 해당 버킷과 상호작용한다.upload
upsert: true
설정을 사용해 파일이 이미 존재할 경우 덮어쓰기를 허용할 수 있다.export async function searchFiles(search: string = "") {
const supabase = await createServerSupabaseClient();
const { data, error } = await supabase.storage
.from(process.env.NEXT_PUBLIC_STORAGE_BUCKET)
.list(null, {
search,
});
handleError(error);
return data;
}
list
null
: 버킷의 Root Directory에서 모든 파일을 조회한다.search
: 검색 조건을 정의하여 특정 파일명으로 필터링한다.이전 Supabase의 장점에 대한 소개글에서도 언급한 바와 같이, Supabase는 행 수준 보안(RLS)을 제공하도록 구현되었고, Supabase Storage 또한 Postgres RLS와 완벽하게 호환되도록 설계되었다.
이전에 작성한 포스트에서 발췌하였습니다.