개념공부

UnityWebRequest

Cadi 2025. 3. 5. 22:39

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