SlideShare a Scribd company logo
목표 : REST API로 파이어 베이스에 데이터를 넣어보자!
목차 :
1. REST API는 무엇인가?
2. 파이어 베이스는 무엇인가?
3. 왜 이것을 REST API로 구현하는 것인가?
4. 파이어 베이스의 별도 설정
5. 유니티에서 사용하는 방법
5-1. 저장하는 방법
5-2. 불러오는 방법
5-3. 삭제하는 방법
5-4. 기타
REST API는 무엇인가? 1/3
먼저 ‘Rest’의 의미를 파악하고 넘어가도록 하자.
REpresentationer -> 대표적
State -> 상태
Transper -> 이동
-> 파파고, 구글 번역기, 카카오 번역기에 모두 돌려 보았으나.. 애매하였다.
-----------------------
‘대표적 상태 이동’ 이라는 뜻을 가진 ‘REST’이것을 우리가 앞으로 배울 내용에 맞춰 다시 뜻을 해석하자면,
리소스(이미지, 글, 소리, 영상 등등)를 웹 주소 이름(대표적 이름)으로 하여금 데이터 정보(리소스 상태)를
주고 받는 행동(이동) 으로 재해석할 수 있다.
REST API는 무엇인가? 2/3
그럼 ‘API’는 무엇인가?
Application -> 적용
Programing -> 프로그래밍
Interface -> 인터페이스
-----------------------
‘적용 가능한 프로그래밍 인터페이스’라고 가볍게 해석할 수 있긴 한데.. 애매하다.
그래서 이것을 재해석을 하자면, 내가 만든 프로젝트에 외적에서 제공하는 특정 기능을 사용할 수 있게 해
주는 것. 이라 해석할 수 있을 것이다.
REST API는 무엇인가? 3/3
이 둘은 합친 ‘RESTAPI’는 무엇인가?
웹 주소 이름을 통해 외적에서 제공하는 특정 기능을 사용하는 것. 이라고 이해하면 매우 편할 것이다.
그래서 우리는 이 문서를 통해 구글의 파이어 베이스에서 제공하는 데이터 베이스를 웹 주소를 통해
데이터를 저장하고, 가져오며, 또는 구글의 인터넷 시간과 같은 것을 자유 자제로 사용할 수 있도록 해볼 것
이다.
파이어 베이스는 무엇인가?
파이어 베이스는 백&엔드 기능을 갖춘 구글에서 지원하고 있는 API 상품이다.
그러다보니 백&엔드의 전문적인 지식이 없더라도 손쉽게 작업을 처리할 수 있다.
파이어 베이스가 지원하고 있는 기능은 다음과 같다.
1. Auth
2. Database
3. Storage
4. Hosting
… other
왜 이것을 REST API로 구현하는 것인가?
이 문서에서 언급할 내용은 파이어 베이스에서 ‘데이터 베이스’의 영역 부분이다.
파이어 베이스에서 유니티 플랫폼을 위한 별도 SDK를 지원하고는 있으나..
모바일 한정이라는 부분이 있다. (추후에는 PC도 지원할 수 있음)
RESTAPI를 통해 구현을 한다면?
인터넷 통신으로 웹을 할 수 있는 디바이스라면 대부분 호환이 가능하다는 장점을 가지고 있다.
다른 부분도 언급하고 싶은데 RESTAPI를 지원 안함..
파이어 베이스의 별도 설정
파이어 베이스 - https://console.firebase.google.com
1. 파이어 베이스로 이동하여 시작하기를 클릭합니다.
파이어 베이스의 별도 설정
1. 프로젝트 추가를 클릭 합니다.
2. 프로젝트 이름을 입력하고 계속을 클릭합니다.
파이어 베이스의 별도 설정
1. 애널리틱스를 구현을 원하신다면 체크하고 ‘계속’을 진행
하시기 바랍니다.
이 문서는 애널리스트는 체크를 해제 함.
파이어 베이스의 별도 설정
1. 프로젝트가 준비가 완료가 되었다면 ‘계속’을 눌러 진행합니다.
만일 프로젝트를 제거하고 싶은 경우가 있다면 해당 경로를 통해 제거
하실 수 있습니다.
1 2
3
파이어 베이스의 별도 설정
1. 개발 패널을 오픈하고, Database 패널로 이동한 후, ‘데이터 베이스 만들기’를
클릭합니다.
1
2
3
파이어 베이스의 별도 설정
1. ‘데이터 베이스 만들기’를 클릭하면 ‘Cloud FireStore’를 설정하는 영역이 나오
는데, 우리가 사용할 데이터 베이스는 ‘Realtime Database’이므로 이 부분은 대
강대강 다음-다음을 눌러 스킵하듯 넘깁니다.
파이어 베이스의 별도 설정
1. 규칙으로 이동한 다음 읽고 쓰기를 모두 true로 변경하고 ‘게시’를 눌러 적용을
완료합니다.
유니티에서 사용하는 방법
이제 본격적으로 사용해봅시다.
언제나 그렇듯 사용하는 방법을 언급하는 도큐먼트를 통해 하나씩 나
아가 봅시다.
이 문서에서는 데이터를 관리할 때 Json을 손쉽게 처리할 수 있는
Newtonsoft의 Json라이브러리를 사용할 예정이며, 이는
어셋스토어에서 ‘Json .Net for Unity’어셋으로 다운로드 할 수 있다.
데이터 저장하는 방법 ->
https://firebase.google.com/docs/database/rest/save-data?authuser=0
저장하는 방법
데이터를 저장하는 방법은 ‘PUT’처리를 통해 쓰기를 할 수 있다고 나와있습니다.
RESTAPI를 제공하는 곳을 보면 대부분 어떤 형태로 처리해야
되는지 나와있으며, 함께 보내야 되는 양식 등등이 적혀져 있습니다.
RESTAPI를 제공하는 곳마다 적힌 순서가 약간씩은 다름
저장하는 방법
데이터를 저장하는 방법은 ‘PUT’처리를 통해 쓰기를 할 수 있다고 나와있습니다.
RESTAPI를 제공하는 곳을 보면 대부분 어떤 형태로 처리해야
되는지 나와있으며, 함께 보내야 되는 양식 등등이 적혀져 있습니다.
RESTAPI를 제공하는 곳마다 적힌 순서가 약간씩은 다름
저장하는 방법
코딩 에디터를 오픈하고, 상단에 저 두개를 추가합니다.
서버에 기록할 내용은 ‘이름-나이’ 데이터를 기록할 것이며, 이는 딕셔너리를 통해
데이터를 정의해줍니다.
웹 통신을 할 예정이므로 IEnumerator로 함수를 작성하도록 하겠습니다.
저장하는 방법
1. UserData를 Json으로 인코딩을 합니다.
2. UnityWebRequest.Put에 각각 데이터를 넣어주고
SendWebRequest를 작성하여 바로 동작할 수 있도록 해
줍니다.
.json 문자열 추가!!
불러오는 방법
1. 값을 가져오는 방법은 Get처리 방식으로 처리할 수 있다
는 것을 확인 할 수 있습니다.
2. 특별한 값을 같이 보내라는 내용이 없으므로, Get으로
호출만 하면 됩니다.
https://firebase.google.com/docs/database/rest/retrieve-data?authuser=0
불러오는 방법
1. Get으로 변경을 합니다.
2. 내용 전달이 이루어질때까지 yield return www.SendWebRequest부분에 스톱 트리거를 걸어둡니다.
3. 에러가 발생하면 error를 호출하고, 그것이 아니라면, downloadHandler.text를 통해 가져온 값을 확인할 수
있습니다.
불러오는 방법
1. 해당 코루틴을 호출하면 콘솔 창에서 우리가 기록한 내용
Json형태로 불러와지는 것을 확인할 수 있습니다.
삭제하는 방법
1. 값을 삭제하는 방법은 Delete처리 방식으로 처리할 수
있다는 것을 확인 할 수 있습니다.
2. 특별한 값을 같이 보내라는 내용이 없으므로, Delete로
호출만 하면 됩니다.
https://firebase.google.com/docs/database/rest/save-data?authuser=0
삭제하는 방법
1. Delete로 변경한 후 SendWebRequest로 함수를 실행합니다.
2. 해당 코루틴을 실행하면 데이터 베이스가 타노스가 핑거 스냅
을 한 것 마냥 깨끗해집니다.
기타
기타 파트에선 이런 내용을 언급합니다.
1. 특정 값만 변경하는 방법
2. 구글 시간TimeStamp 받는 방법
3. 데이터 관리를 객체로 하는 방법
기타 - 특정 값만 변경하는 방법
저장에서 사용되었던 데이터 입니다.
“Happy는 15살의 나이를 가지고 있다.” 라는 데이터가 기록된 것인데요. 15살의 나이는
실수로 입력된 나이이고, 실제로는 20살이라고 가정하에 Happy의 나이를 20살로 갱신
하도록 하겠습니다.
1. 특정 데이터만 값을 변경하는 방법은 Patch
처리 방식으로 할 수 있습니다.
2. 기존 Put방식은 A의 데이터만 변경하는 것이 아니라, A의 데이터가 수록되어있는 Parent가 갱신되는
것이었습니다. 그러다보니 A의 데이터가 수록되어있는 Parent의 안의 다른 데이터가 갑자기 없어져버
리는 데이터 누수가 발생할 수 있는 것이지요.
기타 - 특정 값만 변경하는 방법
1. 변경할 데이터 변수를 작성합니다.
2. Patch처리 방식은 아쉽게도 지원을 하지 않기 때문에, put으로 적고 method를 Patch로 변경합니다.
3. 이것을 SendWebRequest로 실행합니다.
기타 - 특정 값만 변경하는 방법
Happy의 데이터가 20으로 변경된 것을 확인할 수 있습니다.
기타 – 구글 시간 타임스탬프 받는 법
타임 스탬프 : 시간을 문자열로 표기한 것, 두개의 시간을 비교하거나 기간을 계산할 때 편리하게 사용하
기 위해 고안된 방식
유저가 게임을 1주일 동안 플레이를 했을 때 이벤트 상품을 준다고 가정을 해보자.
간단하게 알고리즘을 생각하면
1. 게임을 실행한 시간(A 변수)을 기록한다.
2. 이벤트를 시작하고 나서 1주일 후의 B의 시간 변수 - A 변수를 해서 0이거나 작으면 1주일이 지난 것으로
처리한다.
대충 이런 알고리즘을 생각할 수 있다.
근데 여기서 큰 문제가 하나 발생한다. 실행한 시간을 컴퓨터의 시간으로 처리하면 유저가 시간을 조작할 수 있
다는 점이다. 그래서 이런 시스템을 구축할 땐 웹 서버의 시간을 가져와서 처리를 한다.
기타 – 구글 시간 타임스탬프 받는 법
서버의 시간을 가져올 땐 Put처리로 하면 되고, 별도로 {“.sv” : “timestamp”}를 요구하는 것을
확인할 수 있다.
기타 – 구글 시간 타임스탬프 받는 법
보낼 데이터를 작성하고 이를 호출하면, 타임스탬프를 받을 수 있다.
이때 애매한 점은 Put처리로 호출하면 데이터가 사라지는 문제점이
발생한다. 그러므로TimeStamp 하위에 데이터가 기록될 수 있도록 내
용을 추가로 작성을 해준다.
기타 – 구글 시간 타임스탬프 받는 법
이렇게 출력된 타임 스탬프는 System라이브러리의 DateTime을 통해 시간 계산을 처리 할 수 있고,
또는 다시 Long 자료형의 타임 스템프로 변경시킬 수 있다.
기타 – 데이터 관리를 객체로 하는 방법
우리가 게임속에서 유저의 데이터를 관리하는 방법은 객체로 흔히 표현한다.
랭킹이라는 시스템을 만든다고 한다면,
랭킹 Class{
이름.
점수,
현재 레벨
}
이렇게 랭킹 클래스를 대략 만들 수 있을 것이다. 생성된 랭킹 클래스 데이터를 서버에 올리려면 어떻게 해야 할까?
다음 페이지에서 계속..
기타 – 데이터 관리를 객체로 하는 방법
읽는 것은 public으로 하고, 쓰기는 private로 처리한 다음, 생성자를
작성하여 쉽게 데이터를 대입할 수 있도록 한다.
기타 – 데이터 관리를 객체로 하는 방법
각각 유저의 데이터를 다르게 해서 두번 저장을 할 것이며, 이때 웹 주소 영역에 유저의 이름을 별도로 추가하였다.
중
요
C#6부터 추가된 String Interporation 기능
기타 – 데이터 관리를 객체로 하는 방법
그럼 데이터가 객체화 해서 저장되는 모습을 확인할 수 있
다.
다음 페이지에서 계속..
기타 – 데이터 관리를 객체로 하는 방법
서버에 기록된 유저들의 이름을 전부 출력하려면?
다음과 같이 작성하면 된다.. 사실 Json으로 뽑은 후 데이터 처리는 플머의 역량에 따라 달라질 것이다.
필자는 현재 저런 방식으로 출력을 하고 있는데, 무언가.. 코드가 길다.
이 문서를 읽어주셔서 감사합니다.
문제가 생기거나 질문이 있다면 카톡 art000215로 연락주시기 바랍니다

