Version: 2018.4
언어: 한국어
WebGL 프로젝트 빌드 및 실행
WebGL 빌드 디버깅 및 문제 해결

WebGL: 압축된 빌드 배포

릴리스 모드에서 WebGL 프로젝트를 빌드하는 경우(빌드 퍼블리시 참조), Unity는 빌드의 다운로드 크기를 줄이기 위해서 빌드 결과 파일을 압축합니다. 여기서 사용되는 압축 타입은 퍼블리싱 설정의 압축 포맷 옵션에서 선택할 수 있습니다(메뉴: Edit > Project Settings 에서 Player 카테고리를 선택한 후 Publishing Settings 패널로 이동).

  • gzip: 기본 옵션입니다. gzip 파일은 Brotli 파일보다 크지만, 빌드 속도가 더 빠르고 모든 브라우저에서 http와 https를 통해 모두 기본적으로 지원됩니다.

  • Brotli: Brotli 압축은 압축 비율이 가장 높습니다. Brotli 압축 파일은 gzip보다 훨씬 더 작지만 압축하는 데 시간이 오래 걸려 빌드 릴리스 반복 시간이 늘어납니다. Brotli 압축은 Chrome과 Firefox에서 https를 통해 기본적으로 지원됩니다. 자세한 내용은 WebGL 브라우저 호환성을 참조하십시오.

  • Disabled: 압축이 비활성화됩니다. 포스트프로세싱 스크립트에서 원하는 압축을 직접 구현하려는 경우에 사용합니다.

압축하여 빌드한 Unity 빌드는 아무 브라우저에서나 작동합니다. Unity에는 JavaScript로 작성된 압축 풀기 소프트웨어가 들어 있습니다. 이 소프트웨어는 서버에서 http 전송 레벨의 압축이 활성화되지 않은 경우에 사용됩니다.

고급: 기본 브라우저 압축 해제

브라우저는 기본적으로 빌드 데이터를 다운로드하는 동안 Unity 빌드의 압축을 풀 수 있습니다. 이는 JavaScript에서 파일의 압축을 푸는 데 발생하는 추가 지연을 방지하여 시작 시간을 단축하는 장점이 있습니다. 브라우저가 기본적으로 압축 풀기를 처리할 수 있게 하려면 적절한 http 헤더를 사용하여 압축 파일을 처리하도록 웹 서버를 설정해야 합니다. 이렇게 하면 브라우저는 데이터가 gzip 또는 Brotli 형식으로 압축되어 있음을 알고 데이터 전송 중에 압축을 풉니다. Brotli 압축은 Firefox와 Chrome에서 https에서만 지원되고 gzip 압축은 모든 브라우저에서 지원됩니다. 자세한 내용은 WebGL 브라우저 호환성을 참조하십시오.

웹 서버 설정

기본 브라우저 압축 풀기를 설정하는 프로젝트는 웹 서버에 따라 다릅니다. 이 페이지에 수록된 지침은 가장 일반적인 두 가지 웹 서버인 ApacheIIS 에 해당됩니다. 이 두 웹 서버는 기본 설정에서 작동하도록 고안되었지만, 특정 설정과 일치하도록 조정해야 할 수 있습니다. 특히 서버 측에 다른 호스트 파일 압축 설정이 있는 경우 이 설정과 간섭이 발생하여 문제가 생길 수 있습니다. 기본 개념은 빌드 시간에 사용된 압축 타입에 해당하는 콘텐츠 인코딩 헤더를 서버 응답에 추가하는 것입니다. 이를 통해 브라우저는 다운로드 중에 압축 풀기를 기본적으로, 그리고 비동기식으로 수행할 수 있습니다.

Apache

Apache 서버는 보이지 않는 .htaccess 파일을 서버 설정에 사용합니다. 아래 코드는 기본 브라우저 압축 풀기를 적용하는 데 사용할 수 있는 .htaccess 파일의 예제입니다. Apache 서버 구성 설정은 선택 사항입니다.

gzip 압축 빌드의 경우 다음 .htaccess 파일을 Build 하위 폴더에 저장합니다.

