프로그래밍에서 가장 중요한 것 중 하나인 것은 데이터일 것이다.
앱이나 웹이나 화면에 보이는 모든 것은 데이터 집합을 가공하여 나타내는 것이기 때문이다.
보통은 서버에서 데이터를 가공하여 결과만을 클라이언트가 받아 화면에 보여주는 것이 일반적일 것이다.
그러나 게임쪽에서는 조금 다르게 아래와 같은 상황에서 서버 데이터를 받아오지 않을 수 있다.
- 규모가 작아서 서버를 사용하지 않을 경우
- 서버 연동이 없는 게임
- 중요하지 않는 데이터를 고정 데이터로 사용하는 경우
사실 서버에서 데이터를 받아오는 것이 가장 좋겠지만, 서버(백엔드)라는 하나의 생태계를 간단한 배움으로써 커버할 수 있는 영역이 아닐뿐더러, 프로토타입을 전부 서버 데이터로 구성하는 것은 쉬운 일은 아닐 것이다.
그래서 보통은 'JSON' 데이터로 가공하여 사용하는데, 이러한 데이터를 직접 JSON으로 만드는 것 또한 너무 비효율적이다.
그래서 사람들은 '엑셀(CSV)' 를 가공하여 'JSON' 으로 파싱하거나 'Google SpreadSheets' 를 'JSON' 으로 파싱하는데, 여러 작업자들과 공유 및 수정이 편리한 'SpreadSheets'를 'JSON'으로 파싱하는 방법에 대해 글을 작성하고자 한다.
그러나 마냥 JSON 데이터로 만들어 앱 내부에 가지고 있으면 보안상 위험하다.
해커들은 앱의 내부를 보거나 수정이 가능한데, 이것을 막기란 거의 불가능하다. 그렇기 보안에 출중한 서버를 사용하는 것일테지만 위와 같은 이유로 불가하기 때문에 차선책을 선택할 것이다.
바로 AWS S3 에 JSON을 업로드하고 앱 실행 시에 다운로드받아 적용하는 것이다.
그럼 결국 앱 내부에 JSON 데이터를 들고 있는 것과 차이가 없을 것 같지만 그렇지 않다. 보안을 좀 더 강화한 버전은 아래와 같다.
- AES Key를 생성하여 JSON들을 암호화한다.
- 암호화된 JSON 데이터와 AES Key를 AWS S3에 업로드한다.
- 앱 실행 시 AWS S3에서 AES Key를 임시로 가져오고 암호화된 JSON 데이터들을 다운로드 한다.
- 암호화된 JSON 데이터들을 AES Key로 복호화한다.
- AES Key를 Dispose 하여 메모리 해제한다.
위의 과정에서 AES Key를 AWS S3에 업로드하는 것이 핵심이다.
이미 1번 과정에서 AES Key를 생성하였고, 이것을 가지고 JSON을 암호화하였기 때문에 이제 이 JSON들을 복호화 하기 위해선 JSON들을 암호화한 AES Key가 필요하다.
그러나 AES Key를 앱 내부에 들고있는 것 또한 멍청한 짓이다. 그렇기 때문에 1번 과정을 거쳐 암호화된 JSON과 함께 AWS S3에 업로드하는 것이다.
이렇게 하면 앱 내부에는 JSON들이 있다한들 암호화되어있으며, AES Key가 앱 내부에 없기 때문에 해독이 불가하다.
그리고 또하나 중요한 부분이 있다.
바로 AWS S3를 'public'으로 하는 것이 아닌 'private'으로 만들어 다운로드받는 것이다.
AWS S3 가 public으로 되어있으면 해커가 해당 URL만 가지고 있으면 AES Key와 JSON들을 손쉽게 다운로드받거나 업로드하여 문제가 될 것이다.
그렇기 때문에 AWS S3를 'private'으로 하여 다운로드하도록 하는 것이 중요한데 AWS 에서는 private한 버킷에서 객체를 다운로드 받으려면 '자격증명'이 필요하단다. 이 과정에서 AWS IAM과 AWS API Gateway, AWS Lambda를 사용할 수 밖에 없다.
AWS IAM에서 자격증명을 발급받기 위해서는 이를 실행하는 '서버'가 필요하다.

보통 AWS EC2 같은 곳에 서버를 구현하여 간단히 IAM에서 자격증명을 발급받을 수 있겠지만, EC2에 서버를 작성하는 일도 복잡할뿐더러 비용 이슈가 생긴다.
그렇기에 좀 더 간편하고 비용도 EC2보다 저렴한 AWS API Gateway와 AWS Lambda를 사용할 것이다.
AWS Lambda는 자격증명을 받급받는 것을 '서버 없이' 로직을 수행한다. 즉, 간단한 로직만으로 서버를 대신하는 '자격증명 발급'만을 위한 로직이 수행된다.
AWS API Gateway는 이러한 Lambda를 수행하기 위한 엔드포인트를 제공한다.
한마디로 URL을 제공하여 해당 URL로 접속하면 Lambda가 실행되어 자격증명을 발급받은 내용을 다시 API로 Return한다는 뜻이다.
결론적으로 정리하면 아래와 같다.
- JSON 데이터를 AWS S3에 업로드 (비공개 설정)
- 유니티 애플리케이션에서 AWS API Gateway 엔드포인트를 호출하여 Lambda 함수를 실행
- Lambda 함수가 S3 객체에 대한 사전 서명된 URL(Presigned URL)을 생성하여 반환
- 유니티 애플리케이션에서 받은 사전 서명된 URL을 사용하여 S3에서 JSON 파일을 직접 다운로드
쉽지 않은 정리가 되겠지만 차근차근 진행해보도록 하자.
'프로그래밍 > 유니티' 카테고리의 다른 글
| 클라이언트 데이터 JSON 파싱 - 5 (0) | 2024.12.10 |
|---|---|
| 클라이언트 데이터 JSON 파싱 - 4 (0) | 2024.12.09 |
| 클라이언트 데이터 JSON 파싱 - 3 (1) | 2024.12.07 |
| 클라이언트 데이터 JSON 파싱 - 2 (1) | 2024.12.06 |