More Related Content

What's hot

사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
Seungmo Koo
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
Bongseok Cho
 
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
Minjung Ko
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
Chris Ohk
 
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2Jubok Kim
 
PINTOS Operating system homework 2
PINTOS Operating system homework 2PINTOS Operating system homework 2
PINTOS Operating system homework 2
Gichan Lee
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
Heungsub Lee
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
iFunFactory Inc.
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
Bongseok Cho
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
devCAT Studio, NEXON
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
KWANGIL KIM
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
Ryan Park
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shadingMinGeun Park
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴MinGeun Park
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
Bongseok Cho
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
포프 김
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
Seungmo Koo
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
YEONG-CHEON YOU
 

What's hot (20)

사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
사설 서버를 막는 방법들 (프리섭, 더이상은 Naver)
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
[NDC2017] 뛰는 프로그래머 나는 언리얼 엔진 - 언알못에서 커미터까지
 
C++20 Key Features Summary
C++20 Key Features SummaryC++20 Key Features Summary
C++20 Key Features Summary
 
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
NDC2012 - 완벽한 MMO 클라이언트 설계에의 도전, Part2
 
PINTOS Operating system homework 2
PINTOS Operating system homework 2PINTOS Operating system homework 2
PINTOS Operating system homework 2
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
게임 서버 성능 분석하기
게임 서버 성능 분석하기게임 서버 성능 분석하기
게임 서버 성능 분석하기
 
