본문 바로가기

.NET/C#

C# 으로 Gzip 압축 구현 방법 | ChatGPT

728x90
반응형

C# 으로 Gzip 압축 구현 방법

IIS 웹 서버에서 Gzip 압축을 사용하면 웹 애플리케이션의 성능을 크게 향상시킬 수 있습니다.

C#으로 ASP.NET 애플리케이션을 개발할 때 Gzip 압축을 구현하는 방법은 IIS 설정을 통해 간단히 할 수 있으며, 별도로 C# 코드에서 추가 작업을 할 수도 있습니다.

여기에서는 두 가지 방법을 설명하겠습니다.


1. IIS에서 Gzip 설정하기

IIS 자체에서 Gzip 압축을 활성화하는 것이 가장 일반적인 방법입니다. 다음 단계로 설정할 수 있습니다:

1) IIS 관리자를 통한 Gzip 설정

1.. IIS 관리자 열기: Windows + R 키를 누르고 inetmgr을 입력하여 IIS 관리자를 엽니다.

2. 사이트 선택: Gzip을 적용할 웹사이트를 선택합니다.

3. 압축 모듈 설정: 왼쪽 패널에서 사이트를 선택하고, 중앙의 "IIS" 섹션에서 압축(Compression)을 선택합니다.

4. 정적 및 동적 콘텐츠 압축 활성화: 정적 및 동적 콘텐츠 압축을 체크한 후 적용 버튼을 클릭합니다.

  • 정적 콘텐츠 압축: HTML, CSS, JavaScript 등 변경되지 않는 파일 압축.
  • 동적 콘텐츠 압축: 서버에서 생성되는 데이터, 예를 들어 API 응답이나 동적으로 생성되는 HTML.

2) web.config 파일에서 Gzip 설정:

IIS 설정 외에도 web.config 파일을 통해 Gzip을 적용할 수 있습니다.

이 코드는 정적 및 동적 콘텐츠에 대해 Gzip 압축을 활성화하는 방법을 보여줍니다.

<configuration>
  <system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
      <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" />
      <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="application/json" enabled="true" />
      </dynamicTypes>
      <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="application/json" enabled="true" />
      </staticTypes>
    </httpCompression>
  </system.webServer>
</configuration>

2. C# 코드에서 Gzip 적용하기

ASP.NET 애플리케이션에서 서버에서 직접 Gzip 압축을 수행하려면, HttpResponse 개체를 사용하여 직접 압축을 처리할 수 있습니다.

Global.asax에서 Gzip 적용

Global.asax 파일에서 응답을 압축하는 코드를 추가할 수 있습니다.

이 코드는 클라이언트가 지원하는 인코딩 방식(Gzip 또는 Deflate)을 확인하고, 그에 맞게 응답을 압축하여 보냅니다.

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    var app = sender as HttpApplication;
    if (app == null || app.Context == null || app.Context.Response == null)
        return;

    var acceptedEncodings = app.Request.Headers["Accept-Encoding"];
    if (!string.IsNullOrEmpty(acceptedEncodings))
    {
        acceptedEncodings = acceptedEncodings.ToLowerInvariant();
        if (acceptedEncodings.Contains("gzip"))
        {
            app.Response.Filter = new System.IO.Compression.GZipStream(app.Response.Filter,
                System.IO.Compression.CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "gzip");
        }
        else if (acceptedEncodings.Contains("deflate"))
        {
            app.Response.Filter = new System.IO.Compression.DeflateStream(app.Response.Filter,
                System.IO.Compression.CompressionMode.Compress);
            app.Response.AppendHeader("Content-Encoding", "deflate");
        }
    }
}

압축 적용 확인 방법

압축이 제대로 적용되었는지 확인하려면 다음 방법을 사용할 수 있습니다:

🔵 브라우저 개발자 도구

네트워크 탭에서 요청 헤더에 "Content-Encoding: gzip" 또는 "Content-Encoding: deflate"가 포함되어 있는지 확인합니다

🔵 온라인 Gzip 테스트 도구

웹사이트의 URL을 입력하여 Gzip 압축이 적용되었는지 테스트할 수 있는 다양한 온라인 도구가 있습니다.


이처럼 IIS 설정을 통해 간단하게 Gzip을 적용할 수 있으며, C# 코드를 통해 좀 더 세밀하게 제어할 수도 있습니다.

출처 | ChatGPT

 

728x90
반응형