| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- meta xr
- 유니티 UI
- 포트폴리오
- 유니티
- CGV
- 유니티 Json 데이터 연동
- meta
- Oculus
- 팀프로젝트
- 연습
- 드래곤 플라이트 모작
- 개발
- 팀 프로젝트
- 멀티플레이
- Unity
- 오브젝트 풀링
- 드래곤 플라이트
- 모작
- ChatGPT
- VR
- 아마존
- 유니티 GUI
- AWS
- 길건너 친구들
- 개발일지
- 가상현실
- Photon Fusion
- OVR
- 오큘러스
- Amazon S3
- Today
- Total
EasyCastleUNITY
Amazon S3 with Unity R&D 4 - 유니티를 통해 S3 저장소에서 파일 받아오기 (AccessKey 이용) 본문
Amazon S3 with Unity R&D 4 - 유니티를 통해 S3 저장소에서 파일 받아오기 (AccessKey 이용)
EasyCastleT 2025. 6. 17. 11:38Amazon S3 with Unity R&D 3 - IAM Access Key 설정
Amazon S3 with Unity R&D 2 - S3 사용법Amazon S3 with Unity R&D 1회사에서 VR 앱을 개발하고 있는데, 기타 동영상 등을 저장할 저장소에 필요성이 대두되었다. 회사 전용 개발 서버가 있지만, http 여서 보안 수
easycastleunity.tistory.com
이전 포스트에 이어서 작성한다.
이전 포스트들을 통해, S3 사용법, AccessKey 발급, 유니티 기본 세팅에 대해 알아보았다.
이 준비한 것들을 통해 유니티에서 직접 파일을 다운로드 받아 보겠다.
테스트 사전 준비
테스트를 위해 여러분의 버킷에 사용할 파일을 간단하게 하나 올려주기 바란다.
필자는 버킷 제일 위에 testVideo.mp4 라는 파일을 올려 테스트 해보았다.

