본문 바로가기

Unity

[Unity] 유니티와 AWS DynamoDB 연결

AWS의 DynamoDB 서비스는 유니티에서 이용 가능한 비관계형 데이터베이스 서비스이다.

이 포스팅에서는 유니티에서 DynamoDB 서비스를 이용하는 방법에 대해 다루도록 하겠다.

 

시작하기에 앞서 먼저 AWS 자격 증명이 필요하다.

AWS Cognito 연동이 안되어있는 경우, 아래 포스팅을 통해 연동 방법을 확인할 수 있다.

2019/08/26 - [Unity] - [Unity] 유니티와 AWS Cognito 연동하기

 

[Unity] 유니티와 AWS Cognito 연동하기

유니티에서는 아래와 같이 여러 서비스를 AWS에서 제공한다. • Amazon Cognito • Amazon DynamoDB • AWS Identity and Access Management • Amazon Kinesis Streams • AWS Lambda •..

greenapple16.tistory.com


 

AWS 서비스 탭에서 DynamoDB콘솔 창에 접속한다.

 

 

 

 

지역 설정 후, '테이블 만들기' 선택

 

 

 

테이블 이름기본 키(문자열)을 작성한다.

기본 키는 앞으로 해시 키가 되기 때문에 신중하게 선택하는 것이 좋다.

기본 키외에 다른 속성은 테이블 생성 이후 추가 가능하다.

작성 완료 후 '생성' 클릭

 

 

 

다른 속성을 추가하여 데이터를 입력하려면 항목 탭에서 '항목 만들기'를 선택한다.

 

 

 

 

데이터 타입을 선택 후 추가 가능하다.

 

 

 

연결 확인을 위해 샘플 데이터를 몇 개 생성한다.

 

 

 

그 다음, DynamoDB 접근 권한 설정을 위해 IAM 콘솔 창으로 접속한다.

 

 

 

좌측의 역할 탭을 클릭하면, 역할 목록을 볼 수 있다.

이 중에서 Cognito_(자격 증명 풀이름)Unauth_Role 역할을 클릭한다.

 

 

 

'정책 연결' 클릭

 

 

 

'정책 생성' 선택

 

 

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:BatchWriteItem",
                "dynamodb:PutItem",
                "dynamodb:DescribeTable",
                "dynamodb:ListTables",
                "dynamodb:DeleteItem",
                "dynamodb:GetItem",
                "dynamodb:Scan",
                "dynamodb:Query",
                "dynamodb:UpdateItem"
            ],
            "Resource": "*"
        }
    ]
}

dynamoDB 접근 권한을 위해 JSON 파일을 작성한다.

위의 내용을 그대로 복사하여서 적용하여도 무방하다.

작성  후 '정책 검토' 클릭

 

 

 

이름과 설명을 적당히 입력하고 '정책 생성'을 클릭한다.

 

 

 

정책이 생성된 것을 확인할 수 있다.

 

 

 

다시 역할 탭으로 가서 '정책 연결'을 클릭한다.

 

 

 

방금 생성한 정책을 체크한 뒤 '정책 연결'을 클릭한다.

 

 

 

다시 역할 탭으로 가보면 방금 추가한 정책을 확인할 수 있다.

여기까지 완료 후, 유니티로 넘어간다.

 

 

 

 

http://sdk-for-net.amazonwebservices.com/latest/aws-sdk-unity.zip

위의 링크에서 압축 파일을 받은 후, 압축을 풀고 DynamoDB SDK 패키지 파일을 임포트 한다.

 

 

 

using UnityEngine;
using UnityEngine.SceneManagement;
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using Amazon;
using Amazon.CognitoIdentity;
using Amazon.DynamoDBv2;
using Amazon.DynamoDBv2.DataModel;

public class StartProgram : MonoBehaviour
{
    DynamoDBContext context;
    AmazonDynamoDBClient DBclient;
    CognitoAWSCredentials credentials;
    private void Awake()
    {
        UnityInitializer.AttachToGameObject(this.gameObject);
        credentials = new CognitoAWSCredentials("자신의 자격 증명 풀 ID", RegionEndpoint.APNortheast2);
        DBclient = new AmazonDynamoDBClient(credentials, RegionEndpoint.APNortheast2);
        context = new DynamoDBContext(DBclient);
        CreateCharacter();
        FindItem();
    }

    [DynamoDBTable("character_info")]
    public class Character
    {
        [DynamoDBHashKey] // Hash key.
        public string id { get; set; }
        [DynamoDBProperty]
        public int item { get; set; }
    }

    private void CreateCharacter() //캐릭터 정보를 DB에 올리기
    {
        Character c1 = new Character
        {
            id = "happy",
            item = 1111,
        };
        context.SaveAsync(c1, (result) =>
        {
            //id가 happy, item이 1111인 캐릭터 정보를 DB에 저장
            if (result.Exception == null)
                Debug.Log("Success!");
            else
                Debug.Log(result.Exception);
        });
    }

    public void FindItem() //DB에서 캐릭터 정보 받기
    {
        Character c;
        context.LoadAsync<Character>("abcd", (AmazonDynamoDBResult<Character> result) =>
        {
            // id가 abcd인 캐릭터 정보를 DB에서 받아옴
            if (result.Exception != null)
            {
                Debug.LogException(result.Exception);
                return;
            }
            c = result.Result;
            Debug.Log(c.item); //찾은 캐릭터 정보 중 아이템 정보 출력
        }, null);
    }
}

테스트용 스크립트를 위와 같이 작성한다.

스크립트 내용에 대한 설명을 덧붙이자면,

 

 

 

Cognito 연동을 위해 생성한 credential을 이용하여 DBclient를 구성한다.

 

 

 

DynamoDB 콘솔창에서 생성한 테이블 구조와 같게 작성하여 데이터를 올리는 기본 틀을 생성한다.

[DynamoDBTable("테이블 이름")] 을 통해 테이블을 선언할 수 있다.

 

 

 

CreateCharacter 함수를 실행시키면, id를 happy, item을 1111을 갖는 캐릭터 c1이 DB에 저장된다.

저장을 실패 할 경우, 해당되는 에러 로그가 뜨며, 그렇지 않을 경우 DynamoDB 콘솔창에서 c1의 정보가 저장된 것을 확인할 수 있다.

 

 

 

FindItem 함수를 실행시키면, 해시 키(id) 값인 abcd를 이용하여 id가 abcd인 캐릭터 정보를 받아온다.

받아오기를 실패할 경우, 해당되는 에러 로그가 뜨며, 그렇지 않을 경우 id가 abcd인 캐릭터의 item 값을 출력한다.

 

 

 

위와 비슷하게 응용하여 유니티에서 DynamoDB와 데이터를 주고 받을 수 있다.

 

 

 

LIST