체인의정석

S3를 써서 NFT 메타데이터 업로드 하기 본문

개발/backend(js,ts)

S3를 써서 NFT 메타데이터 업로드 하기

체인의정석 2025. 11. 21. 17:29
728x90

프로그램에서 S3에 접근하기 위해서는 AWS credentials가 먼저 필요하다.

aws credentials 확인의 경우 다음과 같은 경로에 세팅 한다.

cat ~/.aws/credentials
[default]
aws_access_key_id = 
aws_secret_access_key =

ts에서 사용하는 패키지

import S3Helper from '@lib/AWS/S3Helper';

먼저 프로필을 사용해서 객체를 만들어 줘야 한다.

const testS3Helper = new S3Helper('us-west-2', 'default');

그리고 정책에 들어가서 해당 IAM계정이 S3에 어떠한 권한이 있는지 체크해야 한다.

보아하니 권한 끝에 /*가 붙어 있지 않으면 s3Object를 다룰 수 없다고 하여 붙여 주었다.

          await Promise.all([
            ...tokenIds.map((tokenId) =>
              s3Helper.s3
                .copyObject({
                  Bucket: PUBLIC_S3_BUCKETNAME,
                  CopySource: `/${PRIVATE_S3_BUCKETNAME}/nft1/${tokenId}.png`,
                  Key: `testNFT/${tokenId}.png`,
                })
                .promise(),
            ),
          ]);

만약 이런식으로 해두면 private에 미리 올려둔 S3에 접근해서 파일을 옮긴다면 

만약 CopySource인 S3에 해당 데이터가 없다면 "Copy failed The specified key does not exist."

이렇게 뜨게 된다.

이제 이벤트를 구독하면서 nft민팅이 확인된 순간 프라이빗 S3에서 퍼블릭 S3로 옮기게 되면 NFT 민팅이 완성된다.

이렇게 하는 이유는 위의 명령어는 S3 내부적으로 파일이 이동하는 것임으로 시간이 얼마 걸리지 않으며, nft가 민팅이 확정된 시점에 프라이빗 S3에서 퍼블릭 S3로 옮기면 짧은 시간 내에 nft민팅을 완료활 수 있기 때문이다.

728x90
반응형
Comments