다음을 통해 공유


ASP.NET에서 ASP.NET Core로 단계적 마이그레이션 시작하기

Important

시작하기 전에: 이 문서에서는 ASP.NET Core 마이그레이션 개요를 읽었다고 가정합니다. 아직 읽지 않은 경우 증분 마이그레이션의 개념, 접근 방식 및 이점을 이해하기 시작하세요.

대규모 마이그레이션의 경우 원래 .NET Framework 앱에 프록시하는 ASP.NET Core 앱을 설정하는 것이 좋습니다. 새 프록시 사용 앱은 다음 이미지에 표시됩니다.

경로 마이그레이션 시작

이 문서에서는 접근 방식을 이해한 후 증분 마이그레이션을 진행하는 실용적인 단계를 제공합니다.

Prerequisites

증분 마이그레이션을 시작하기 전에 다음이 있는지 확인합니다.

  1. 개요 읽기: ASP.NET에서 ASP.NET Core로의 점진적 마이그레이션
  2. 마이그레이션하려는 정상적으로 작동하는 ASP.NET Framework 애플리케이션
  3. 최신 업데이트가 포함된 Visual Studio 2022
  4. 설치된 .NET 8 이상 SDK
  5. 애플리케이션의 종속성 및 타사 라이브러리 이해

마이그레이션 단계 개요

증분 마이그레이션 프로세스는 다음 주요 단계를 따릅니다.

  1. ASP.NET Core 프로젝트 설정
  2. 기술 부채 수정
  3. 교차 관심사 식별 및 해결
  4. 지원 라이브러리 업그레이드

ASP.NET Core 프로젝트 설정

첫 번째 단계는 프록시로 사용할 새 ASP.NET Core 애플리케이션을 만드는 것입니다.

수행할 내용:

  • 기존 ASP.NET Framework 앱과 함께 새 ASP.NET Core 프로젝트 만들기
  • YARP를 사용하여 원래 애플리케이션에 대한 프록시 요청으로 구성(또 다른 역방향 프록시)
  • 증분 마이그레이션을 위한 기본 인프라 설정

자세한 지침:

기술 부채 수정

이 단계를 수행하는 경우: 지원 라이브러리를 업그레이드하기 전에 마이그레이션 프로세스를 복잡하게 만들 수 있는 기술적 문제를 해결합니다.

지원 라이브러리 업그레이드를 시작하기 전에 마이그레이션 프로세스를 방해할 수 있는 기술적 문제를 정리하는 것이 중요합니다. 더 원활한 업그레이드 환경을 보장하려면 먼저 이 단계를 완료해야 합니다.

패키지 종속성 업데이트

NuGet 패키지를 검토하고 최신 호환 버전으로 업데이트합니다.

  1. 기존 패키지 감사: CLI가 ASP.NET Framework 애플리케이션에서 작동하지 않으므로 Visual Studio의 NuGet 패키지 관리자 dotnet 사용
  2. 패키지 증분 업데이트: 호환성 문제를 방지하기 위해 패키지를 한 번에 하나씩 업데이트합니다.
  3. 각 업데이트 후 테스트: 각 패키지 업데이트 후에도 애플리케이션이 제대로 작동하는지 확인
  4. 파괴적인 변경 사항 해결: 일부 패키지 업데이트는 해결해야 할 파괴적인 변경을 초래할 수 있습니다.

빌드 도구 현대화

빌드 도구 및 프로젝트 구성을 업데이트합니다.

  1. 업데이트 도구: 최신 버전의 MSBuild/Visual Studio를 사용하고 있는지 확인합니다.
  2. 종속성을 위해 PackageReference로 마이그레이션: 웹 애플리케이션 프로젝트에 아직 없는 경우 형식으로 마이그레이션하는 packages.configPackageReference 것이 좋습니다.
  3. 사용하지 않는 참조 정리: 사용되지 않는 어셈블리 참조 또는 NuGet 패키지 제거
  4. SDK 스타일 프로젝트 파일로 마이그레이션: 기존 프로젝트 파일을 최신 SDK 스타일 형식으로 변환합니다. 이는 최신 .NET 프로젝트와의 호환성을 위해 필수적이며 더 나은 도구 지원을 제공합니다.
  5. 빌드 스크립트 업데이트: 사용자 지정 빌드 스크립트 또는 CI/CD 구성 검토 및 업데이트

