ASP.NET은 수백만 명의 사용자를 동시에 처리하는 트래픽이 많은 웹 애플리케이션에 널리 사용됩니다. 조직은 이러한 애플리케이션을 부하 분산 웹 팜에 배포합니다. ASP.NET의 중요한 측면 중 하나는 클라이언트와 웹 서버 간의 여러 HTTP 요청 사이에 페이지, 컨트롤 및 사용자 지정 값을 저장하는 메커니즘인 View State입니다. 그러나 의도한 대로 View State를 효과적으로 활용하면 성능과 대역폭에 영향을 미칠 수 있습니다.
주요 요점
페이로드 용량 초과 제거: 표준 ASP.NET 뷰 상태는 페이지 데이터를 100KB를 초과할 수 있는 숨겨진 Base64 문자열에 저장하여 응답 속도를 저하시킵니다. NCache 이를 40바이트 크기의 작은 GUID로 대체합니다.
클라우드 송출 비용 절감: 서버에 대용량 뷰 상태 데이터를 유지하고 브라우저에는 토큰만 전송함으로써 Azure 또는 AWS 배포 환경에서 대역폭 사용량과 관련 비용을 크게 절감할 수 있습니다.
웹 팜 확장성 향상: 로드 밸런싱 환경에서는 분산 캐시와 같은 것이 유용합니다. NCache 모든 서버 노드에서 뷰 상태가 동기화되도록 보장하여 "뷰 상태 MAC 유효성 검사" 오류를 방지합니다.
애플리케이션 보안 강화: 민감한 양식 데이터는 클라이언트 브라우저의 HTML에 노출되지 않고 서버 측 캐시에 안전하게 저장됩니다.
로우코드 구현: 뷰 상태 최적화 NCache 애플리케이션의 로직을 전혀 변경할 필요가 없습니다. 단지 약간의 설정만 하면 됩니다. 웹.구성 앱.브라우저 파일.
ASP.NET 뷰 상태란 무엇인가요?
이 강력한 기능은 다시 로드하거나 새로 고침한 후에도 웹 페이지에서 사용자 입력과 선택 사항을 추적합니다. 이를 통해 웹 애플리케이션은 서버 측 세션이 필요 없이 사용자 입력과 선택 사항을 유지할 수 있습니다. View State 값은 페이지의 숨겨진 필드에 저장되고 Base64 문자열로 인코딩됩니다. 다음과 같습니다.
|
1 2 3 4 |
<input id="__VIEWSTATE" type="hidden" name="__VIEWSTATE" value="/wEPDwUJNzg0MDMxMDA1D2QWAmYPZBYCZg9kFgQCAQ9kFgICBQ9kFgJmD2QWAgIBD xYCHhNQcm2aW91c0NvbnRyb2xNb2RlCymIAU1pY3Jvc29mdC5TaGFyZVBvaW50Lld lYkNvbnRyb2xzLlNQQ29udHJbE1vZDA1XzRlMjJfODM3Y19kOWQ1ZTc2YmY1M2IPD 2…==" /> |
ASP.NET 뷰 상태 관련 문제점
뷰 상태는 매우 유용하지만, 특히 그리드 뷰와 같은 복잡한 컨트롤을 사용하는 애플리케이션에서는 크기가 상당히 커질 수 있습니다. 뷰 상태 크기가 커지면 HTTP 요청 및 응답 크기가 증가하여 Base64 직렬화 오버헤드와 HTTP 페이로드 크기 증가로 인해 애플리케이션의 응답 시간이 느려집니다.
또 다른 단점은 대역폭 사용량 증가로 네트워크 지연 시간이 늘어나고 Azure나 AWS 같은 클라우드 환경에서 송출 비용이 크게 증가한다는 점입니다. 예를 들어, 각 HTTP 요청마다 뷰 상태 데이터가 60~100KB씩 추가된다고 가정하면, 전체 트랜잭션 수를 곱했을 때 비용이 급격히 증가합니다. 마지막으로, 뷰 상태의 일부로 민감한 데이터를 전송하는 것은 보안 위험을 초래하므로 암호화가 필수적입니다. 하지만 암호화 과정은 성능 측면에서 상당한 부담을 줄 수 있습니다.
ASP.NET 뷰 상태를 캐싱하는 이유는 무엇일까요?
이러한 문제를 완화하기 위해 웹 서버에 ASP.NET 뷰 상태를 캐싱하고 GUID를 키로 지정하는 것이 매우 효과적일 수 있습니다. 서버는 이 GUID를 숨겨진 필드에 담아 브라우저로 전송하고, 브라우저는 다음 HTTP 요청과 함께 이를 반환합니다. 그러면 서버는 해당 GUID를 사용하여 캐시에서 상응하는 뷰 상태를 가져옵니다. 이 접근 방식은 브라우저로 전송되는 페이로드를 줄여 응답 시간을 크게 개선하고 대역폭 비용을 대폭 절감합니다.
다음 비교는 뷰 상태를 클라이언트 측에서 분산 캐시로 옮기는 것이 어떤 이점을 가져오는지 보여줍니다. NCache 애플리케이션의 리소스 프로필을 근본적으로 변화시킵니다.
| 제품 특장점 | 표준 ASP.NET 뷰 상태 | 캐시된 뷰 상태 NCache |
|---|---|---|
| 클라이언트 측 페이로드 | 용량이 큽니다(대부분 100KB 이상). | 최소 용량 (약 40바이트) |
| 대역폭 소비 | 높음 (모든 요청을 전송함) | 매우 낮음 (GUID 교환만 해당) |
| 보안 위험 | 높음 (숨겨진 영역에 노출됨) | 낮음 (데이터는 안전한 캐시에 보관됨) |
| 서버 성능 | (직렬화 작업이 많기 때문에) 더 낮습니다. | 최적화됨(빠른 메모리 내 검색) |
구성 NCache ASP.NET 뷰 상태 캐싱용
ASP.NET 애플리케이션이 부하 분산 웹 팜에서 실행되는 경우 분산 캐시를 사용해야 합니다. ASP.NET Cache와 같은 독립형 캐시는 작동하지 않습니다. 이를 위해, NCache 엔터프라이즈 수준의 분산 캐시로서 다음을 제공합니다. ASP.NET 뷰 상태 캐싱 모듈. 이를 구현하려면 최소한의 코드 변경이 필요합니다. ASP.NET web.config 파일을 약간 수정하면 됩니다. 아래 단계에 따라 설정하세요.
- ASP.NET 애플리케이션에서 App_browsers 디렉토리 아래에 app.browser 파일을 만듭니다. 아래와 같이 app.browser 파일에 페이지 어댑터를 추가합니다.
12345<browser refID="Default"><controlAdapters><adapter controlType="System.Web.UI.Page"adapterType="Alachisoft.NCache.Adapters.PageAdapter"/></controlAdapters></browser> - 그런 다음 web.config 파일의 컴파일 섹션에 다음 어셈블리 참조를 추가합니다.
1234567<compilation defaultLanguage="C#" debug="true"><assemblies><add assembly="Alachisoft.NCache.Adapters,Version=1.0.0.0,Culture=neutral,PublicKeyToken=cff5926ed6a53769"/></assemblies></compilation> - web.config 파일에 구성 섹션을 등록합니다.
1234567<configSections><sectionGroup name="ncContentOptimization"><section name="settings"type="Alachisoft.NCache.ContentOptimization.Configurations.ContentSettings"allowLocation="true" allowDefinition="Everywhere"/></sectionGroup></configSections> - 위에서 등록한 web.config 파일에서 구성 섹션에 대한 설정을 지정하세요.
12345678910<ncContentOptimization><settings enableMinification="true"enableViewstateCaching="true"groupedViewStateWithSessions="true"viewstateThreshold="0"enableTrace="true"><cacheSettings cacheName="mycache"><expiration type="Sliding" duration="300"/></cacheSettings></settings></ncContentOptimization> - 마지막으로 web.config의 HttpHandlers 섹션에 HTTP 핸들러를 다음과 같이 등록합니다.
12345<add verb="GET,HEAD" path="NCResource.axd"validate="false"type="Alachisoft.NCache.Adapters.ContentOptimization.ResourceHandler,Alachisoft.NCache.Adapters, Version=1.0.0.0,Culture=neutral,PublicKeyToken=cff5926ed6a53769"/>
구성 후 NCache아래와 같이 애플리케이션에서 View State 태그를 볼 수 있습니다.
|
1 2 3 4 5 6 |
<input type="hidden" name="__NCPVIEWSTATE" id="__NCPVIEWSTATE" value="vs:cf8c8d3927ad4c1a84da7f891bb89185"/> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=""/> |
ASP.NET 뷰 상태와 함께 숨겨진 태그가 하나 더 추가된 것을 확인할 수 있습니다. 이 새 태그는 분산 캐시에 저장된 뷰 상태를 연결하는 고유 키를 포함합니다. 애플리케이션 서버가 뷰 상태를 검색해야 할 때 캐시에서 빠르게 접근할 수 있으므로 성능이 크게 향상됩니다.
맺음말
ASP.NET 뷰 상태를 캐싱하면 NCache, 대역폭 비용을 대폭 줄이는 동시에 애플리케이션 응답 시간을 현저히 개선할 수 있습니다. 이 간단하면서도 효과적인 솔루션은 ASP.NET 애플리케이션의 전반적인 성능을 크게 향상시켜 더욱 효율적이고 리소스 효율적이게 만들어줍니다. 이러한 이점을 알아보려면 다음을 시도해 보세요. NCache ASP.NET 뷰 상태 모듈을 직접 사용해 보세요!
자주 묻는 질문 (FAQ)
질문: 로컬 ASP.NET 캐시 대신 분산 캐시가 필요한 이유는 무엇입니까?
A: 표준 ASP.NET 캐싱은 단일 서버에 로컬로 적용됩니다. 로드 밸런싱된 웹 팜에서 포스트백 요청이 원래 요청이 발생한 서버와 다른 서버에 도달하면 로컬 캐시에 뷰 상태가 저장되지 않습니다. NCache 팜 내의 모든 서버가 동일한 뷰 상태 데이터를 공유하는 분산 환경을 제공합니다.
Q: 목적은 무엇입니까? viewstate 임계값 환경?
A : viewstate 임계값 (KB 단위) 이 옵션을 사용하면 캐싱에 사용할 최소 크기 제한을 설정할 수 있습니다. 페이지의 뷰 상태가 이 임계값보다 작으면 평소처럼 클라이언트 측에 유지됩니다. 이렇게 하면 실제로 성능 병목 현상을 일으키는 "용량이 큰" 뷰 상태에 대해서만 캐시 리소스를 사용할 수 있습니다.
질문: 뷰 상태 캐싱을 사용하려면 기존 .NET 코드를 수정해야 하나요?
A: 아니요. 통합은 공급자 수준에서 처리됩니다. 등록을 통해 Alachisoft.NCache어댑터 귀하의 웹.구성 앱.브라우저 파일 NCache 페이지 로직을 다시 작성할 필요 없이 뷰 상태의 라이프사이클을 자동으로 가로챕니다.
Q: 브라우저는 캐시에서 어떤 뷰 상태를 가져와야 하는지 어떻게 알 수 있나요?
A: NCache 대용량 Base64 문자열을 대체합니다. __VIEWSTATE 고유하고 가벼운 GUID를 가진 숨겨진 필드입니다. 포스트백 시 브라우저는 이 GUID를 서버로 다시 전송합니다. NCache 클러스터에서 원본 데이터를 즉시 가져오기 위한 키로 사용됩니다.
질문: 뷰 상태 만료를 사용자 세션과 연결할 수 있나요?
A: 네. 설정함으로써요. groupedViewStateWithSessions="true" 설정에서, NCache ASP.NET 세션이 만료될 때 사용자의 캐시된 뷰 상태를 자동으로 지워 캐시 클러스터의 메모리 사용량을 최적화하는 데 도움이 됩니다.







당신이 사용할 수 NCache Microsoft Azure ASP.NET 애플리케이션용 ASP.NET 세션 상태를 저장하기 위한 Azure용. 다음은 Microsoft Azure 세션 저장소 옵션과 그 이유를 설명하는 블로그입니다. NCache for Azure는 Microsoft Azure에서 사용 가능한 모든 옵션 중에서 가장 좋습니다.
https://20.200.20.123:86/storing-asp-net-session-state-in-a-microsoft-azure-distributed-cache/
세션 상태를 처리하기 위해 Windows Azure 캐싱(미리 보기)을 성공적으로 사용하는 사람이 있습니까?