유니티 HTTP 서버통신 및 API 사용법
Intro
이번 포스팅에서는 오픈 API를 활용하여 해당 서버에 정보를 요청하고 응답받는 HTTP 통신을 간단하게 구현해보았습니다.
API는 프로그램끼리 서로 기능을 주고받을 수 있도록 만든 약속된 통신규칙입니다.
유니티에서는 주로 외부 서버, DB 등과 연결하여 데이터를 요청하는데 사용됩니다.
HTTP통신은 웹 서버와 데이터를 주고받는 통신방식입니다.
HTTP 통신은 모바일 환경에서 추가 패치데이터를 설치하거나, 실시간 통신이 크게 필요하지않은 경우에 사용합니다.
HTTP 통신
유니티에서 HTTP 통신을 하는 방법은 2가지가 있습니다.
- WWW 방식
- WWW 방식은 유니티에서 제공하는 간단한 방법으로, “웹 서버와 통신할 수 있게 해주는 클래스” 입니다.
- 웹 페이지의 데이터를 다운로드하거나 이미지 등을 불러올 때 사용됩니다.
- 현재 WWW 방식은 권장되지 않는 방식입니다.
- UnityWebRequest 방식
- UnityWebRequest 방식은 유니티에서 HTTP 통신을 할 수 있게 해주는 클래스로, GET POST 등 다양한 HTTP 요청 방식을 지원합니다.
유니티에서는 UnityWebRequest 사용을 권장하고있습니다.
HTTP 요청 방식
- GET은 서버로부터 정보를 조회하기 위해 사용되는 메서드로, 데이터를 요청할 때 필요한 매개변수를 URL의 일부로 포함시켜 서버에 전송합니다.
- 전송할 수 있는 데이터의 크기가 제한적이고, 보안상 민감한 데이터를 전송하기에는 부적합합니다.
- POST은 서버의 상태나 데이터를 생성하거나 업데이트하기 위해 사용되는 메서드입니다.
- 데이터는 요청 본문에 포함되어 서버로 전송되며, URL에는 데이터가 노출되지 않습니다.
- 더 많은 양의 데이터를 안전하게 전송할 수 있으며, 파일 업로드와 같은 작업에 사용됩니다.
UnityWebRequest 작업의 흐름은 다음과 같습니다.
-
클라이언트 설정(Create/Configure) : UnityWebRequest 인스턴스를 생성하고, GET POST 등의 메서드를 설정합니다.
- 전송(Send/Abort) : 구성된 요청을 서버로 전송합니다.
- 전송 과정은 비동기적으로 진행되므로, 게임의 메인 루프에 영향을 주지 않습니다.
- 처리(Receive/Buffer/Process) : 서버로부터의 응답을 받습니다.
- DownloadHandler를 사용하여 서버의 응답을 적절한 형태로 처리합니다.
- 완료 : 모든 통신 과정이 완료되고나면, UnityWebRequest 객체는 사용한 자원을 해제하고, 결과를 반환합니다.
GET 메서드 활용
예시를 위해 “던전앤파이터 API”를 활용해 HTTP 통신을 하는것을 구현해보았습니다.
던전앤파이터 API 홈페이지에서 로그인을 한 뒤, 애플리케이션을 등록하였습니다.
아래는 이용가능한 API 목록으로, 클릭해보면 사용 방법도 함께 보여집니다.
먼저, 서버정보를 가져오는 작업을 구현해보았습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class NetworkTest : MonoBehaviour
{
void Start()
{
StartCoroutine(UnityWebRequestGet());
}
IEnumerator UnityWebRequestGet()
{
string url = "https://api.neople.co.kr/df/servers?apikey=QOwMm2auUzGObdafm4R7ssvxcBWGVaxk";
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
if (www.error == null)
{
Debug.Log(www.downloadHandler.text);
}
else
{
Debug.Log("Error");
}
}
}
- HTTP 통신을할때 코루틴을 사용해야합니다.
- 웹 서버로부터 정보를 주고받는데 소요되는 시간이 필요하기 때문입니다.
-
url 부분에 서버정보탭의 RequestURL를 복사하여 넣어줍니다.
-
UnityWebRequest 의 Get 메서드를 통해 url에 요청을 보냅니다.
- SendWebRequest 메서드로 응답이 돌아올때까지 기다린 뒤, 결과에따라 로그를 출력합니다.
게임을 실행해서 결과를 보면 아래와같이 서버정보를 받아온것을 볼 수 있습니다.
다음은 요청변수가 있는 API 사용입니다.
직업별 스킬 리스트는 “jobId”, “jobGrowId” 요청변수가 존재합니다.
또한 필수여부 Y 라는것은 반드시 이 변수가 있어야한다는 뜻입니다.
아래는 남귀검사 클래스의 웨펀마스터 스킬정보를 받아오는 코드입니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class NetworkTest : MonoBehaviour
{
void Start()
{
StartCoroutine(UnityWebRequestGet());
}
// 코루틴으로 작성
IEnumerator UnityWebRequestGet()
{
string jobId = "41f1cdc2ff58bb5fdc287be0db2a8df3";
string jobGrowId = "df3870efe8e8754011cd12fa03cd275f";
string url = $"https://api.neople.co.kr/df/skills/{jobId}?jobGrowId={jobGrowId}&apikey=QOwMm2auUzGObdafm4R7ssvxcBWGVaxk";
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
if (www.error == null)
{
Debug.Log(www.downloadHandler.text);
}
else
{
Debug.Log("Error");
}
}
}
-
jobId 와 jobGrowId 에 각각 남귀검사/웨펀마스터 코드를 할당하였습니다.
-
url 부분의 jobId, jobGrowId 부분을 할당한 변수로 치환하기위해 변경하였습니다.
게임을 실행해서 결과를 보면 아래와같이 스킬정보를 받아온것을 확인할 수 있습니다.
이렇게해서 HTTP 통신의 GET 메서드를 활용하여 API 정보를 받아오는것을 구현해보았습니다.
댓글남기기