코드 품질 문제 해결

마이그레이션을 복잡하게 만들 수 있는 알려진 코드 품질 문제를 해결합니다.

  1. 컴파일러 경고 수정: 컴파일러 경고, 특히 사용되지 않는 API와 관련된 경고 해결
  2. 미사용 코드 제거: 사용되지 않는 클래스, 메서드 및 기타 코드 요소 정리
  3. 사용되지 않는 API 사용량 업데이트: 더 이상 사용되지 않는 API의 사용량을 가능한 경우 최신 API로 대체

이 준비 작업은 라이브러리 업그레이드 프로세스를 훨씬 원활하게 만들고 마이그레이션 중에 복잡한 문제가 발생할 가능성을 줄입니다.

횡단 관심사 식별 및 해결

이 단계를 수행하는 경우: 기술적 부채를 해결하는 동안 지원 라이브러리를 업그레이드하기 전에 전체 애플리케이션에 영향을 미치는 횡단 관심사를 식별하고 구성합니다.

애플리케이션의 횡단 관심사는 인증, 세션 관리, 로깅 및 캐싱과 같이 여러 계층 또는 구성 요소에 걸쳐 있는 측면입니다. 이러한 문제는 증분 마이그레이션 중에 ASP.NET Framework 및 ASP.NET Core 애플리케이션이 상태를 통신하고 공유하는 방식에 영향을 주므로 마이그레이션 프로세스 초기에 해결해야 합니다.

다음 섹션에서는 가장 일반적인 횡단 관심사를 다룹니다. 애플리케이션에 적용되는 것만 구성합니다.

세션 지원 구성

다음과 같은 경우 이를 구성합니다. ASP.NET Framework 애플리케이션은 세션 상태를 사용합니다.

지침은 일반 세션 마이그레이션 설명서를 참조하세요.

세션은 ASP.NET Core의 기능과 이름을 공유하는 ASP.NET 일반적으로 사용되는 기능이지만 API는 크게 다릅니다. 세션 상태를 사용하는 라이브러리를 업그레이드할 때 세션 지원을 구성해야 합니다. 애플리케이션 간에 세션 상태 공유를 사용하도록 설정하는 방법에 대한 자세한 지침은 원격 세션 지원에 대한 설명서를 참조하세요.

Authentication Configuration(인증 구성)

다음과 같은 경우 이를 구성합니다. ASP.NET Framework 애플리케이션은 인증을 사용하며 이전 애플리케이션과 새 애플리케이션 간에 인증 상태를 공유하려고 합니다.

지침은 일반 인증 마이그레이션 설명서를 참조하세요.

System.Web 어댑터 원격 인증 기능을 사용하여 원래 ASP.NET 앱과 새 ASP.NET Core 앱 간에 인증을 공유할 수 있습니다. 이 기능을 사용하면 ASP.NET Core 앱이 원래 ASP.NET 앱에 대한 인증을 연기할 수 있습니다. 자세한 내용은 원격 인증 에 대한 설명서를 참조하세요.

고려해야 할 기타 횡단적 문제

애플리케이션에 따라 다음을 처리해야 할 수도 있습니다.

  • 로깅: 두 애플리케이션에서 일관된 로깅을 보장합니다. 공유 로깅 공급자를 사용하거나 로그가 제대로 집계되는지 확인하는 것이 좋습니다.
  • 캐싱: 애플리케이션에서 캐싱(메모리 내, 분산 또는 출력 캐싱)을 사용하는 경우 애플리케이션 간에 캐시 일관성을 유지하는 방법을 계획합니다.
  • 오류 처리: ASP.NET Framework 및 ASP.NET Core 애플리케이션 모두에서 일관된 오류 처리 및 보고를 설정합니다.
  • 구성 관리: 두 애플리케이션 간에 구성 설정을 공유하거나 관리하는 방법을 계획합니다.
  • 상태 모니터링: 마이그레이션 프로세스 중에 두 애플리케이션에 대한 모니터링 및 상태 검사를 설정합니다.
  • 종속성 주입: ASP.NET Framework 앱에서 DI 컨테이너를 사용하는 경우 ASP.NET Core의 기본 제공 DI 컨테이너로 마이그레이션을 계획합니다.

