UnityWebRequest

Hyeon O·2025년 7월 8일

Unity

목록 보기
8/15

개요

UnityWebRequest 는 유니티에서 HTTP 통신을 수행하기 위한 클래스로, 웹 서버와 데이터를 주고 받을 때 사용한다.

이에 대한 개념을 한번 짚고 넘어가보자.

개념

UnityEngine.Networking 네임스페이스 안에 있는 클래스로,

HTTP 통신(GET, POST, PUT, DELETE 등)을 수행하여

웹 서버와 데이터를 주고 받을 수 있게 한다.

보통 유니티에서 엑셀 데이터를 가져올 떄나, 서버에서 텍스트, 이미지 등을 받아올 때 쓰이거나

서버에 데이터를 POST 할 때도 유용하게 쓰인다.

HTTP란?

HyperText Transfer Protocol의 줄임말로, 클라이언트와 서버간 데이터를 주고 받기 위한 통신 방식이다.

아래는 주요 HTTP 메서드와 서버 응답코드를 정리하였다.

메서드설명용도
GET서버로부터 데이터 가져오기파일 다운로드, 정보 조회
POST서버에 새로운 데이터 전송회원가입, 로그인, 업로드 등
PUT기존 데이터를 수정데이터 전체 갱신
DELETE데이터를 삭제특정 데이터 제거
PATCH일부 데이터 부분 수정한 필드만 수정 등
상태코드의미설명
200 OK성공요청 정상 처리
201 Created생성됨POST로 리소스 생성 성공
400 Bad Request잘못된 요청요청 형식 오류
401 Unauthorized인증 실패토큰 누락 등
403 Forbidden권한 없음접근 금지
404 Not Found못 찾음URL 오류
500 Internal Server Error서버 오류예외 발생 등

주요 메서드 및 용도

항목설명용도
Get서버에서 데이터 받기랭킹, 설정파일 다운로드 등
Post서버에 데이터 보내기로그인, 폼 제출 등
Put서버 데이터 전체 수정프로필 수정 등
Delete데이터 삭제 요청친구 삭제 등
SendWebRequest()요청 전송Coroutine에서 비동기로 실행
DownloadHandlerBuffer텍스트/JSON 받기CSV, 로그 등
DownloadHandlerTexture이미지 받기캐릭터 사진 등
UploadHandlerRawJSON 등 바이트 업로드API 호출, 저장 요청

중요한 메서드 몇 개만 정리해보자.

UnityWebRequest.Get(string url)

GET 요청을 보내 서버(url)로부터 데이터를 가져오는 메소드로,

url 뒤에 쿼리 스트링을 붙이면 다양한 요청이 가능하다.

주로 JSON, CSV, 이미지 등 파일을 다운로드할 때나, API에서 데이터 조회를 할 때 쓰인다.

IEnumerator GetExample()
{
    string url = "https://myserver.com/data.json";
    UnityWebRequest request = UnityWebRequest.Get(url);

    yield return request.SendWebRequest();

    if (request.result == UnityWebRequest.Result.Success)
    {
        Debug.Log("받은 데이터: " + request.downloadHandler.text);
    }
    else
    {
        Debug.LogError("에러: " + request.error);
    }
}

UnityWebRequest.Post(string url, WWWForm form)

POST요청을 보내서, 서버에 데이터를 전송할 때 사용한다.

벡엔드 개발에서 보통 로그인 요청이나 회원가입을 구현할 때 많이 쓰이며,

랭킹 기록을 위한 점수를 제출할 때도 쓰일 수 있다.

IEnumerator PostExample()
{
    string url = "https://myserver.com/login";
    WWWForm form = new WWWForm();
    form.AddField("id", "test");
    form.AddField("pw", "1234");

    UnityWebRequest request = UnityWebRequest.Post(url, form);

    yield return request.SendWebRequest();

    if (request.result == UnityWebRequest.Result.Success)
        Debug.Log("서버 응답: " + request.downloadHandler.text);
    else
        Debug.LogError("전송 실패: " + request.error);
}

WWWForm은 일반적인 key-value 방식의 폼 데이터 전송용이다.

SendWebRequest()

UnityWebRequest 는 요청을 서버로 전송하는 역할로

비동기 방식으로 작동한다.

일반적으로는 코루틴의 yield return과 함께 사용하는 것이 권장된다.

이 부분은 상황에 따라 조금 다른데,

에디터 전용 툴인 경우(Unity 에디터에서만 사용),

코루틴 없이 while (!req.isDone) { } 으로 사용해도 무방하다.

근데 빌드된 게임 내에서 실행 중에는

이 경우 코루틴을 사용하지 않으면 런타임에 매우 위험할 수 있기에

코루틴을 통해 유니티 메인 루프에 영향을 주지 않는 것이 바람직하다.

DownloadHandlerBuffer()

텍스트 기반 데이터를 받기 위한 핸들러로,

위 코드로 데이터를 받으면 request.downloadHandler.text 로 읽을 수 있다.

UnityWebRequest request = new UnityWebRequest(url, "GET");
request.downloadHandler = new DownloadHandlerBuffer();

DownloadHandlerTexture

이미지를 다운로드 할 때 사용하는 핸들러다.

UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
yield return request.SendWebRequest();
Texture2D tex = DownloadHandlerTexture.GetContent(request);

DownloadHandlerTexture.GetContent(request)는 결과를 바로 Texture2D로 반환한다.

profile
천천히, 꾸준하게, 끝까지

0개의 댓글