배경
- 프로젝트 초기 구축할 때 Firebase를 도입하였다.
Firebase?

- Google에서 제공하는 백엔드 서비스 플랫폼(BaaS, Backend as a Service)
- 복잡한 서버나 인프라 지식 없이 앱을 만들 수 있게 도와준다.
- 따로 백엔드 서버를 구축하지 않아도 된다.
왜?
- 무료이다.
- 정적 호스팅을 지원해준다.
- 따로 백엔드 서버를 구축하지 않아도 되므로 개발시간 단축가능하다.
- 초기 개발단계에선 이미지를 많이 사용하지 않을 것이라 예상했다.
문제점
- 오프셋 기반 페이징 처리가 되지 않는다.
- 프로젝트가 진행될수록 게시판 형태가 필요해졌고, 데이터가 증가하였다.
offset()
메서드를 지원하지만 offset(3000) 할경우, 3000번의 쿼리가 발생한다.
- 공식문서에서도 커서기반 페이징 처리를 권장한다.
→ 하지만 프로젝트 특성상 오래된 데이터 조회,
검색엔진 도입 계획도 있기 때문에 한계가 명확했다.
- Firebase Storage 이미지 렌더링 시, 로딩이 너무 길다.
- 무료요금제라서 한정된 5GB 저장공간, 자동 리사이징 기능을 제공해주지 않음
- CDN 기능도 제공해주지 않고, 하려면 유료 요금제로 전환해야함
Cloudflare의 images 기능을 적용하자
- 유료이긴 하지만 100,000 이미지를 한달의 $10로 사용할 수 있음 (무료도 있음)
- 커스텀 리사이징, CDN 기능, 포맷 최적화
- 보안 설정도 포함되어 있음 → 올인원 느낌
- 리사이징 기능도 쿼리파라미터로 쉽게 설정가능하고, 이미지를 가져오는 방법도 편리
❓ CDN(Content-Delivery-Network)

기존 방식의 문제점
- 컨텐츠를 제공하는 서버가 사용자 기준에서 멀리 위치해 있다면,
컨텐츠의 다운로드 시간이 오래 걸리는 문제가 발생할 수 있다.
- 규모가 큰 사이트의 경우에는 세계 각국의 무수한 사용자가 해당 서버로 몰리게 되고, 수많은 요청을 감당해야한다는 어려움이있다.
- 응답시간: 대기시간 + 처리시간
- 처리 시간을 줄이기 위해서는 쿼리 튜닝, 캐시, 하드웨어 업그레이드 등의 방법이 있다.
- 대기 시간을 줄이기 위해서는 응답 크기 줄이기, 트래픽 분리하기, 대역폭 늘리기 등이 있다.
여기서 CDN은 트래픽을 분리해서 대기 시간을 줄여준다.
CDN 도입시
- CDN을 사용하면 사용자는 지리적으로 가까운 서버 또는 가장 빠르게 서비스를 제공할 수 있는 서버를 통해 컨텐츠를 다운로드할 수 있으므로, 다운로드 시간이 단축되고 웹사이트나 애플리케이션의 성능이 향상된다.
- CDN 서버에는 사이트의 각종 이미지나 기타 정적 요소들이 상당수 저장, 캐싱 되어있다. 때문에 보다 빠르게 사이트를 이용할 수 있다.
- 결국 CDN의 대역폭 비용을 줄여준다는 것은 본사로 손님들이 직접 찾아오는 것이 아니니까 본사로 가는 길을 넓게 깔 필요가 없다는 것이다. 그런 측면에서 서버 호스팅 비용이 절감되고, 가용성과 안정성도 향상된다.
AWS S3를 이용하지 않은 이유?
- CDN 적용을 위해선 CloudFront를 따로 설정해야 함 → 비용증가
- 이미지 리사이징 기능 제공하지 않음
- 보안의 경우, IAM 설정등 따로 추가해야 함
- 모든 과정이 과금과 관련되어 있기에 스트레스 받음
- AWS 환경을 사용한다면 연동하기 편리함
- 이미지 뿐만 아닌 다양한 데이터 저장이 가능함
→ 이미지/영상은 Cloudflare
도 가능