Screen space reflection
Screen space reflectionScreen space reflection
Screen space reflection
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
 
190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁190119 unreal engine c++ 입문 및 팁
190119 unreal engine c++ 입문 및 팁
 
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
온라인 게임에서 사례로 살펴보는 디버깅 in NDC2010
 
[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading[Ndc11 박민근] deferred shading
[Ndc11 박민근] deferred shading
 
게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴게임 프레임워크의 아키텍쳐와 디자인 패턴
게임 프레임워크의 아키텍쳐와 디자인 패턴
 
C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
게임서버프로그래밍 #0 - TCP 및 이벤트 통지모델
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 

Similar to 유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.

피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
Seomgi Han
 
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
Amazon Web Services Korea
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
flashscope
 
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
진태 이
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
sung yong jung
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)
HyoungEun Kim
 
추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)
AWSKRUG - AWS한국사용자모임
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
Kwangyoun Jung
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
봉조 김
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Sungjoon Yoon
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
Kenu, GwangNam Heo
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
Deuk Jung Kim
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
NAVER SHOPPING
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표
NAVER D2
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계
Wangeun Lee
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with Spring
Keesun Baik
 
Spring portfolio
Spring portfolioSpring portfolio
Spring portfolio
ssuser25d7ff
 
Jang hyun su portfolio ppt
Jang hyun su portfolio pptJang hyun su portfolio ppt
Jang hyun su portfolio ppt
ssuser25d7ff
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
cranbe95
 

