# 기술적 제한

> Details the technical limitations of the Web platform.

웹 기술은 웹 브라우저에서 실행되도록 설계된 Unity 웹 애플리케이션에 제한을 적용합니다. 웹 플랫폼용 애플리케이션을 빌드하기 전에 다음 기술적 제한 사항을 숙지해야 합니다.

## 플랫폼 지원##platform-support

많이 사용되는 데스크톱 브라우저 버전의 대부분은 Unity 웹 콘텐츠를 지원하지만 [다른 수준의 지원](/engine/6000.0/manual/platform-specific/webgl/intro/browsercompatibility.md)을 제공하는 브라우저도 있습니다.

웹 빌드의 다음 기능은 플랫폼 자체의 한계로 인해 사용할 수 없거나 제한됩니다.

### Visual Studio의 웹 빌드 디버그 미지원##lack-of-web-build-debug-support-in-visual-studio

Visual Studio에서는 웹 빌드 디버깅이 지원되지 않습니다. 자세한 내용은 [웹 빌드 디버깅 및 문제 해결](/engine/6000.0/manual/platform-specific/webgl/develop/debugging.md)을 참조하십시오.

### Unity 캐시 및 캐싱 스크립트 미지원##lack-of-unity-cache-and-caching-script-support

브라우저에서 파일 시스템에 대한 액세스가 제한되므로 웹 빌드는 Unity 캐시 및 캐시 스크립팅 API를 지원하지 않습니다. 대신 에셋 데이터 및 에셋 번들에 대한 네트워크 요청은 브라우저 캐시에 캐싱됩니다. [웹의 캐시 동작](/engine/6000.0/manual/platform-specific/webgl/develop/caching.md)을 참조하십시오.

### 스레딩 미지원##lack-of-input-system-keyboard-layout-mapping

JavaScript의 스레딩 미지원으로 인해 스레드가 지원되지 않습니다. 이는 성능을 높이기 위한 Unity의 내부 스레드 사용과 스크립트 코드 및 관리되는 DLL의 스레드 사용에 모두 적용됩니다. 기본적으로 `System.Threading` 네임스페이스의 모든 항목이 지원되지 않습니다.

### 네트워킹 제한 사항##lack-of-managed-threading-support

웹 플랫폼이 지원하지 않는 네트워킹 기능이 몇 가지 있습니다.

* 보안 문제로 인해 브라우저에서는 네트워킹을 위한 IP 소켓의 직접 액세스를 허용하지 않습니다. 자세한 내용은 [웹 네트워킹](/engine/6000.0/manual/platform-specific/webgl/develop/networking.md)을 참조하십시오.

* `System.Net` 네임스페이스의 .NET 네트워킹 클래스가 지원되지 않습니다.

* 웹 플랫폼은 브라우저 내부의 보안 제한으로 인해 네이티브 소켓 액세스를 지원하지 않습니다. 따라서 웹은 ICMP 핑 또는 [UnityEngine.Ping](/engine/6000.0/script-reference/unity-engine/ping.md) 같은 기능도 지원하지 않습니다.

### 그래픽스 제한 사항##networking-limitations

OpenGL ES 그래픽스 라이브러리의 기능을 기반으로 하는 WebGL 그래픽스 API를 사용하는 웹 플랫폼에는 몇 가지 제한 사항이 있습니다. 자세한 내용은 [웹 그래픽스](/engine/6000.0/manual/platform-specific/webgl/develop/graphics.md)를 참조하십시오.

### 오디오 제한 사항##graphics-limitations

웹 빌드에서는 **Web Audio** API를 기반으로 한 오디오용 커스텀 백엔드를 사용하지만 기본 오디오 기능만 지원됩니다. 자세한 내용은 [웹 오디오](/engine/6000.0/manual/platform-specific/webgl/develop/audio.md)를 참조하십시오.

### 동적 코드 생성##audio-limitations

웹은 AOT 플랫폼이므로 `System.Reflection.Emit`를 사용하여 동적 코드를 생성할 수 없습니다. 이는 다른 모든 IL2CPP 플랫폼, iOS, 대부분의 콘솔에서 동일합니다.

