# 웹 서버와 상호 작용

> Use the UnityWebRequest system to allow your application to interact with a web server via HTTP.

UnityWebRequest는 HTTP 요청을 구성하고 HTTP 응답을 처리하기 위한 모듈식 시스템을 제공합니다. UnityWebRequest 시스템의 주요 목표는 Unity 게임이 웹 브라우저 백엔드와 상호 작용하도록 하는 것입니다. 또한 청크된 HTTP 요청, 스트리밍 POST/PUT 연산, HTTP 헤더 및 동사에 대한 완전한 제어와 같이 수요가 높은 기능도 지원합니다.

시스템은 다음과 같이 두 레이어로 구성됩니다.

* HLAPI([고수준 API](/engine/6000.0/manual/scripting/object-oriented-development/web-request/hlapi.md))는 저수준 API를 래핑하고 일반 작업을 수행하기 위한 편리한 인터페이스를 제공합니다.
* LLAPI([저수준 API](/engine/6000.0/manual/scripting/object-oriented-development/web-request/llapi.md))는 더 많은 고급 사용자를 위해 최대한의 유연성을 제공합니다.

## 지원되는 플랫폼##additional-resources

UnityWebRequest 시스템은 대부분의 Unity 플랫폼을 다음과 같이 지원합니다.

* 모든 버전의 에디터 및 스탠드얼론 플레이어
* 웹
* 모바일 플랫폼: iOS, Android
* 유니버설 Windows 플랫폼

## 아키텍처

UnityWebRequest 생태계에서 HTTP 트랜잭션을 다음과 같이 세 단계의 작업으로 분리합니다.

* 서버에 데이터 제공
* 서버에서 데이터 수신
* HTTP 플로우 컨트롤(예: 리디렉트 및 오류 처리)

이러한 작업은 고급 사용자에게 더 나은 인터페이스를 제공하기 위해 다음과 같이 각각의 자체 오브젝트를 통해 관리됩니다.

* `UploadHandler` 오브젝트는 서버로의 데이터 송신을 담당합니다.
* `DownloadHandler` 오브젝트는 서버에서의 데이터 수신, 버퍼링 및 포스트 프로세스를 담당합니다.
* `UnityWebRequest` 오브젝트는 다른 두 개의 오브젝트를 관리하고 HTTP 플로 제어도 처리합니다. 이 오브젝트는 커스텀 헤더와 URL이 정의되고 오류 및 리디렉트 정보가 저장되는 곳입니다.


**Frame:**
![](/api/media?file=/engine/6000.0/media/images/UnityWebRequestArchitecture.png)

모든 HTTP 트랜잭션의 일반 코드 플로우는 다음과 같습니다.

* 웹 요청 오브젝트 생성

* 웹 요청 오브젝트 설정

  * 커스텀 헤더 설정
  * HTTP 동사 설정(GET, POST, HEAD 등. 커스텀 동사는 Android용을 제외한 모든 플랫폼에서 사용할 수 있습니다.)
  * URL 설정

* (선택) 업로드 핸들러를 생성하여 웹 요청에 연결

  * 업로드할 데이터 제공
  * 업로드할 HTTP 양식 제공

* (선택) 다운로드 핸들러를 생성하여 웹 요청에 연결

* 웹 요청 보내기
  * 코루틴 내에 있을 경우 `Send()` 호출 결과를 얻어서 요청이 완료될 때까지 대기 가능

* (선택) 다운로드 핸들러에서 수신한 데이터 읽기

* (선택) UnityWebRequest 오브젝트에서의 오류 정보, HTTP 상태 코드 및 리스폰스 헤더 읽기
