안녕하세요. 갤러리 페이지의 성능 문제를 해결한 경험을 공유합니다. 진입할때마다 페이지가 느리다고 느껴서 혼자 프로젝트를 출시하기 전에 성능 개선을 해야겠다고 생각했습니다. Lighthouse로 페이지를 분석하니 예상대로 지표 역시 만족스럽지 못한 상태임을 확인했습니다.
문제를 해결하기 위해 두 가지 주요 개선 방향을 설정했습니다.
갤러리 페이지에서 서버와의 통신이 느린 주된 이유는 이미지 데이터를 저장한 방식 때문이었습니다. 당시에는 1인 프로젝트라 비용 문제를 고려해 MongoDB에 Base64 포맷으로 이미지를 직접 저장하는 방식을 선택했습니다.
이러한 Base64 방식은 구현 속도가 빠르고 초기 비용이 들지 않는 장점이 있지만, 다음과 같은 단점이 있었습니다:
새로운 접근: 이미지 저장소로 Vercel Blob 도입
이러한 문제를 해결하기 위해 Vercel Blob을 사용해 이미지 저장소를 분리했습니다. 이로써 MongoDB에는 이미지 주소(URL)만 저장하도록 구조를 변경했습니다.
Base64와 Blob 방식을 간단히 비교하면 다음과 같습니다:
Base64: 바이너리 데이터를 텍스트 형태로 변환해 저장. 가독성이 떨어지고 용량 증가 문제 발생
Blob: 바이너리 데이터를 객체 형태로 저장. 가볍고 효율적
Vercel Blob은 S3 대비 다음과 같은 장점이 있어 선택했습니다:
Vercel Blob을 도입한 후, 서버와의 통신 속도가 눈에 띄게 향상되었습니다. 이미지 주소만을 저장함으로써 DB 부하가 줄어들었고, 클라이언트 로딩 속도도 크게 개선되었습니다.

first contentful paint는 16.5s -> 1.7s
largest contentful paint 는 18s-> 3.1s
로 개선되었습니다.
S3에 비해 설정이 직관적이고 간단했으며, Vercel 문서를 따라 구현하기 쉬웠습니다. 이번 개선 과정을 통해 비용과 성능, 그리고 사용 편의성 간의 균형을 잡을 수 있었습니다.
다음으로, 2. ux를 위해 로딩과 스켈레톤 도입, 썸네일 성능 개선에 사용하는 이미지 CDN 도입을 생각 중입니다.