다음을 통해 공유


ASP.NET 2.0 마이그레이션 개요

업데이트: 2007년 11월

이전 버전의 ASP.NET에 사용되던 프로그래밍 개념은 대부분 ASP.NET 버전 2.0에서도 그대로 사용되므로 ASP.NET 1.x를 사용한 경험이 있다면 ASP.NET 2.0에서 응용 프로그램을 개발하는 데 큰 어려움이 없을 것입니다. ASP.NET 2.0은 ASP.NET 1.x 응용 프로그램을 실행하는 데 사용하는 것과 같은 운영 체제 및 하드웨어에서 실행됩니다. 여기에는 Microsoft Windows 2000과 Microsoft IIS(인터넷 정보 서비스) 5.0, Microsoft Windows XP와 IIS 5.1, Microsoft Windows Server 2003과 IIS 6.0이 포함됩니다.

기존의 웹 응용 프로그램을 ASP.NET으로 마이그레이션하려면 작업을 진행하기에 앞서 ASP.NET 2.0의 새 기능을 살펴봐야 합니다. 가장 중요한 변경 사항으로는 페이지 코드 숨김 모델, 웹 응용 프로그램 폴더 구조 및 페이지 컴파일 모델이 있습니다.

마이그레이션을 수행하기 전에 ASP.NET 1.x 응용 프로그램을 개발했던 .NET Framework 버전에서 이 응용 프로그램을 컴파일하고 실행할 수 있는지 확인해야 합니다. 또한 마이그레이션을 시작하기 전에 Microsoft .NET Framework 버전 2.0이 설치되어 작동하는지 확인해야 합니다.

이 항목에서는 마이그레이션을 수행하기 전에 고려해야 할 일반적인 사항을 다룹니다. 이 항목에서 설명하는 단원은 아래와 같습니다.

  • 마이그레이션의 이점

  • 페이지 모델

  • ASP.NET 버전간 데이터 공유

  • ASP.NET 버전간 폼 인증

  • 이름 충돌

  • 태그 호환

  • HttpOnly 및 사이트 간 스크립팅

마이그레이션의 이점

웹 응용 프로그램을 ASP.NET 2.0으로 마이그레이션하면 태그와 코드를 더 확실하게 분리하고, 예약된 응용 프로그램 폴더를 사용하고, 코드를 자동으로 컴파일할 수 있을 뿐 아니라 이 밖에도 여러 가지 이점을 얻을 수 있습니다.

partial 클래스를 기반으로 하는 새로운 코드 숨김 모델을 사용하면 태그와 코드를 더 확실하게 분리할 수 있고 코드 숨김 파일에서 컨트롤을 선언하거나 이벤트 연결 코드를 작성할 필요가 없습니다. ASP.NET 페이지 컴파일 모델에서 코드 숨김 파일은 해당 .aspx 파일을 처음 요청할 때 런타임에 여러 어셈블리로 컴파일됩니다.

ASP.NET에서는 예약된 폴더를 기반으로 하는 향상된 웹 응용 프로그램 구조를 사용합니다. 이러한 폴더에는 응용 프로그램을 더 효율적으로 구성하는 데 도움이 되는 특별한 콘텐츠가 포함됩니다. App_Data 같은 몇몇 예약된 폴더는 웹 요청에 대한 응답으로 콘텐츠를 제공하지 않지만 응용 프로그램 코드에서는 이러한 폴더에 액세스할 수 있습니다. 자세한 내용은 ASP.NET 웹 사이트 구조를 참조하십시오.

ASP.NET 2.0 컴파일러는 웹 사이트에서 리소스에 대한 요청이 들어오면 응용 프로그램 코드와 종속 리소스를 자동으로 컴파일합니다. 예를 들어, ASP.NET 2.0에서 기존의 웹 페이지나 종속 리소스에 대한 변경 사항을 저장하기만 하면 해당 페이지와 리소스에 대해 다시 요청되는 페이지를 간단하게 다시 컴파일할 수 있습니다. 이 기능은 App_Code 폴더의 코드 파일, App_GlobalResources 및 App_LocalResources 폴더의 리소스 파일, App_Themes 폴더의 테마 같은 리소스에 적용됩니다. 페이지 컴파일 모델에 대한 자세한 내용은 ASP.NET 컴파일 개요를 참조하십시오.

대규모 응용 프로그램을 마이그레이션할 때는 Visual Web Developer 2005, Visual Web Developer 2005 Express Edition, Visual Studio 2005 또는 Visual Studio 2005 Team System을 사용하는 것이 좋습니다. 이들 각각에는 일반적인 마이그레이션과 관련된 여러 가지 작업을 자동으로 수행하는 마이그레이션 마법사가 포함되어 있습니다. 이 마법사에서는 ASP.NET 1.x 웹 응용 프로그램을 ASP.NET 2.0으로 변환하는 데 필요한 변경 작업을 수행합니다.

