https://aostols.tistory.com/53
[Unity]Playfab + AzureBlobStorage 사용하기
원래 계획은 Playfab을 사용하여 게임 데이터를 Playfab TitleData에 넣으려고 했습니다.그런데 Playfab에서 넣을수 있는 노드의 양이 적고 전체 크기 역시 제한적이기 때문에 결론적으로는 넣을수 없었
aostols.tistory.com
이전 포스트에서는 SAS를 활용하여 제한된 링크를 전달하는 방법을 확인 했었습니다.
이번에는 AzureFunction 내부에서 BlobStorage를 사용하는 방법을 확인해 보겠습니다.
일단 Azure의 세팅은 기존과 동일 합니다.

리소스 그룹을 만들고 스토리지 계정을 만들어 줍니다.

그리고 Blob service를 사용 합니다.

컨테이너를 만들고 컨테이너 내부에 파일을 올려 blob들을 생성합니다.

exp.json 파일을 올렸습니다.
이제 이 exp.json 파일을 Azure Function 에서 사용할 예정입니다.
Azure Function 에서 쉽고 안전하게 사용하려면 엑세스 키를 사용합니다.

생성한 스토리지 계정에 가서 좌측 메뉴에서 보안+네트워킹 -> 엑세스 키 로 접근합니다.

스토리지 계정 이름이 올바른지 확인 후 연결 문자열을 복사해 줍니다.
이제 사용할 Azure Function으로 갑니다.

여기서도 좌측 메뉴에 설정 -> 환경 변수를 선택 해 줍니다.


추가 버튼을 눌러서 적당한 이름으로 연결 문자열을 붙여넣어 줍니다.
string connectionString = Environment.GetEnvironmentVariable("***********") ?? "";
string containerName = "****";
string blobName = "exp.json";
BlobServiceClient blobServiceClient = new BlobServiceClient(connectionString);
BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(containerName);
BlobClient blobClient = containerClient.GetBlobClient(blobName);
if(!blobClient.Exists())
{
return null;
}
BlobDownloadResult download = await blobClient.DownloadContentAsync();
string jsonContent = download.Content.ToString();
JsonData jsonTemp = JsonMapper.ToObject(jsonContent);
return jsonTemp;
기존 SAS사용과 비슷합니다.
환경변수에서 connectionString 받아오고 이것으로 BlobServiceClient -> BlobContainerClient->BlobClint 순으로 만들어 줍니다.
여기서 저는 실수를 많이 했던것이 containerName 과 blobName 을 올바르게 입력하지 않는 경우가 많았습니다.
각각의 이름들을 잘 확인 하셔야 합니다.
blobClient.DownloadContentAsync() 로 다운로드 받고 처리하면 json 을 사용 할 수 있습니다.
캐싱
여기서 자주 사용하는 파일이라면 캐싱을 하고 싶은 니즈가 있을수 있습니다.
다만 서버리스 환경이다 보니 캐싱이 필요한가 싶기도 한데 결론적으로 부분적인 캐싱은 가능합니다.
서버리스 환경에서 인스턴스 하나가 돌면서 계속 처리하게 된다면(지속적인 호출이 있다면) static 변수들은 유지됩니다.
물론 인스턴스가 얼마 후에 꺼지게 되는데 그때는 캐싱 한 것들은 다 날아갑니다.
그래서 캐싱하고 싶은 것들은 static 변수에 넣어두면 잠시나마 캐싱할 수 있습니다.
하지만 이것 역시 과도하게 static 변수에 넣게 되면 메모리 사용량 올라가서 함수 호출비용이 더 커질수도 있으니 주의해야 합니다.
사실 static변수 활용 외에도 외부적으로 캐싱하는 방법은 많이 있습니다.
레디스를 사용하거나 FrontDoor를 사용하거나 한다면 캐싱을 사용 할 수 있는데 소규모 개발에서는 배보다 배꼽이 더 큰 상황으로 BlobStorage읽는 비용보다 캐싱비용이 더 많이 나갑니다.
따라서 일정규모 이상 프로젝트가 크지 않다면 static 변수정도로 캐싱하는게 적절하며 그 이상은 과도하다는 것이 저의 결론 입니다.