Cloudflare R2 - 소개

최정환·2023년 12월 1일
0

cloudflare

목록 보기
1/2

Cloudflare R2: 현대적인 데이터 저장 솔루션

Cloudflare R2는 객체 스토리지 서비스로, AWS S3와 호환되는 강력한 기능을 제공합니다.
특히, 데이터 전송 비용 없이 저렴한 저장 비용을 자랑하며, 이는 대용량 데이터 관리에 매우 유리합니다.

저장 비용만 볼땐 큰 차이가 없지만

outbound 비용을 본다면 큰 차이가 생깁니다

프로젝트 내 구현 방법 및 활용

프로젝트에서 R2는 핵심적인 데이터 저장 및 관리 도구로 활용되었습니다.

사용자 인터랙션의 중심에 Cloudflare R2 적용: 식물 및 일지 이미지 등 사용자가 직접 업로드하는 데이터를 R2에 저장하여 효율적으로 관리했습니다.

Cloudflare R2 SDK 통합: 프로젝트에 AWS S3 SDK를 통합하여 프로그래밍적으로 파일을 업로드하고 관리할 수 있게 했습니다.
이를 통해 더욱 유연하고 확장 가능한 데이터 관리 방식을 구현했습니다.

효율적인 파일 관리: 사용자의 파일 업로드는 R2에 저장되며, 필요에 따라 CRUD 작업을 수행할 수 있도록 설계했습니다.

DNS A name : Cloudflare의 DNS를 사용해 sub domain을 간단하게 설정 가능합니다.

S3 sdk를 바로 사용할 수 있습니다. 아래와 같은 짧은 코드를 사용하면 바로 이미지를 업로드 할 수 있습니다.

  public void uploadPlantImage(User user, Plant plant, ByteBuffer imageBuffer) {
        String imageHash = cloudFlareR2Utils.calculateImageHash(imageBuffer);

        String imageType = "thumbnail";
        String filePath = user.getEmail() + "/" + plant.getId()
                + "/" + imageType + "/image.jpg";

        String fileName = storagePointUri + filePath;
        plant.setImgUrl(fileName);
        logger.info("img URL :: {}", plant.getImgUrl());

        putObjectToR2(imageBuffer, imageHash, filePath);
    }

특별한 사용 사례

다이나믹 컨텐츠 제공: 사용자의 이미지와 메타데이터를 활용하여 동적인 콘텐츠를 제공했습니다. 이를 통해 사용자 경험을 극대화했습니다.

스토리지 비용 최적화: R2의 비용 효율적인 특성 덕분에 대용량 데이터 관리에 드는 비용을 상당히 절감할 수 있었습니다.

보안 및 성능 향상: R2를 사용함으로써 데이터의 보안과 액세스 속도를 개선할 수 있었습니다.

CDN 자동 적용 : R2에 객체를 저장하면 Cloudflare의 CDN이 자동으로 적용됩니다.

특별한 사용 사례 예시

메타 데이터를 사용해 식물 수정시 업로드 하려는 사진과 업로드 되어 있는 사진과 똑같다면 업로드 하지 않는다.

    public void editPlantImage(User user, Plant plant, ByteBuffer imageBuffer) {
        String imageType = "thumbnail";
        String filePath = user.getEmail() + "/" + plant.getId() + "/" + imageType + "/image.jpg";
        String fileName = storagePointUri + filePath;

		// 이미지 버퍼를 사용해 해시값을 생성함
        String imageHash = cloudFlareR2Utils.calculateImageHash(imageBuffer);

        String existingImageHash = retrieveImageHashFromR2(filePath);

        // 이미지 해시 비교
        if (!imageHash.equals(existingImageHash)) {
            logger.info("Image hash Changed now : {}, exist : {}", imageHash, existingImageHash);

            // 이미지 다르면 업로드 후 캐시 삭제
            uploadPlantImage(user, plant, imageBuffer);
            cloudFlarePurgeCache.purgeCache(fileName);

        }
    }

결론

Cloudflare R2는 프로젝트의 객체 데이터(이미지) 저장 및 관리에서 중추적인 역할을 했습니다.
특히 그 비용 효율성과 확장성은 프로젝트의 성공에 큰 기여를 했습니다.
이 경험을 통해 현대적인 클라우드 스토리지 솔루션의 잠재력을 실제로 경험할 수 있었습니다.

https://www.cloudflare.com/ko-kr/developer-platform/r2/

0개의 댓글