<IfModule mod_mime.c>
  AddEncoding gzip .unityweb
</IfModule>

brotli 압축 빌드의 경우 다음 .htaccess 파일을 Build 하위 폴더에 저장합니다.

<IfModule mod_mime.c>
  AddEncoding br .unityweb
</IfModule>

IIS

필수 IIS 서버 설정 단계:

기본적으로 IIS 서버는 알 수 없는 MIME 타입의 정적 콘텐츠를 제공하지 않습니다. Unity 빌드가 IIS에서 작동하도록 하기 위해서는 먼저 .unityweb 확장자를 application/octet-stream 콘텐츠 타입과 연결해야 합니다. 다음 두 가지 방법으로 이렇게 할 수 있습니다.

IIS Manager 인터페이스 사용: IIS Manager 패널에서 웹사이트를 선택하고 MIME Types 기능을 열고 Add… 액션을 선택합니다. .unityweb을 파일 이름 확장자로 설정하고 application/octet-stream을 MIME 타입으로 설정한 후 OK를 클릭합니다.

서버 설정 파일 사용: IIS는 web.config 파일을 서버 설정에 사용합니다. 이 설정 파일은 IIS Manager에서 특정 폴더에 적용된 모든 변경 사항을 나타냅니다. application/octet-stream MIME 타입을 .unityweb 확장자와 연결하려면 다음 web.config 파일을 사용합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
            <staticContent>
            <remove fileExtension=".unityweb" />
<mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
            </staticContent>
    </system.webServer>
</configuration>

설정 파일은 모든 서버 하위 폴더에 영향을 미치므로 .unityweb 확장자의 MIME 타입을 서버 루트 폴더에서 한 번만 설정하면 됩니다.

선택적인 IIS 서버 설정 단계:

빌드 시작 시간을 단축하기 위해, 원한다면 다음 설정 파일을 사용할 수 있습니다. 이 설정을 사용하기 위해서는 Microsoft의 IIS URL Rewrite IIS 모듈을 설치해야 합니다. 그렇지 않으면 브라우저에서 500 내부 서버 오류가 발생합니다.

gzip 압축 빌드의 경우 다음 web.config 파일을 Build 하위 폴더에 저장합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
            <staticContent>
                    <remove fileExtension=".unityweb" />
                    <mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
            </staticContent>
            <rewrite>
                    <outboundRules>
                        <rule name="Append gzip Content-Encoding header">
                            <match serverVariable="RESPONSE_Content-Encoding" pattern=".*" />
                            <conditions>
                                    <add input="{REQUEST_FILENAME}" pattern="\\.unityweb$" />
                            </conditions>
                            <action type="Rewrite" value="gzip" />
                        </rule>
                    </outboundRules>
            </rewrite>
    </system.webServer>
</configuration>

brotli 압축 빌드의 경우 다음 web.config 파일을 Build 하위 폴더에 저장합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
            <staticContent>
                    <remove fileExtension=".unityweb" />
                    <mimeMap fileExtension=".unityweb" mimeType="application/octet-stream" />
            </staticContent>
            <rewrite>
                    <outboundRules>
                        <rule name="Append br Content-Encoding header">
                            <match serverVariable="RESPONSE_Content-Encoding" pattern=".*" />
                            <conditions>
                                    <add input="{REQUEST_FILENAME}" pattern="\\.unityweb$" />
                            </conditions>
                            <action type="Rewrite" value="br" />
                        </rule>
                    </outboundRules>
            </rewrite>
    </system.webServer>
</configuration>

<remove fileExtension=".unityweb" /> 행은 콘텐츠 타입이 서버 디렉토리 계층 구조의 더 높은 수준에서 이미 오버라이드된 상황을 처리하는 데 필요합니다. 이 행이 없으면 서버 예외가 발생하는 원인이 될 수 있습니다.


  • 2017–05–24 편집 리뷰 없이 페이지 수정됨

  • Unity 5.6에서 업데이트됨

WebGL 프로젝트 빌드 및 실행
WebGL 빌드 디버깅 및 문제 해결