UnityWebRequest
- 유니티에서 서버와 통신(HTTP 요청/응답)을 수행하는 도구
- 서버와 데이터를 주고받을 때, REST API와 통신할 때, JSON 데이터를 송수신할 때 이용
특징
- 비동기 처리 : 코루틴을 사용하여 요청을 비동기적으로 수행 가능
- GET,POST,PUT,DELETE 지원 : HTTP 메서드를 사용해 서버와 통신 가능
- 파일 다운로드 및 업로드 가능 : 이미지, 텍스트 오디오 파일 등 다운로드 가능
- JSON 데이터 송수신 가능 : REST API와 연동하여 JSON 데이터를 주고받을 수 있음
- 보안 지원 : HTTPS 지원, 인증 헤더 추가 가능
* REST API : 간단히 말하면, '인터넷으로 정보를 주고받는 규칙'
Resource, URL, 행동(HTTP 메서드), Representation(형식, 보통 JSON) 등의 규칙 등이 있다.
https://docs.unity3d.com/kr/2022.3/Manual/UnityWebRequest.html
UnityWebRequest - Unity 매뉴얼
UnityWebRequest는 HTTP 요청을 구성하고 HTTP 리스폰스를 처리하기 위한 모듈식 시스템을 제공합니다. UnityWebRequest 시스템의 주요 목표는 Unity 게임이 최신 웹 브라우저 백 엔드와 상호작용할 수 있도
docs.unity3d.com
전체적인 구조는 위의 이미지와 같다.
스크립트 상에서 새로운 UnityWebRequest 객체를 만들고, 그 객체 안에 UploadHandler와 DownloadHandler를 선언한 뒤
UploadHandler에 원하는 정보, 데이터 등을 넣어서 UnityWebRequest를 서버에 보내면, 그에 맞는 응답을 Downloadhander가 받게 되고 다시 스크립트로 들어가 유저가 그 데이터를(응답) 읽을 수 있게 된다.
예시와 함께 보자면,
using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
public class WebRequestExample : MonoBehaviour
{
IEnumerator SendRequest()
{
using (UnityWebRequest request = UnityWebRequest.Get("https://jsonplaceholder.typicode.com/posts/1"))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log("응답 데이터: " + request.downloadHandler.text);
}
else
{
Debug.LogError("요청 실패: " + request.error);
}
}
}
void Start()
{
StartCoroutine(SendRequest());
}
}
using문으로 감싸, 함수가 종료된 후 자동으로 Dispose 될 수 있도록 선언한다.
(GC에게 맡기는 방법도 있지만 , 언제 해제될 지 모르기 때문에 낭비를 막기 위해 명시해 주는 것이 좋다)
요청을 보낸 후 , yield return으로 request.SendWebRequest()가 완료될 때까지 기다린다.
즉 웹 요청이 완료될 때까지 코루틴의 실행을 일시 중단하고, 완료되면 이어서 실행한다는 것이다.
그 후 결과가 성공적으로 돌아왔다면 응답 데이터를 , 아니라면 에러를 띄운다.
주요 설정 옵션
- SetRequestHeader("Key", "Value") : 요청 헤더(Header)를 추가할 때 사용
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Authorization", "Bearer YOUR_ACCESS_TOKEN");
- timeout : 요청이 특정 시간 내에 응답하지 않으면 자동으로 중단(초 단위)
request.timeout = 10; // 10초 내에 응답이 없으면 요청 중단
- CertificateHandler : HTTPS 인증서 검증을 처리하는 핸들러
응답 관련 메서드
- GetResponseHeader("Header-Name") : 특정 응답 헤더 값을 가져옴
IEnumerator GetResponseHeaderExample(string url)
{
using (UnityWebRequest request = UnityWebRequest.Get(url))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string contentType = request.GetResponseHeader("Content-Type");
Debug.Log("서버 응답 Content-Type: " + contentType);
}
}
}
- GetResPonseHeaders() : 모든 응답 헤더를 딕셔너리(Dictionary) 형태로 가져옴
- downloadHandler.text : 응답 데이터를 문자열로 가져옴
IEnumerator GetJsonResponse(string url)
{
using (UnityWebRequest request = UnityWebRequest.Get(url))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
string jsonResponse = request.downloadHandler.text;
Debug.Log("JSON 응답: " + jsonResponse);
}
}
}
- downloadHandler.data : 응답 데이터를 byte[]배열로 가져옴
- result : 요청의 성공 여부를 반환
- eror : 요청이 실패하면 오류 메세지를 반환
if (request.result == UnityWebRequest.Result.Success)
{
Debug.Log("요청 성공!");
}
else
{
Debug.LogError("요청 실패: " + request.error);
}
'개념공부' 카테고리의 다른 글
JSON 기초 정리 (with Unity) (0) | 2025.03.11 |
---|---|
Session, Cookie + 자동 로그인 기능 (0) | 2025.03.06 |
Task, Async/Await (0) | 2025.02.22 |
생성자(Constructor) (0) | 2025.02.18 |
Thread (0) | 2025.02.16 |