

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS에서 ASP.NET Web Forms 애플리케이션 현대화
<a name="modernize-asp-net-web-forms-applications-on-aws"></a>

*Vijai Anand Ramalingam, Sreelaxmi Pai, Amazon Web Services*

## 요약
<a name="modernize-asp-net-web-forms-applications-on-aws-summary"></a>

이 패턴은 레거시 모놀리스 ASP.NET Web Forms 애플리케이션을 AWS의 ASP.NET Core로 포팅하여 현대화하는 단계를 설명합니다.

ASP.NET Web Forms 애플리케이션을 ASP.NET Core로 포팅하면 Linux의 성능, 비용 절감 및 강력한 에코시스템을 활용할 수 있습니다. 하지만 이 작업에는 상당한 수작업이 필요할 수 있습니다. 이 패턴에서는 단계적 접근 방식을 사용하여 레거시 애플리케이션을 점진적으로 현대화한 다음 AWS 클라우드에서 컨테이너화합니다.

쇼핑 카트에 사용할 레거시 모놀리스 애플리케이션을 생각해 보세요. ASP.NET Web Forms 애플리케이션으로 만들어졌으며 코드 숨김(`aspx.cs`) 파일이 있는 .aspx 페이지로 구성되어 있다고 가정해 보겠습니다. 현대화 프로세스는 세 단계로 구성됩니다.