ASP.NET 2.0은 이전 버전과의 호환성이 매우 뛰어나므로 웹 응용 프로그램을 반드시 마이그레이션할 필요는 없습니다. 마이그레이션하지 않더라도 응용 프로그램에서 .NET Framework 2.0을 사용하기만 한다면 ASP.NET 2.0의 여러 가지 기능을 웹 응용 프로그램에 사용할 수 있습니다. .NET Framework 2.0을 사용하도록 기존 웹 응용 프로그램을 구성하는 방법은 방법: .NET Framework 2.0에서 ASP.NET 1.x 응용 프로그램 실행을 참조하십시오.

페이지 모델

ASP.NET 코드 숨김 웹 페이지 모델을 사용하면 웹 페이지의 태그가 저장되는 파일(.aspx 파일)과 프로그래밍 코드가 저장되는 파일(코드 숨김 파일)을 분리할 수 있습니다. ASP.NET 2.0의 코드 숨김 모델은 partial 클래스라는 새로운 언어 기능을 사용한다는 점에서 이전 버전과 다릅니다. ASP.NET 2.0의 이 새로운 코드 숨김 모델을 사용하면 이전 버전의 ASP.NET보다 훨씬 더 확실하게 태그와 코드를 분리할 수 있습니다.

@ Page 지시문의 CodeBehind 특성을 기반으로 한 이전의 코드 숨김 모델을 사용하는 웹 페이지도 ASP.NET 2.0에서 계속 작동합니다. 그러나 향상된 태그 및 코드 분리 기능과 자동 페이지 컴파일 기능을 활용하려면 코드 숨김 파일의 partial 클래스 정의와 @ Page 지시문의 CodeFile 특성을 사용하는 새 코드 숨김 모델로 이러한 페이지를 마이그레이션하는 것이 좋습니다. 이전의 코드 숨김 모델을 사용하는 웹 페이지는 수동으로 컴파일해야 합니다.

방법: CodeBehind 특성을 사용하는 ASP.NET 1.1 웹 페이지를 ASP.NET 2.0으로 마이그레이션에서 설명하는 것과 같이 수동으로 변경 작업을 수행하거나 Visual Web Developer 2005 Express Edition과 같이 마이그레이션 마법사가 포함된 Microsoft Visual Studio 2005 버전 중 하나를 사용할 수 있습니다.

ASP.NET 버전 1.1에서는 @ Page 지시문의 CodeBehind 특성이 Src 특성으로 대체된 변형된 코드 숨김 모델도 지원합니다. Src 특성을 사용하는 웹 페이지는 ASP.NET 2.0에서 계속 작동하므로 이러한 페이지를 실행하기 위해 수정할 필요가 없습니다.

코드 숨김 모델을 사용하는 대신 단일 파일 페이지 모델을 사용하여 페이지의 태그와 프로그래밍 코드를 물리적으로 동일한 .aspx 파일에 배치할 수 있습니다. 이전 버전의 ASP.NET에 사용되는 단일 파일 페이지는 ASP.NET 2.0에서 계속 작동하므로 이러한 페이지를 실행하기 위해 수정할 필요가 없습니다.

ASP.NET 버전간 데이터 공유

웹 사이트의 일부만 ASP.NET 2.0으로 마이그레이션하고 다른 부분은 수정하지 않은 채로 둘 수 있습니다. 웹 사이트가 여러 개의 독립적인 웹 응용 프로그램으로 분할되어 있고 각 응용 프로그램이 함께 작동하여 웹 사이트 기능을 제공하는 경우 응용 프로그램 중 일부만 마이그레이션하고 나머지는 그대로 둘 수 있습니다. 이 시나리오에서는 마이그레이션된 응용 프로그램과 마이그레이션되지 않은 응용 프로그램 사이에 응용 프로그램 상태를 공유할 수 없습니다. ASP.NET 1.x 및 ASP.NET 2.0 페이지에서 모두 액세스할 수 있는 사용자 지정 세션 상태 솔루션을 제공하지 않는 한 세션 상태도 이와 마찬가지로 응용 프로그램간에 공유되지 않습니다. 자세한 내용은 세션 상태 저장소 공급자 구현을 참조하십시오.

ASP.NET 버전간 폼 인증

폼 인증을 사용하면 사용자가 직접 작성한 코드로 사용자를 인증한 다음 인증 토큰을 쿠키나 페이지 URL에 유지할 수 있습니다. 서로 다른 ASP.NET 버전을 실행하는 응용 프로그램간에 ASP.NET 폼 인증이 작동하도록 만들어 한 버전에서 발행한 인증 티켓을 다른 버전에 사용하도록 할 수 있습니다.

