wasabi cloud 사용법 <nest.js> <typescript>

Cori1304·2025년 1월 3일
0

배포

목록 보기
2/2
post-thumbnail

wasabi 사용 배경

  • 현재 프로젝트에서 매주 백엔드 서버가 클라우드에서 문서를 다운로드 해야하는 로직이 필요하기에 cloud storage필요 이슈 발생
  • AWS s3를 대체하기 위한 플랫폼을 찾던중 비용을 80%를 주일 수 있는 플랫폼이라고 광고하는 문구에 눈이감 (AWS 사용했기에 비쌈을 느꼈기에 채택)

빠른 시작

회원가입과 로그인은 생략 궁금하면 아래 유트브 참고

wasabi cloud 공식 quick start youtube 영상

1. Bucket 생성

빨간 상자는 필수 나머지는 선택 그냥 Next 눌러도 문제 없음
(제일 가까운 곳이 일본이라서 도쿄를 고름, 필자 서버는 한국에 있음)
1. Bucket 생성
아래 사진과 같으면 Bucket 생성 완료

2. Access key 생성

그림에 순서로 클릭하여 access key 생성
Access key 생성 step1
만들어진 key를 CSV 파일로 다운 (access-key와 secret-key를 볼 수 있는데 절대로 secret-key는 외부 노출금지!!)

3. Bucket에 파일 업로드

사진과 같이 프로젝트에서 다운하고 싶은 파일을 넣어둔다(필자는 .txt 파일을 사용 파일 안에 내용을 대충 아무거나 넣어됨)

  • Bucket이름:bbucket1
  • 다운할 파일 이름: textfile.txt
  • testfile.txt 위치: bbucket1/test1/textfile.txt

4. typescript 예제 코드

nest.js 코드 아래 링크에 들어가서 참고
github nest.js 코드

// AWS s3S3 API와 호완 가능 
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3"; 
import * as fs from "fs";
import { pipeline } from "stream";
import { promisify } from "util";

const pipelineAsync = promisify(pipeline);

// S3 클라이언트 초기화
const s3 = new S3Client({
    region: "Tokyo ap-northeast-1", // Wasabi에서 설정한 리전
      endpoint: "https://s3.ap-northeast-1-ntt.wasabisys.com", // Wasabi의 S3 호환 엔드포인트S3 엔드포인트
    credentials: {
        accessKeyId: "YOUR_ACCESS_KEY_ID", // Wasabi Access Key
        secretAccessKey: "YOUR_SECRET_ACCESS_KEY", // Wasabi Secret Key
    },
});

// 파일 다운로드 함수
const downloadFile = async (bucketName: string, key: string, destinationPath: string) => {
    try {
        const command = new GetObjectCommand({
            Bucket: bucketName, // 버킷 이름
            Key: key, // 다운로드할 파일의 키 (bucket안에서 파일 위치)
        });

        // GetObjectCommand로 객체 가져오기
        const response = await s3.send(command);

        // response.Body 스트림을 로컬 파일로 저장
        if (response.Body) {
            await pipelineAsync(response.Body as NodeJS.ReadableStream, fs.createWriteStream(destinationPath));
            console.log(`File downloaded successfully to ${destinationPath}`);
        } else {
            console.error("No file body received from S3.");
        }
    } catch (error) {
        console.error("Error downloading file:", error);
    }
};

// 사용 예제
downloadFile("bbucket1", "test1/textfile.txt", "./download/hello_world.txt");

5. 실행

실행하기 전에 /download 디렉토리를 만들어야 오류 발생 안함

실행 영상

profile
개발 공부 기록

0개의 댓글