ASP.NET Web Forms 배포 시 흔히 발생하는 문제 및 해결 방법

중앙 정렬이 적용되지 않는 경우

웹 폼 환경에서 요소의 중앙 정렬을 구현할 때 text-align: center가 예상대로 동작하지 않을 수 있다. 일부 개발자는 HTML 속성인 align="center"을 사용해 임시로 해결하기도 하지만, 이 속성은 더 이상 권장되지 않는다. 대신 CSS 클래스를 활용하는 것이 바람직하다.

.text-center {
    text-align: center;
}

실제 마크업에서는 다음과 같이 작성할 수 있다:

<div id="divBody" class="text-center">
    <!-- 내용 -->
</div>

이 방식은 표준에 부합하며, 브라우저 호환성과 유지보수 측면에서도 우수하다.

Roslyn 디렉터리 삭제 여부

프로젝트 출력 디렉터리 내에 포함된 Roslyn 폴더는 C# 및 VB 코드의 분석, 컴파일, 리팩터링 기능을 제공하는 .NET Compiler Platform으로, 주로 개발 시 소스 코드 생성이나 정적 분석에 사용된다. 이는 GitHub에서 오픈소스로 관리되며, AOP(관점 지향 프로그래밍) 또는 메타프로그래밍 시 유용하다.

그러나 웹 애플리케이션을 배포할 때 Roslyn 컴파일러(약 18MB)는 필수적이지 않다. 서버에서 사전에 컴파일된 어셈블리만 실행한다면, 해당 폴더를 안전하게 제거할 수 있으며, 운영에는 영향을 주지 않는다.

유형 로드 실패: "타입을 찾을 수 없습니다"

배포 후 다음과 같은 오류가 발생할 수 있다:

분석기 오류 메시지: 유형 'MathToTable.MathToTable'을(를) 로드할 수 없습니다.

이 문제는 일반적으로 응용프로그램이 가상 디렉터리 하위에 배치되었으나, 루트 애플리케이션 컨텍스트로 등록되지 않았을 때 발생한다. IIS 또는 호스팅 환경에서 해당 폴더를 애플리케이션으로 변환하거나, 사이트 루트에 직접 배포하면 해결된다.

CodeDom 공급자 로드 실패

다음과 같은 오류 메시지가 나타날 수 있다:

CodeDom 공급자 유형 'Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider'을(를) 찾을 수 없습니다.

이는 배포 환경에서 Roslyn 기반 동적 컴파일이 필요 없음에도 불구하고, web.config 파일에 관련 설정이 남아 있을 경우 발생한다. 불필요한 경우 아래 섹션을 주석 처리하거나 제거하면 된다.

<system.codedom>
  <compilers>
    <!--
    <compiler language="c#;cs;csharp" extension=".cs"
      type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
      warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701" />
    -->
  </compilers>
</system.codedom>

클라이언트 요청 값에 잠재적 위험 감지

HTML 태그나 스크립트를 포함한 폼 데이터를 전송할 때 ASP.NET의 기본 요청 검증(Request Validation) 기능이 차단할 수 있다. 특정 페이지에서만 이를 비활성화하려면 페이지 지시어에 다음 속성을 추가한다.

<%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" 
    CodeBehind="MathToTable.aspx.cs" Inherits="MathToTable.MathToTable" %>

주의: 이 설정은 XSS 공격에 취약할 수 있으므로, 입력값 검증 및 인코딩 처리를 병행해야 한다.

입력란에 자리 표시자(Placeholder) 사용

사용자에게 입력을 유도하기 위해 placeholder 속성을 활용할 수 있다. Bootstrap 스타일과 함께 사용하면 직관적인 UI를 제공한다.

<input type="text" class="form-control" id="name" placeholder="이름을 입력하세요">

Bootstrap 스타일 적용 시 jQuery 의존성

Bootstrap의 CSS 기능(예: 그리드, 폼 스타일)만 사용하고 JavaScript 기능(모달, 드롭다운 등)을 사용하지 않는다면, jQuery를 포함하지 않아도 무방하다. 단, 아래 두 자원은 반드시 참조되어야 한다.

<link href="Content/bootstrap.min.css" rel="stylesheet" />
<script src="Scripts/bootstrap.min.js"></script>

최신 버전의 Bootstrap JS는 자체적으로 종속성을 최소화했으며, 일부 기능은 Popper.js를 필요로 할 수 있으나, 기본 스타일링에는 영향을 주지 않는다.

태그: ASP.NET Web Forms bootstrap Roslyn CodeDom Request Validation

7월 31일 22:31에 게시됨