## 멀티스레딩 지원##multithreading-supportscrollpoint-id=multithreading-support-/

Unity는 네이티브 C/C++ 코드에 대한 멀티스레딩 지원을 제공하지만 WebAssembly의 한계로 인해 웹 플랫폼은 아직 C# 멀티스레딩을 지원하지 않습니다. 따라서 웹 플랫폼을 사용하여 빌드된 애플리케이션은 단일 C# 스레드에서 실행되어야 합니다.

**참고**:

* 웹 플랫폼은 웹 플레이어 설정에서 [네이티브 C/C++ 지원](/engine/6000.0/manual/platform-specific/webgl/develop/class-player-settings-web-gl.md#multithreading)을 활성화한 경우에만 C/C++ 멀티스레딩을 지원합니다.

* 웹 플랫폼은 문서가 안전한 컨텍스트 내에 있는 경우 멀티스레딩을 지원합니다.

  서버에서 다음 HTTP 리스폰스 헤더를 설정해야 합니다.

  * [Cross-Origin-Opener-Policy: same-origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy)
  * [Cross-Origin-Embedder-Policy: require-corp](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy)
  * [Cross-Origin-Resource-Policy: cross-origin](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Resource-Policy)

웹 플랫폼에서 복잡한 비동기 작업을 수행하는 데 권장되는 방법은 코루틴을 사용하는 것입니다. 자세한 내용은 [코루틴](/engine/6000.0/manual/scripting/object-oriented-development/coroutines.md) 기술 자료를 참조하십시오.

다음 요인으로 인해 멀티스레드 지원이 제한됩니다.

### 네이티브 스택 스캐닝의 제약 사항##physics-limitations

웹 플랫폼은 웹 브라우저에서 안전하고 효율적으로 Unity 코드를 실행하는 바이트코드 포맷인 WebAssembly를 사용합니다. 웹 브라우저는 네이티브 WebAssembly 스택에 대한 직접 액세스를 차단하는 안전하고 격리된 환경에서 코드를 실행하도록 설계되었습니다. 이는 멀티스레드 가비지 컬렉션에 영향을 미칩니다. 웹 가비지 컬렉터가 다른 플랫폼에서 여러 프레임에 걸쳐 점진적으로 실행되는 것과 달리 모든 프레임이 끝날 때마다 한 번만 실행되기 때문입니다.

### 사전 스레드 신호 미지원##dynamic-generation-of-code

웹의 백그라운드 워커는 서로 독립적으로 병렬로 코드를 실행합니다. 네이티브 플랫폼에서 메인 스레드는 다른 스레드에 신호를 동기식으로 전송하여 가비지 컬렉션을 위해 일시 중지시킬 수 있습니다. 이 동기식 신호는 웹에서 지원되지 않으므로 WebAssembly에서 컴파일된 C# 코드가 여러 스레드에서 실행되지 않습니다.

## 빌드 및 실행 제한 사항##build-and-run-limitations

Unity는 기본 기능만 있는 웹 서버를 사용하여 **Build and Run**(메뉴: **Edit** > **Build Profiles** > **Build and Run**)으로 생성된 웹 빌드를 호스팅합니다.

서버는 데이터 캐싱을 지원하지 않으므로 다음 파일에 영향을 미칩니다.

* [에셋 번들](/engine/6000.0/manual/working-in-unity/assets-and-media/asset-workflow/asset-bundles-intro.md) 또는 [어드레서블](https://docs.unity3d.com/Packages/com.unity.addressables@latest?subfolder=/manual/index.html)을 사용하지 않는 빌드의 모든 씬과 에셋을 포함하는 `.data` 파일
* 어드레서블 및 에셋 번들 파일

## 추가 리소스##additional-resources

* [보안 컨텍스트](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts)
* [가비지 컬렉션](https://docs.unity3d.com/2023.3/Documentation/Manual/webgl-memory.html#garbagecollection)