Similar to 유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용. (20)

피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
게임을 위한 AWS의 다양한 관리형 Database 서비스 Hands on Lab (김성수 솔루션즈 아키텍트, AWS) :: Gaming ...
 
Parse.com 맛보기
Parse.com 맛보기Parse.com 맛보기
Parse.com 맛보기
 
7. html5 api
7. html5 api7. html5 api
7. html5 api
 
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
Http2(http2.0,g rpc,cookie,session,idempotent, x forwarded-for)
 
Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)Spring-Boot (springcamp2014)
Spring-Boot (springcamp2014)
 
Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)Rankwave MOMENT™ (Korean)
Rankwave MOMENT™ (Korean)
 
추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)추천서비스고군분투기 On Aws - 박진우 (레코벨)
추천서비스고군분투기 On Aws - 박진우 (레코벨)
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
 
Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)Ksug 세미나 (윤성준) (20121208)
Ksug 세미나 (윤성준) (20121208)
 
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리ecdevday3 효율적인 유지보수를 위한 개발 및 관리
ecdevday3 효율적인 유지보수를 위한 개발 및 관리
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
 
파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표파이어베이스 네이버 밋업발표
파이어베이스 네이버 밋업발표
 
Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계Spring integration을 통해_살펴본_메시징_세계
Spring integration을 통해_살펴본_메시징_세계
 