ASP.NET 버전간에 작동하도록 인증을 구성하는 작업은 웹 서버의 네트워크(웹 팜)에 대한 인증을 구성하는 과정과 비슷합니다. 두 경우 모두 동일한 키를 사용하여 인증 티켓을 공유하는 응용 프로그램에 대한 machineKey 요소의 validationKey 및 decryptionKey 특성을 명시적으로 설정합니다. ASP.NET 버전간의 인증을 지원하려면 ASP.NET 2.0 응용 프로그램의 Web.config 파일에서 machineKey 요소의 decryption 특성을 3DES로 설정하여 구성을 추가로 변경해야 합니다. ASP.NET 2.0의 기본 암호화는 AES인 반면 이전 버전의 ASP.NET에는 3DES가 사용되기 때문입니다. 자세한 내용은 ASP.NET 폼 인증 개요를 참조하십시오.

이름 충돌

마이그레이션을 수행하기 전에 웹 응용 프로그램을 검색하여 .NET Framework 2.0의 기능 클래스나 네임스페이스와 충돌하는 이름이 있는지 확인하는 것이 좋습니다. .NET Framework에서 이미 사용되고 있는 cache, membership, profile 및 role과 같은 일반 이름을 웹 응용 프로그램에서 사용하는 경우 충돌이 발생할 수 있습니다. 이름이 충돌하지 않도록 하려면 문제의 소지가 있는 이름에 대한 참조를 코드에서 찾아 정규화된 참조로 대체합니다.

ASP.NET 2.0에서는 이전 버전과 다른 웹 사이트 레이아웃을 사용합니다. 웹 응용 프로그램 작업을 좀 더 쉽게 수행할 수 있도록 ASP.NET에서는 특정 폴더 및 파일 이름을 예악하여 특정 콘텐츠 형식에 사용할 수 있습니다. 예약된 폴더의 콘텐츠는 이와 관련된 웹 요청에 사용되지 않으므로 이 경우 기존 응용 프로그램에서 문제가 발생할 수 있습니다. 따라서 개별 응용 프로그램 파일을 마이그레이션하기 전에 응용 프로그램 폴더 또는 파일 이름 중 ASP.NET 2.0 예약 폴더 및 파일 이름과 충돌하는 이름을 모두 변경하는 것이 좋습니다. ASP.NET 웹 사이트 레이아웃의 예약된 폴더에 대한 자세한 내용은 ASP.NET 웹 사이트 레이아웃을 참조하십시오.

태그 호환

기본적으로 ASP.NET에서 생성하는 모든 태그 및 ASP.NET에 포함된 웹 서버 컨트롤은 XHTML 1.0 Transitional 표준을 따릅니다. 이와 관련하여 마이그레이션 후에 의도하지 않은 HTML 렌더링 문제가 발생할 수 있습니다. 웹 응용 프로그램을 마이그레이션하는 데 도움이 되도록 Web.config 파일에서 xhtmlConformance 요소의 mode 특성을 Legacy로 설정할 수 있습니다. 그러나 이는 마이그레이션 과정에서의 임시 방편에 불과합니다. 장기적인 관점에서는 xhtmlConformance 요소의 mode 특성을 Transitional로 설정하여 응용 프로그램을 실행하는 것이 좋습니다. 또한 마이그레이션된 페이지에 DOCTYPE 요소를 추가하는 것이 좋습니다. 웹 페이지를 XHTML과 호환되도록 만들 때의 이점에 대한 자세한 내용은 ASP.NET 및 XHTML을 참조하십시오.

HttpOnly 및 사이트 간 스크립팅

HttpCookie 클래스의 HttpOnly 속성은 .NET Framework 2.0에 새로 도입되었습니다. 이 속성을 true로 설정하면 사이트 간 스크립팅 위협을 줄이는 데 도움이 됩니다. 폼 인증 쿠키와 세션 ID 쿠기에 대해 HttpOnly 속성이 true로 자동 설정되므로 이러한 쿠키는 클라이언트측 스크립팅에 사용할 수 없습니다. 마이그레이션한 웹 페이지에서 NullReferenceException 예외가 throw되는 경우 HttpOnly 속성이 true로 설정되어 클라이언트의 세션이 소실되었음을 의미하는 것일 수 있습니다. 이 경우 다음 방법 중 하나를 사용하여 문제를 해결할 수 있습니다.

  • Global.asax 파일에서 HttpApplication 클래스의 EndRequest 이벤트 처리기를 통해 각 쿠키의 HttpOnly 속성을 false로 설정합니다.

  • 쿠키를 다른 쿠키로 복사하는 사용자 지정 모듈을 작성하고 HttpOnly 속성을 지워 클라이언트 스크립트에서 이를 조작할 수 있도록 합니다.

  • HttpOnly 속성을 true로 설정하지 않는 사용자 지정 세션 ID 관리자를 작성합니다.

사이트 간 스크립팅 위험 완화에 대한 자세한 내용은 Mitigating Cross-site Scripting with HTTP-only Cookies를 참조하십시오.

참고 항목

개념

웹 응용 프로그램 프로젝트 개요

ASP.NET 폼 인증 개요

참조

machineKey 요소(ASP.NET 설정 스키마)