1. 적절한 분해 패턴을 사용하여 모놀리스를 마이크로서비스로 분리하세요. 자세한 내용은 AWS 권장 가이드 웹 사이트에서 [모놀리스를 마이크로서비스로 분해](https://docs.aws.amazon.com/prescriptive-guidance/latest/modernization-decomposing-monoliths/) 가이드를 참조하세요.

1. 레거시 ASP.NET Web Forms(.NET 프레임워크) 애플리케이션을 .NET 5 이상의 ASP.NET Core로 포팅합니다. 이 패턴에서는 Porting Assistant for .NET를 사용하여 ASP.NET Web Forms 애플리케이션을 스캔하고 ASP.NET Core와 호환되지 않는지 식별합니다. 이렇게 하면 수동 포팅 작업이 줄어듭니다.

1. React를 사용하여 Web Forms UI 레이어를 재개발하세요. 이 패턴에는 UI 재개발이 포함되지 않습니다. 자세한 지침은 React 설명서에서 [새 React 앱 만들기](https://reactjs.org/docs/create-a-new-react-app.html)를 참조하세요.

1. Web Forms 코드 숨김 파일(비즈니스 인터페이스)을 ASP.NET Core 웹 API로 재개발하세요. 이 패턴은 NDepend 보고서를 사용하여 필수 파일 및 종속성을 파악하는 데 도움이 됩니다.

1. Porting Assistant for .NET를 사용하여 기존 애플리케이션의 공유/공통 프로젝트(예: 비즈니스 로직 및 데이터 액세스)를 .NET 5 이상으로 업그레이드하세요. 

1. 애플리케이션을 보완하기 위해 AWS 서비스를 추가하세요. 예를 들어, [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하여 애플리케이션 로그를 모니터링, 저장 및 액세스하고, [AWS Systems Manager](https://aws.amazon.com/systems-manager/)를 사용하여 애플리케이션 설정을 저장할 수 있습니다.

1. 현대화된 ASP.NET Core 애플리케이션을 컨테이너화합니다. 이 패턴은 Visual Studio에서 Linux를 대상으로 하는 Docker 파일을 만들고, 이를 로컬에서 테스트하기 위해 Docker Desktop을 사용합니다. 이 단계에서는 레거시 애플리케이션이 이미 온프레미스 또는 Amazon Elastic Compute Cloud(Amazon EC2) Windows 인스턴스에서 실행 중이라고 가정합니다. 자세한 내용은 [Amazon EC2 Linux 인스턴스에서 ASP.NET Core 웹 API Docker 컨테이너 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html) 패턴을 참조하세요.

1. 현대화된 ASP.NET Core 애플리케이션을 Amazon Elastic Container Service(Amazon ECS)에 배포합니다. 이 패턴은 배포 단계를 다루지 않습니다. 지침은 [Amazon ECS 워크숍](https://ecsworkshop.com/)을 참조하세요.

**참고**  
이 패턴에는 UI 개발, 데이터베이스 현대화 또는 컨테이너 배포 단계가 포함되지 않습니다.

## 사전 조건 및 제한 사항
<a name="modernize-asp-net-web-forms-applications-on-aws-prereqs"></a>

**사전 조건 **
+ [Visual Studio](https://visualstudio.microsoft.com/downloads/) 또는 [Visual Studio Code](https://code.visualstudio.com/download), 다운로드 및 설치됨.
+ AWS Management Console 및 AWS Command Line Interface(AWS CLI) 버전 2를 사용하여 AWS 계정에 액세스합니다. ([AWS CLI 구성 지침](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)을 참조하세요.)
+ AWS Toolkit for Visual Studio([설정 지침](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/setup.html)을 참조).
+ Docker Desktop, [다운로드](https://www.docker.com/products/docker-desktop) 및 설치됨.
+ .NET SDK, [다운로드](https://download.visualstudio.microsoft.com/download/pr/4263dc3b-dc67-4f11-8d46-cc0ae86a232e/66782bbd04c53651f730b2e30a873f18/dotnet-sdk-5.0.203-win-x64.exe) 및 설치됨.
+ NDepend 도구, [다운로드](https://www.ndepend.com/download) 및 설치됨. Visual Studio용 NDepend 확장 프로그램을 설치하려면 `NDepend.VisualStudioExtension.Installer`를 실행합니다([지침 참조](https://www.ndepend.com/docs/getting-started-with-ndepend#Part1)). 필요에 따라 Visual Studio 2019 또는 2022를 선택할 수 있습니다. 
+ Porting Assistant for .NET, [다운로드](https://aws.amazon.com/porting-assistant-dotnet/) 및 설치됨.

## 아키텍처
<a name="modernize-asp-net-web-forms-applications-on-aws-architecture"></a>

**쇼핑 카트 애플리케이션 현대화**

다음 다이어그램은 기존 ASP.NET 쇼핑 카트 애플리케이션의 현대화 프로세스를 보여줍니다.

![\[레거시 쇼핑 카트 애플리케이션의 현대화\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36cda8e6-f2cb-4f1a-b37f-fa3045cc5ba1/images/4367e259-9bb3-4eb6-a54d-1c1e2dece7d4.png)


**대상 아키텍처**

다음 다이어그램은 AWS에서 현대화된 쇼핑 카트 애플리케이션의 아키텍처를 보여 줍니다. ASP.NET Core 웹 API는 Amazon ECS 클러스터에 배포됩니다. 로깅 및 구성 서비스는 Amazon CloudWatch Logs 및 AWS Systems Manager에서 제공합니다.

![\[AWS의 ASP.NET Web Forms 애플리케이션을 위한 대상 아키텍처\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/images/pattern-img/36cda8e6-f2cb-4f1a-b37f-fa3045cc5ba1/images/ed6d65ec-0dc9-43ab-ac07-1f172e089399.png)


## 도구
<a name="modernize-asp-net-web-forms-applications-on-aws-tools"></a>

**서비스**
+ [Amazon ECS](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/Welcome.html) – Amazon Elastic Container Service(Amazon ECS)는 클러스터에서 컨테이너를 실행, 중지 및 관리하기 위한 컨테이너 관리 서비스로서 확장성과 속도가 뛰어납니다. AWS Fargate에서 관리하는 서버리스 인프라에서 작업 및 서비스를 실행할 수 있습니다. 또는 인프라에 대한 더 세부적인 제어를 위해 관리하는 EC2 인스턴스의 클러스터에서 작업과 서비스를 실행할 수 있습니다.
+ [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) – Amazon CloudWatch Logs로 사용하는 모든 시스템, 애플리케이션 및 AWS 서비스의 로그를 중앙 집중화할 수 있습니다. 그런 다음 로그를 보고, 특정 오류 코드 또는 패턴이 있는지 검색하고, 특정 필드를 기반으로 필터링하거나, 향후 분석을 위해 안전하게 보관할 수 있습니다.
+ [AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html) ─ AWS Systems Manager는 AWS에서 인프라를 보고 제어하기 위해 사용할 수 있는 AWS 서비스입니다. Systems Manager 콘솔을 사용하여 여러 AWS 서비스의 운영 데이터를 보고 AWS 리소스에서 운영 작업을 자동화할 수 있습니다. Systems Manager는 관리형 인스턴스를 검사하고 탐지된 정책 위반을 보고(또는 시정 조치)함으로써 보안 및 규정 준수를 유지하는 데 도움이 됩니다.

**도구**
+ [Visual Studio](https://visualstudio.microsoft.com/) 또는 [Visual Studio Code](https://code.visualstudio.com/) – .NET 애플리케이션, 웹 API 및 기타 프로그램을 구축하기 위한 도구.
+ [AWS Toolkit for Visual Studio](https://docs.aws.amazon.com/toolkit-for-visual-studio/latest/user-guide/welcome.html) – AWS 서비스를 사용하는 .NET 애플리케이션을 개발, 디버깅 및 배포하는 데 도움이 되는 Visual Studio용 확장 프로그램.
+ [Docker Desktop](https://www.docker.com/products/docker-desktop) – 컨테이너식 애플리케이션의 구축 및 배포를 간소화하는 도구.
+ [NDepend](https://www.ndepend.com/features/) – .NET 코드를 모니터링하여 종속성, 품질 문제 및 코드 변경을 모니터링하는 분석기.
+ [Porting Assistant for .NET](https://aws.amazon.com/porting-assistant-dotnet/) – .NET 코드를 스캔하여 .NET Core와의 비호환성을 식별하고 마이그레이션 노력을 추정하는 분석 도구.

## 에픽
<a name="modernize-asp-net-web-forms-applications-on-aws-epics"></a>

### 레거시 애플리케이션을 .NET 5 이상 버전으로 포팅
<a name="port-your-legacy-application-to-net-5-or-later-version"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| .NET 프레임워크 레거시 애플리케이션을 .NET 5로 업그레이드하세요. | Porting Assistant for .NET를 사용하여 기존 ASP.NET Web Forms 애플리케이션을 .NET 5 이상으로 변환할 수 있습니다. [Porting Assistant for .NET](https://docs.aws.amazon.com/portingassistant/latest/userguide/porting-assistant-getting-started.html)의 지침을 따르세요. | 앱 개발자 | 
| NDepend 보고서를 생성하세요. | ASP.NET Web Forms 애플리케이션을 마이크로서비스로 분해하여 현대화하는 경우, 기존 애플리케이션의 일부 .cs 파일이 필요하지 않을 수 있습니다. NDepend를 사용하여 모든 코드 숨김(.cs) 파일에 대한 보고서를 생성하여 모든 호출자와 수신자를 가져올 수 있습니다. 이 보고서를 사용하면 마이크로서비스에서 필요한 파일만 식별하여 사용할 수 있습니다.NDepend를 설치한 후([필수 구성 요소](#modernize-asp-net-web-forms-applications-on-aws-prereqs) 섹션 참조) Visual Studio에서 기존 애플리케이션의 솔루션(.sln 파일)을 열고 다음 단계를 따르세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)이 프로세스는 모든 발신자와 수신자를 나열하는 코드 숨김 파일에 대한 보고서를 생성합니다. 종속성 그래프에 대한 자세한 내용은 [NDepend 설명서](https://www.ndepend.com/docs/visual-studio-dependency-graph)를 참조하세요. | 앱 개발자 | 
| 새 .NET 5 솔루션을 생성합니다. | 현대화된 ASP.NET Core 웹 API를 위한 새 .NET 5(또는 그 이상) 구조를 만들려면 다음을 따르세요.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)프로젝트 및 솔루션 만들기에 대한 자세한 내용은 [Visual Studio 설명서](https://docs.microsoft.com/en-us/visualstudio/ide/creating-solutions-and-projects)를 참조하세요.솔루션을 구축하고 기능을 확인하면서 NDepend가 식별한 파일 외에도 솔루션에 추가할 몇 가지 추가 파일을 식별할 수 있습니다. | 앱 개발자 | 

### 애플리케이션 코드를 업데이트
<a name="update-your-application-code"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| ASP.NET Core를 사용하여 웹 API 구현. | 기존 모놀리스 쇼핑 카트 애플리케이션에서 식별한 마이크로서비스 중 하나가 *제품*이라고 가정해 보겠습니다. 이전 에픽에서 새 *제품*을 위한 새 ASP.NET Core 웹 API 프로젝트를 만들었습니다. 이 단계에서는 *제품*과 관련된 모든 웹 양식(.aspx 페이지)을 식별하고 현대화합니다. 앞서 [아키텍처](#modernize-asp-net-web-forms-applications-on-aws-architecture) 섹션에서 설명한 것처럼 *제품*이 네 개의 웹 양식으로 구성되어 있다고 가정해 보겠습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)각 웹 양식을 분석하고, 데이터베이스로 전송된 모든 요청을 식별하여 로직을 수행하고, 응답을 받아야 합니다. 각 요청을 웹 API 엔드포인트로 구현할 수 있습니다. 웹 양식이 주어지면 *제품*에는 다음과 같은 엔드포인트가 있을 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)앞서 언급한 것처럼 비즈니스 로직, 데이터 액세스, 공유/공통 프로젝트를 포함하여 .NET 5로 업그레이드한 다른 모든 프로젝트도 재사용할 수 있습니다. | 앱 개발자 | 
| Amazon CloudWatch Logs를 구성합니다. | [Amazon CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html)를 사용하여 애플리케이션의 로그를 모니터링, 저장 및 액세스할 수 있습니다. AWS SDK를 사용하여 Amazon CloudWatch Logs에 데이터를 로깅할 수 있습니다. 또한 [NLog](https://www.nuget.org/packages/AWS.Logger.NLog/), [Log4Net](https://www.nuget.org/packages/AWS.Logger.Log4net/) 및 [ASP.NET Core 로깅 프레임워크](https://www.nuget.org/packages/AWS.Logger.AspNetCore/)와 같이 널리 사용되는 .NET 로깅 프레임워크를 사용하여 .NET 애플리케이션을 CloudWatch Logs와 통합할 수 있습니다.이 단계에 대한 자세한 내용은 블로그 게시물인 [Amazon CloudWatch Logs 및 .NET 로깅 프레임워크](https://aws.amazon.com/blogs/developer/amazon-cloudwatch-logs-and-net-logging-frameworks/)를 참조하세요. | 앱 개발자 | 
| AWS Systems Manager Parameter Store를 구성합니다. | [AWS Systems Manager Parameter Store](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html)를 사용하여 연결 문자열과 같은 애플리케이션 설정을 애플리케이션 코드와는 별도로 저장할 수 있습니다. NuGet 패키지 [Amazon.Extensions.Configuration.SystemsManager](https://www.nuget.org/packages/Amazon.Extensions.Configuration.SystemsManager/)는 애플리케이션이 AWS Systems Manager Parameter Store에서 .NET Core 구성 시스템으로 이러한 설정을 로드하는 방법을 단순화합니다. 이 단계에 대한 자세한 내용은 블로그 게시물 [AWS Systems Manager용 .NET Core 구성 공급자](https://aws.amazon.com/blogs/developer/net-core-configuration-provider-for-aws-systems-manager/)를 참조하세요. | 앱 개발자 | 

### 인증 및 권한 부여를 추가
<a name="add-authentication-and-authorization"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| 인증을 위해 공유 쿠키를 사용하세요. | 레거시 모놀리스 애플리케이션을 현대화하는 것은 반복적인 프로세스이므로 모놀리스와 현대화된 버전이 공존해야 합니다. 공유 쿠키를 사용하여 두 버전 간에 원활한 인증을 수행할 수 있습니다. 현대화된 ASP.NET Core 애플리케이션이 쿠키의 유효성을 검사하는 동안 기존 ASP.NET 애플리케이션은 계속해서 사용자 보안 인증 정보를 확인하고 쿠키를 발행합니다. 지침 및 샘플 코드는 [샘플 GitHub 프로젝트](https://github.com/aws-samples/dotnet-share-auth-cookie-between-monolith-and-modernized-apps)를 참조하세요. | 앱 개발자 | 

### 로컬에서 컨테이너 구축 및 실행
<a name="build-and-run-the-container-locally"></a>


| 작업 | 설명 | 필요한 기술 | 
| --- | --- | --- | 
| Visual Studio를 사용하여 도커 이미지를 생성합니다. | 이 단계에서는 .NET Core 웹 API용 Visual Studio를 사용하여 Docker 파일을 만듭니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html)Visual Studio가 프로젝트에 사용할 Docker 파일을 만듭니다. 샘플 Docker 파일은 Microsoft 웹 사이트의 [Docker용 Visual Studio 컨테이너 도구](https://docs.microsoft.com/en-us/visualstudio/containers/overview)를 참조하세요. | 앱 개발자 | 
| Docker Desktop을 사용하여 컨테이너를 구축하고 실행합니다. | 이제 Docker Desktop에서 컨테이너를 구축, 생성 및 실행할 수 있습니다.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/prescriptive-guidance/latest/patterns/modernize-asp-net-web-forms-applications-on-aws.html) | 앱 개발자 | 

## 관련 리소스
<a name="modernize-asp-net-web-forms-applications-on-aws-resources"></a>
+ [Amazon EC2 Linux 인스턴스에서 ASP.NET Core 웹 API Docker 컨테이너 실행](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/run-an-asp-net-core-web-api-docker-container-on-an-amazon-ec2-linux-instance.html)(AWS 권장 가이드)
+ [Amazon ECS 워크숍](https://ecsworkshop.com/)
+ [AWS CloudFormation을 사용하여 CodeDeploy를 통한 ECS 블루/그린 배포 수행](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/blue-green.html)(AWS CloudFormation 설명서)
+ [NDepend 시작하기](https://www.ndepend.com/docs/getting-started-with-ndepend)(NDepend 설명서)
+ [Porting Assistant for .NET](https://aws.amazon.com/porting-assistant-dotnet/)

## 추가 정보
<a name="modernize-asp-net-web-forms-applications-on-aws-additional"></a>

다음 테이블에는 기존 쇼핑 카트 애플리케이션의 샘플 프로젝트 예제와 현대화된 ASP.NET Core 애플리케이션의 해당 프로젝트가 나와 있습니다.

**레거시 솔루션:**


| 
| 
| 프로젝트 이름 | 프로젝트 템플릿 | 대상 프레임워크 | 
| --- |--- |--- |
| 비즈니스 인터페이스  | 클래스 라이브러리  | .NET Framework  | 
| BusinessLogic  | 클래스 라이브러리  | .NET Framework  | 
| WebApplication  | ASP.NET 프레임워크 웹 애플리케이션  | .NET Framework  | 
| UnitTests  | NUnit 테스트 프로젝트  | .NET Framework  | 
| 공유 ->공통  | 클래스 라이브러리  | .NET Framework  | 
| 공유 ->프레임워크  | 클래스 라이브러리  | .NET Framework  | 

**새 솔루션:**


| 
| 
| 프로젝트 이름 | 프로젝트 템플릿 | 대상 프레임워크 | 
| --- |--- |--- |
| BusinessLogic  | 클래스 라이브러리  | .NET 5.0  | 
| <WebAPI>  | ASP.NET 코어 웹 API  | .NET 5.0  | 
| <WebAPI>.UnitTests  | NUnit 3 테스트 프로젝트  | .NET 5.0  | 
| 공유 ->공통  | 클래스 라이브러리  | .NET 5.0  | 
| 공유 ->프레임워크  | 클래스 라이브러리  | .NET 5.0  | 