REST API Development with Spring
REST API Development with SpringREST API Development with Spring
REST API Development with Spring
 
Spring portfolio
Spring portfolioSpring portfolio
Spring portfolio
 
Jang hyun su portfolio ppt
Jang hyun su portfolio pptJang hyun su portfolio ppt
Jang hyun su portfolio ppt
 
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
Ndc2011 성능 향상을_위한_데이터베이스_아키텍쳐_구축_및_개발_가이드
 

유니티 REST API를 사용한 파이어 베이스의 데이터 베이스 사용.

  • 1. 목표 : REST API로 파이어 베이스에 데이터를 넣어보자!
  • 2. 목차 : 1. REST API는 무엇인가? 2. 파이어 베이스는 무엇인가? 3. 왜 이것을 REST API로 구현하는 것인가? 4. 파이어 베이스의 별도 설정 5. 유니티에서 사용하는 방법 5-1. 저장하는 방법 5-2. 불러오는 방법 5-3. 삭제하는 방법 5-4. 기타
  • 3. REST API는 무엇인가? 1/3 먼저 ‘Rest’의 의미를 파악하고 넘어가도록 하자. REpresentationer -> 대표적 State -> 상태 Transper -> 이동 -> 파파고, 구글 번역기, 카카오 번역기에 모두 돌려 보았으나.. 애매하였다. ----------------------- ‘대표적 상태 이동’ 이라는 뜻을 가진 ‘REST’이것을 우리가 앞으로 배울 내용에 맞춰 다시 뜻을 해석하자면, 리소스(이미지, 글, 소리, 영상 등등)를 웹 주소 이름(대표적 이름)으로 하여금 데이터 정보(리소스 상태)를 주고 받는 행동(이동) 으로 재해석할 수 있다.
  • 4. REST API는 무엇인가? 2/3 그럼 ‘API’는 무엇인가? Application -> 적용 Programing -> 프로그래밍 Interface -> 인터페이스 ----------------------- ‘적용 가능한 프로그래밍 인터페이스’라고 가볍게 해석할 수 있긴 한데.. 애매하다. 그래서 이것을 재해석을 하자면, 내가 만든 프로젝트에 외적에서 제공하는 특정 기능을 사용할 수 있게 해 주는 것. 이라 해석할 수 있을 것이다.
  • 5. REST API는 무엇인가? 3/3 이 둘은 합친 ‘RESTAPI’는 무엇인가? 웹 주소 이름을 통해 외적에서 제공하는 특정 기능을 사용하는 것. 이라고 이해하면 매우 편할 것이다. 그래서 우리는 이 문서를 통해 구글의 파이어 베이스에서 제공하는 데이터 베이스를 웹 주소를 통해 데이터를 저장하고, 가져오며, 또는 구글의 인터넷 시간과 같은 것을 자유 자제로 사용할 수 있도록 해볼 것 이다.
  • 6. 파이어 베이스는 무엇인가? 파이어 베이스는 백&엔드 기능을 갖춘 구글에서 지원하고 있는 API 상품이다. 그러다보니 백&엔드의 전문적인 지식이 없더라도 손쉽게 작업을 처리할 수 있다. 파이어 베이스가 지원하고 있는 기능은 다음과 같다. 1. Auth 2. Database 3. Storage 4. Hosting … other
  • 7. 왜 이것을 REST API로 구현하는 것인가? 이 문서에서 언급할 내용은 파이어 베이스에서 ‘데이터 베이스’의 영역 부분이다. 파이어 베이스에서 유니티 플랫폼을 위한 별도 SDK를 지원하고는 있으나.. 모바일 한정이라는 부분이 있다. (추후에는 PC도 지원할 수 있음) RESTAPI를 통해 구현을 한다면? 인터넷 통신으로 웹을 할 수 있는 디바이스라면 대부분 호환이 가능하다는 장점을 가지고 있다. 다른 부분도 언급하고 싶은데 RESTAPI를 지원 안함..
  • 8. 파이어 베이스의 별도 설정 파이어 베이스 - https://console.firebase.google.com 1. 파이어 베이스로 이동하여 시작하기를 클릭합니다.
  • 9. 파이어 베이스의 별도 설정 1. 프로젝트 추가를 클릭 합니다. 2. 프로젝트 이름을 입력하고 계속을 클릭합니다.
  • 10. 파이어 베이스의 별도 설정 1. 애널리틱스를 구현을 원하신다면 체크하고 ‘계속’을 진행 하시기 바랍니다. 이 문서는 애널리스트는 체크를 해제 함.
  • 11. 파이어 베이스의 별도 설정 1. 프로젝트가 준비가 완료가 되었다면 ‘계속’을 눌러 진행합니다. 만일 프로젝트를 제거하고 싶은 경우가 있다면 해당 경로를 통해 제거 하실 수 있습니다. 1 2 3
  • 12. 파이어 베이스의 별도 설정 1. 개발 패널을 오픈하고, Database 패널로 이동한 후, ‘데이터 베이스 만들기’를 클릭합니다. 1 2 3
  • 13. 파이어 베이스의 별도 설정 1. ‘데이터 베이스 만들기’를 클릭하면 ‘Cloud FireStore’를 설정하는 영역이 나오 는데, 우리가 사용할 데이터 베이스는 ‘Realtime Database’이므로 이 부분은 대 강대강 다음-다음을 눌러 스킵하듯 넘깁니다.
  • 14. 파이어 베이스의 별도 설정 1. 규칙으로 이동한 다음 읽고 쓰기를 모두 true로 변경하고 ‘게시’를 눌러 적용을 완료합니다.
  • 15. 유니티에서 사용하는 방법 이제 본격적으로 사용해봅시다. 언제나 그렇듯 사용하는 방법을 언급하는 도큐먼트를 통해 하나씩 나 아가 봅시다. 이 문서에서는 데이터를 관리할 때 Json을 손쉽게 처리할 수 있는 Newtonsoft의 Json라이브러리를 사용할 예정이며, 이는 어셋스토어에서 ‘Json .Net for Unity’어셋으로 다운로드 할 수 있다. 데이터 저장하는 방법 -> https://firebase.google.com/docs/database/rest/save-data?authuser=0
  • 16. 저장하는 방법 데이터를 저장하는 방법은 ‘PUT’처리를 통해 쓰기를 할 수 있다고 나와있습니다. RESTAPI를 제공하는 곳을 보면 대부분 어떤 형태로 처리해야 되는지 나와있으며, 함께 보내야 되는 양식 등등이 적혀져 있습니다. RESTAPI를 제공하는 곳마다 적힌 순서가 약간씩은 다름
  • 17. 저장하는 방법 데이터를 저장하는 방법은 ‘PUT’처리를 통해 쓰기를 할 수 있다고 나와있습니다. RESTAPI를 제공하는 곳을 보면 대부분 어떤 형태로 처리해야 되는지 나와있으며, 함께 보내야 되는 양식 등등이 적혀져 있습니다. RESTAPI를 제공하는 곳마다 적힌 순서가 약간씩은 다름
  • 18. 저장하는 방법 코딩 에디터를 오픈하고, 상단에 저 두개를 추가합니다. 서버에 기록할 내용은 ‘이름-나이’ 데이터를 기록할 것이며, 이는 딕셔너리를 통해 데이터를 정의해줍니다. 웹 통신을 할 예정이므로 IEnumerator로 함수를 작성하도록 하겠습니다.
  • 19. 저장하는 방법 1. UserData를 Json으로 인코딩을 합니다. 2. UnityWebRequest.Put에 각각 데이터를 넣어주고 SendWebRequest를 작성하여 바로 동작할 수 있도록 해 줍니다. .json 문자열 추가!!
  • 20. 불러오는 방법 1. 값을 가져오는 방법은 Get처리 방식으로 처리할 수 있다 는 것을 확인 할 수 있습니다. 2. 특별한 값을 같이 보내라는 내용이 없으므로, Get으로 호출만 하면 됩니다. https://firebase.google.com/docs/database/rest/retrieve-data?authuser=0
  • 21. 불러오는 방법 1. Get으로 변경을 합니다. 2. 내용 전달이 이루어질때까지 yield return www.SendWebRequest부분에 스톱 트리거를 걸어둡니다. 3. 에러가 발생하면 error를 호출하고, 그것이 아니라면, downloadHandler.text를 통해 가져온 값을 확인할 수 있습니다.
  • 22. 불러오는 방법 1. 해당 코루틴을 호출하면 콘솔 창에서 우리가 기록한 내용 Json형태로 불러와지는 것을 확인할 수 있습니다.
  • 23. 삭제하는 방법 1. 값을 삭제하는 방법은 Delete처리 방식으로 처리할 수 있다는 것을 확인 할 수 있습니다. 2. 특별한 값을 같이 보내라는 내용이 없으므로, Delete로 호출만 하면 됩니다. https://firebase.google.com/docs/database/rest/save-data?authuser=0
  • 24. 삭제하는 방법 1. Delete로 변경한 후 SendWebRequest로 함수를 실행합니다. 2. 해당 코루틴을 실행하면 데이터 베이스가 타노스가 핑거 스냅 을 한 것 마냥 깨끗해집니다.
  • 25. 기타 기타 파트에선 이런 내용을 언급합니다. 1. 특정 값만 변경하는 방법 2. 구글 시간TimeStamp 받는 방법 3. 데이터 관리를 객체로 하는 방법
  • 26. 기타 - 특정 값만 변경하는 방법 저장에서 사용되었던 데이터 입니다. “Happy는 15살의 나이를 가지고 있다.” 라는 데이터가 기록된 것인데요. 15살의 나이는 실수로 입력된 나이이고, 실제로는 20살이라고 가정하에 Happy의 나이를 20살로 갱신 하도록 하겠습니다. 1. 특정 데이터만 값을 변경하는 방법은 Patch 처리 방식으로 할 수 있습니다. 2. 기존 Put방식은 A의 데이터만 변경하는 것이 아니라, A의 데이터가 수록되어있는 Parent가 갱신되는 것이었습니다. 그러다보니 A의 데이터가 수록되어있는 Parent의 안의 다른 데이터가 갑자기 없어져버 리는 데이터 누수가 발생할 수 있는 것이지요.
  • 27. 기타 - 특정 값만 변경하는 방법 1. 변경할 데이터 변수를 작성합니다. 2. Patch처리 방식은 아쉽게도 지원을 하지 않기 때문에, put으로 적고 method를 Patch로 변경합니다. 3. 이것을 SendWebRequest로 실행합니다.
  • 28. 기타 - 특정 값만 변경하는 방법 Happy의 데이터가 20으로 변경된 것을 확인할 수 있습니다.
  • 29. 기타 – 구글 시간 타임스탬프 받는 법 타임 스탬프 : 시간을 문자열로 표기한 것, 두개의 시간을 비교하거나 기간을 계산할 때 편리하게 사용하 기 위해 고안된 방식 유저가 게임을 1주일 동안 플레이를 했을 때 이벤트 상품을 준다고 가정을 해보자. 간단하게 알고리즘을 생각하면 1. 게임을 실행한 시간(A 변수)을 기록한다. 2. 이벤트를 시작하고 나서 1주일 후의 B의 시간 변수 - A 변수를 해서 0이거나 작으면 1주일이 지난 것으로 처리한다. 대충 이런 알고리즘을 생각할 수 있다. 근데 여기서 큰 문제가 하나 발생한다. 실행한 시간을 컴퓨터의 시간으로 처리하면 유저가 시간을 조작할 수 있 다는 점이다. 그래서 이런 시스템을 구축할 땐 웹 서버의 시간을 가져와서 처리를 한다.
  • 30. 기타 – 구글 시간 타임스탬프 받는 법 서버의 시간을 가져올 땐 Put처리로 하면 되고, 별도로 {“.sv” : “timestamp”}를 요구하는 것을 확인할 수 있다.
  • 31. 기타 – 구글 시간 타임스탬프 받는 법 보낼 데이터를 작성하고 이를 호출하면, 타임스탬프를 받을 수 있다. 이때 애매한 점은 Put처리로 호출하면 데이터가 사라지는 문제점이 발생한다. 그러므로TimeStamp 하위에 데이터가 기록될 수 있도록 내 용을 추가로 작성을 해준다.
  • 32. 기타 – 구글 시간 타임스탬프 받는 법 이렇게 출력된 타임 스탬프는 System라이브러리의 DateTime을 통해 시간 계산을 처리 할 수 있고, 또는 다시 Long 자료형의 타임 스템프로 변경시킬 수 있다.
  • 33. 기타 – 데이터 관리를 객체로 하는 방법 우리가 게임속에서 유저의 데이터를 관리하는 방법은 객체로 흔히 표현한다. 랭킹이라는 시스템을 만든다고 한다면, 랭킹 Class{ 이름. 점수, 현재 레벨 } 이렇게 랭킹 클래스를 대략 만들 수 있을 것이다. 생성된 랭킹 클래스 데이터를 서버에 올리려면 어떻게 해야 할까? 다음 페이지에서 계속..
  • 34. 기타 – 데이터 관리를 객체로 하는 방법 읽는 것은 public으로 하고, 쓰기는 private로 처리한 다음, 생성자를 작성하여 쉽게 데이터를 대입할 수 있도록 한다.
  • 35. 기타 – 데이터 관리를 객체로 하는 방법 각각 유저의 데이터를 다르게 해서 두번 저장을 할 것이며, 이때 웹 주소 영역에 유저의 이름을 별도로 추가하였다. 중 요 C#6부터 추가된 String Interporation 기능
  • 36. 기타 – 데이터 관리를 객체로 하는 방법 그럼 데이터가 객체화 해서 저장되는 모습을 확인할 수 있 다. 다음 페이지에서 계속..
  • 37. 기타 – 데이터 관리를 객체로 하는 방법 서버에 기록된 유저들의 이름을 전부 출력하려면? 다음과 같이 작성하면 된다.. 사실 Json으로 뽑은 후 데이터 처리는 플머의 역량에 따라 달라질 것이다. 필자는 현재 저런 방식으로 출력을 하고 있는데, 무언가.. 코드가 길다.
  • 38. 이 문서를 읽어주셔서 감사합니다. 문제가 생기거나 질문이 있다면 카톡 art000215로 연락주시기 바랍니다