S3 파일 받아오기
먼저 S3에서 파일을 받아오기 위한 간단한 스크립트를 작성해 보았다.
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System.IO;
using System.Threading.Tasks;
using UnityEngine;
public class S3DownloadTest : MonoBehaviour
{
#region Variable
[Header("S3 Setting")]
[SerializeField] string bucketName; //your-bucket-name
[SerializeField] string fileKey; //file location in bucket - ex : VideoClips/testVideo.mp4
[Header("AWS Certification Info")]
[SerializeField] string accessKey; // your access key
[SerializeField] string secretKey; // your secret key
RegionEndpoint regionEndpoint = RegionEndpoint.APNortheast2; // seoul
private string localFilePath; // save local file path
private IAmazonS3 s3Client; // client for s3
#endregion Variable
// Start is called once before the first execution of Update after the MonoBehaviour is created
async void Start()
{
s3Client = new AmazonS3Client(accessKey,secretKey,regionEndpoint);
localFilePath = Path.Combine(Application.persistentDataPath, "downloaded_testVideo.mp4");
await DownloadFromS3();
}
private async Task DownloadFromS3()
{
try
{
var request = new GetObjectRequest
{
BucketName = bucketName,
Key = fileKey
};
using(var response = await s3Client.GetObjectAsync(request))
using(var responseStream = response.ResponseStream)
using(var fileStream = File.Create(localFilePath))
{
await responseStream.CopyToAsync(fileStream);
Debug.Log("<color=cyan>다운로드 성공</color>");
}
}
catch (AmazonS3Exception e)
{
Debug.LogError($"S3 다운로드 실패: {e.Message}");
}
}
}
<코드 전문>
변수들에 대한 설명은 주석으로 하고 있으니 생략하고, 중요한 부분들을 봐보겠다.
먼저 DownloadFromS3 함수이다.
private async Task DownloadFromS3()
{
try
{
var request = new GetObjectRequest
{
BucketName = bucketName,
Key = fileKey
};
using(var response = await s3Client.GetObjectAsync(request))
using(var responseStream = response.ResponseStream)
using(var fileStream = File.Create(localFilePath))
{
await responseStream.CopyToAsync(fileStream);
Debug.Log("<color=cyan>다운로드 성공</color>");
}
}
catch (AmazonS3Exception e)
{
Debug.LogError($"S3 다운로드 실패: {e.Message}");
}
}
먼저 통신을 통해 받아오는 것이기에 try - catch로 구현했다.
try 문을 보면, request에 GetObjectRequest를 할당해주었다. 이 GetObjectRequest에서 버킷이름, 버킷 내 파일 위치를 각각 Bucket Name, Key라는 객체 변수안에 저장해준다.
이를 통해 알 수 있듯, 파일을 S3에서 받아오려면 받아오려는 파일이 정확히 S3 Bucket안에서 어느 위치에 있는지 개발자가 알고 있어야 사용할 수 있다.
만든 request 객체를 사용해 미리 만들어둔 s3Client의 GetObjectAsync 함수를 호출한다. 이건 통신이기에 통신 결과가 날아오기 전까지 기다리도록 await 으로 구현했다. 그 날아온 통신 결과값을 response (type : GetObjectResponse) 라는 변수에 저장한다.
날아온 통신 결과 중, 다운 받은 파일의 데이터 스트림을 가지고 있는 response.ResponseStream을 responseStream이라는 변수에 저장하고,
c# System에서 제공하는 File.Create를 통해 지정해준 위치에 fileSteam을 하나 생성하고, 해당 fileStream에 날아온 데이터 스트림 복사해 저장해준다.
이런 일련의 과정을 통해 다운 받은 파일이 저장된다.
이번에는 Start를 봐보자
async void Start()
{
s3Client = new AmazonS3Client(accessKey,secretKey,regionEndpoint);
localFilePath = Path.Combine(Application.persistentDataPath, "downloaded_testVideo.mp4");
await DownloadFromS3();
}
입력해둔 액세스 키와 비밀 액세스 키, Region 정보를 통해 s3Client를 생성한다.
localFilePath에 어디에 파일을 저장할 지 위치를 지정해주고, DownloadFromS3 함수를 실행한다.
이 스크립트를 씬에 있는 빈 게임 오브젝트에 넣어서 아래 사진을 참고하여 변수에 정보를 할당해주면 테스트 환경이 구성된다.

이에 맞게 환경을 구성해서 테스트를 진행해 보았다. 아래는 실행결과 영상이다.
지정된 위치에 파일이 잘 다운로드 되는 것을 확인할 수 있다.
이렇게 유니티에서 S3 파일을 다운로드 하는 방법에 대해 알아보았다.
실제로 사용하려면 확장자나, 여러 문제들을 해결할 필요가 있을 것이다.
주의사항 : 이 방법은 테스트 환경에는 적합하지만, 실 서비스에서 사용하려고 하면 안된다. 이 방법은 빌드 파일 내에 키가 저장되는 방식이기에, 빌드 디컴파일러 등을 통해 빌드 파일을 해체하는 순간, 그대로 Key들이 유출되게 된다.
이 방법은 테스트 환경에서 유니티에서 s3를 통해 파일을 받아올 수 있는지 테스트 하기 위해서만 사용하기를 권장한다. 실 서비스에서 사용하려고 하면, 보안 측면에서의 위험이 매우 높다. 그렇기에 다음 포스트에서는 Key들이 빌드 파일에 없도록 구현하는 방법에 대해 다루어 보려고 한다.
'기타 R&D' 카테고리의 다른 글
| Amazon S3 with Unity R&D 3 - IAM Access Key 설정 (0) | 2025.06.16 |
|---|---|
| Amazon S3 with Unity R&D 2 - S3 사용법 (0) | 2025.06.16 |
| Amazon S3 with Unity R&D 1 - 유니티 기본 세팅 (0) | 2025.06.10 |