지원 라이브러리 업그레이드

이 단계를 수행하는 경우: 비즈니스 논리가 포함된 클래스 라이브러리에 의존하는 특정 경로를 마이그레이션해야 하는 경우에만 이전 애플리케이션과 새 애플리케이션 간에 공유해야 합니다.

Note

증분 접근 방식: 증분 마이그레이션 프로세스를 사용하면 모든 지원 라이브러리를 한 번에 업그레이드할 필요가 없습니다. 현재 마이그레이션하는 특정 경로에 필요한 라이브러리만 업그레이드하면 됩니다. 이렇게 하면 더 작고 관리하기 쉬운 부분에서 마이그레이션을 해결할 수 있습니다.

라이브러리 업그레이드 프로세스

Important

지원 라이브러리는 postorder 깊이 우선 검색 순서로 업그레이드해야 합니다. 즉, 다음을 의미합니다.

  1. 리프 종속성 시작: 솔루션의 다른 라이브러리에 대한 종속성이 없는 라이브러리로 시작
  2. 종속성 트리를 통해 상향 작업: 모든 종속성이 성공적으로 업그레이드된 후에만 라이브러리를 업그레이드합니다.
  3. 기본 애플리케이션으로 종료: 기본 ASP.NET Framework 애플리케이션은 수정할 마지막 항목이어야 합니다.

이 순서 지정은 다음과 같은 이유로 필수적입니다.

  • 라이브러리를 업그레이드할 때 모든 종속성이 이미 호환되도록 합니다.
  • 업그레이드 프로세스 중에 순환 종속성 문제를 방지합니다.
  • 종속 항목으로 이동하기 전에 각 라이브러리를 독립적으로 테스트할 수 있습니다.

참고: 전체 솔루션이 아니라 현재 마이그레이션하는 경로에 필요한 라이브러리의 하위 집합에 대해서만 이 순서를 따라야 합니다.

각 라이브러리에 대한 업그레이드 프로세스:

솔루션에 마이그레이션하는 경로에 사용해야 하는 지원 라이브러리가 있는 경우 가능한 경우 .NET Standard 2.0으로 업그레이드해야 합니다. GitHub Copilot 앱 현대화 가 도움이 될 수 있습니다. 라이브러리가 .NET Standard를 대상으로 할 수 없는 경우 원래 프로젝트의 .NET Framework 대상과 함께 또는 원래 프로젝트와 함께 새 프로젝트에서 .NET 8 이상을 대상으로 지정할 수 있습니다.

이러한 라이브러리에서 System.Web 어댑터를 사용하면 클래스 라이브러리 내에서 HttpContext의 사용을 지원할 수 있습니다. 라이브러리에서 HttpContext를 사용하도록 설정하려면 다음을 수행합니다.

  1. 프로젝트 파일에서 System.Web 참조를 제거
  2. Microsoft.AspNetCore.SystemWebAdapters 패키지 추가
  3. 다중 대상 지정을 사용하도록 설정하고 .NET 8 대상 이상을 추가하거나 프로젝트를 .NET Standard 2.0으로 변환합니다.

이 단계에서는 솔루션 구조 및 마이그레이션하는 경로에 따라 여러 프로젝트를 변경해야 할 수 있습니다. GitHub Copilot 앱 현대화 는 프로세스에서 여러 단계를 변경하고 자동화해야 하는 항목을 식별하는 데 도움이 될 수 있습니다.

다음 단계

위의 설치 및 라이브러리 업그레이드 단계를 완료했으면 다음을 수행합니다.

  1. 작게 시작: 먼저 간단한 상태 비정상 엔드포인트를 마이그레이션합니다.
  2. 철저히 테스트: 마이그레이션된 각 구성 요소가 두 환경에서 올바르게 작동하는지 확인
  3. 성능 모니터링: 프록시 설정의 성능 영향 감시
  4. 반복: 마이그레이션이 완료될 때까지 구성 요소를 증분 방식으로 계속 마이그레이션