웹 팜에 ASP.NET Core 호스트Host ASP.NET Core in a web farm

작성자: Luke LathamChris RossBy Luke Latham and Chris Ross

‘웹 팜’은 여러 앱 인스턴스를 호스트하는 둘 이상의 웹 서버(또는 ‘노드’)의 그룹입니다.A web farm is a group of two or more web servers (or nodes) that host multiple instances of an app. 사용자의 요청이 웹 팜에 도착하면 ‘부하 분산 장치’가 요청을 웹 팜의 노드에 배포합니다.When requests from users arrive to a web farm, a load balancer distributes the requests to the web farm's nodes. 웹 팜은 다음을 개선합니다.Web farms improve:

  • 안정성/가용성 – 하나 이상의 노드가 실패하면 부하 분산 장치는 요청을 다른 작동 노드로 라우팅하여 요청 처리를 계속할 수 있습니다.Reliability/availability – When one or more nodes fail, the load balancer can route requests to other functioning nodes to continue processing requests.
  • 용량/성능 – 여러 노드가 단일 서버보다 더 많은 요청을 처리할 수 있습니다.Capacity/performance – Multiple nodes can process more requests than a single server. 부하 분산 장치는 노드에 요청을 배포하여 워크로드를 분산합니다.The load balancer balances the workload by distributing requests to the nodes.
  • 확장성 – 더 많거나 더 적은 용량이 필요할 경우 워크로드에 맞게 활성 노드 수가 증가하거나 감소할 수 있습니다.Scalability – When more or less capacity is required, the number of active nodes can be increased or decreased to match the workload. Azure App Service와 같은 웹 팜 플랫폼 기술은 시스템 관리자의 요청 시 또는 사용자 개입 없이 자동으로 노드를 자동으로 추가하거나 제거할 수 있습니다.Web farm platform technologies, such as Azure App Service, can automatically add or remove nodes at the request of the system administrator or automatically without human intervention.
  • 유지 관리 – 웹 팜의 노드는 공유 서비스 집합을 사용하므로 시스템을 더 쉽게 관리할 수 있습니다.Maintainability – Nodes of a web farm can rely on a set of shared services, which results in easier system management. 예를 들어 웹 팜의 노드는 단일 데이터베이스 서버 및 정적 리소스(예: 이미지 및 다운로드 가능한 파일)의 일반 네트워크 위치를 사용할 수 있습니다.For example, the nodes of a web farm can rely upon a single database server and a common network location for static resources, such as images and downloadable files.

이 항목에서는 공유 리소스를 사용하는 웹 팜에 호스트된 ASP.NET Core 앱의 구성 및 종속성을 설명합니다.This topic describes configuration and dependencies for ASP.NET core apps hosted in a web farm that rely upon shared resources.

일반 구성General configuration

ASP.NET Core 호스트 및 배포
호스팅 환경을 설정하고 ASP.NET Core 앱을 배포하는 방법을 알아봅니다.Learn how to set up hosting environments and deploy ASP.NET Core apps. 웹 팜의 각 노드에서 프로세스 관리자를 구성하여 앱 시작 및 다시 시작을 자동화합니다.Configure a process manager on each node of the web farm to automate app starts and restarts. 각 노드에는 ASP.NET Core 런타임이 필요합니다.Each node requires the ASP.NET Core runtime. 자세한 내용은 문서의 호스트 및 배포 영역에 있는 항목을 참조하세요.For more information, see the topics in the Host and deploy area of the documentation.

프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성
중요한 요청 정보를 종종 숨기는 프록시 서버 및 부하 분산 장치 뒤에 호스트되는 앱의 구성에 대해 알아봅니다.Learn about configuration for apps hosted behind proxy servers and load balancers, which often obscure important request information.

Azure App Service에 ASP.NET Core 앱 배포
Azure App Service는 ASP.NET Core를 비롯한 웹앱을 호스트하기 위한 Microsoft 클라우드 컴퓨팅 플랫폼 서비스입니다.Azure App Service is a Microsoft cloud computing platform service for hosting web apps, including ASP.NET Core. App Service는 자동 크기 조정, 부하 분산, 패치 적용 및 지속적인 배포를 제공하는 완전히 관리되는 플랫폼입니다.App Service is a fully managed platform that provides automatic scaling, load balancing, patching, and continuous deployment.

앱 데이터App data

앱이 여러 인스턴스로 확장되는 경우 노드 간에 앱 상태를 공유해야 할 수 있습니다.When an app is scaled to multiple instances, there might be app state that requires sharing across nodes. 일시적 상태인 경우 IDistributedCache를 공유하는 것이 좋습니다.If the state is transient, consider sharing an IDistributedCache. 공유 상태에 지속성이 필요한 경우 데이터베이스에 공유 상태를 저장하는 것이 좋습니다.If the shared state requires persistence, consider storing the shared state in a database.

필수 구성Required configuration

데이터 보호 및 캐싱에는 웹 팜에 배포된 앱에 대한 구성이 필요합니다.Data Protection and Caching require configuration for apps deployed to a web farm.

데이터 보호Data Protection

ASP.NET Core 데이터 보호 시스템은 앱에서 데이터를 보호하는 데 사용됩니다.The ASP.NET Core Data Protection system is used by apps to protect data. 데이터 보호에는 ‘키 링’에 저장된 암호화 키 집합을 사용합니다.Data Protection relies upon a set of cryptographic keys stored in a key ring. 데이터 보호 시스템이 초기화되면 키 링을 로컬로 저장하는 기본 설정을 적용합니다.When the Data Protection system is initialized, it applies default settings that store the key ring locally. 기본 구성에서는 고유 키 링이 웹 팜의 각 노드에 저장됩니다.Under the default configuration, a unique key ring is stored on each node of the web farm. 따라서 각 웹 팜 노드는 다른 노드의 앱으로 암호화된 데이터를 암호 해독할 수 없습니다.Consequently, each web farm node can't decrypt data that's encrypted by an app on any other node. 일반적으로 웹 팜에서 앱을 호스트하는 경우에는 기본 구성이 적합하지 않습니다.The default configuration isn't generally appropriate for hosting apps in a web farm. 공유 키 링을 구현하는 대신 항상 사용자 요청을 동일한 노드로 라우팅할 수 있습니다.An alternative to implementing a shared key ring is to always route user requests to the same node. 웹 팜 배포의 데이터 보호 시스템 구성에 대한 자세한 내용은 ASP.NET Core 데이터 보호를 구성 합니다.를 참조하세요.For more information on Data Protection system configuration for web farm deployments, see ASP.NET Core 데이터 보호를 구성 합니다..

캐싱Caching

웹 팜 환경에서 캐싱 메커니즘은 웹 팜의 노드에서 캐시된 항목을 공유해야 합니다.In a web farm environment, the caching mechanism must share cached items across the web farm's nodes. 캐싱은 일반적인 Redis 캐시, 공유 SQL Server 데이터베이스 또는 웹 팜에서 캐시된 항목을 공유하는 사용자 지정 캐싱 구현을 사용해야 합니다.Caching must either rely upon a common Redis cache, a shared SQL Server database, or a custom caching implementation that shares cached items across the web farm. 자세한 내용은 ASP.NET Core의 캐싱 분산을 참조하세요.For more information, see ASP.NET Core의 캐싱 분산.

종속 구성 요소Dependent components

다음 시나리오에서는 추가 구성이 필요하지 않지만 웹 팜 구성이 필요한 기술을 사용합니다.The following scenarios don't require additional configuration, but they depend on technologies that require configuration for web farms.

시나리오Scenario … 사용Depends on …
인증Authentication 데이터 보호(ASP.NET Core 데이터 보호를 구성 합니다. 참조).Data Protection (see ASP.NET Core 데이터 보호를 구성 합니다.).

자세한 내용은 ASP.NET Core Id 없이 쿠키 인증 사용ASP.NET 앱 간에 공유 인증 쿠키를 참조하세요.For more information, see ASP.NET Core Id 없이 쿠키 인증 사용 and ASP.NET 앱 간에 공유 인증 쿠키.
클레임Identity 인증 및 데이터베이스 구성.Authentication and database configuration.

자세한 내용은 ASP.NET Core Identity 소개을 참조하세요.For more information, see ASP.NET Core Identity 소개.
세션Session 데이터 보호(암호화된 쿠키)(ASP.NET Core 데이터 보호를 구성 합니다. 참조) 및 캐싱(ASP.NET Core의 캐싱 분산 참조).Data Protection (encrypted cookies) (see ASP.NET Core 데이터 보호를 구성 합니다.) and Caching (see ASP.NET Core의 캐싱 분산).

자세한 내용은 세션 및 앱 상태: 세션 상태를 참조하세요.For more information, see Session and app state: Session state.
TempDataTempData 데이터 보호(암호화된 쿠키)(ASP.NET Core 데이터 보호를 구성 합니다. 참조) 또는 세션(세션 및 앱 상태: 세션 상태 참조).Data Protection (encrypted cookies) (see ASP.NET Core 데이터 보호를 구성 합니다.) or Session (see Session and app state: Session state).

자세한 내용은 세션 및 앱 상태: TempData를 참조하세요.For more information, see Session and app state: TempData.
위조 방지Anti-forgery 데이터 보호(ASP.NET Core 데이터 보호를 구성 합니다. 참조).Data Protection (see ASP.NET Core 데이터 보호를 구성 합니다.).

자세한 내용은 ASP.NET Core에서 방지 교차 사이트 요청 위조 (XSRF/CSRF) 공격을 참조하세요.For more information, see ASP.NET Core에서 방지 교차 사이트 요청 위조 (XSRF/CSRF) 공격.

문제 해결Troubleshoot

데이터 보호 및 캐싱Data Protection and caching

데이터 보호 또는 캐싱이 웹 팜 환경에 맞게 구성되어 있지 않으면 요청을 처리할 때 간헐적인 오류가 발생합니다.When Data Protection or caching isn't configured for a web farm environment, intermittent errors occur when requests are processed. 이 오류의 원인은 노드가 동일한 리소스를 공유하지 않고 사용자 요청이 항상 동일한 노드로 다시 라우팅되지는 않기 때문입니다.This occurs because nodes don't share the same resources and user requests aren't always routed back to the same node.

쿠키 인증을 사용하여 앱에 로그인하는 사용자를 가정해 보겠습니다.Consider a user who signs into the app using cookie authentication. 사용자는 하나의 웹 팜 노드에서 앱에 로그인합니다.The user signs into the app on one web farm node. 다음 요청이 사용자가 로그인한 동일한 노드에 도착하면 앱은 인증 쿠키를 암호 해독할 수 있고 앱의 리소스에 액세스할 수 있습니다.If their next request arrives at the same node where they signed in, the app is able to decrypt the authentication cookie and allows access to the app's resource. 다음 요청이 다른 노드에 도착하면 앱은 사용자가 로그인한 노드의 인증 쿠키를 암호 해독할 수 없으며 요청된 리소스에 대한 권한 부여가 실패합니다.If their next request arrives at a different node, the app can't decrypt the authentication cookie from the node where the user signed in, and authorization for the requested resource fails.

다음 증상 중 하나라도 간헐적으로 발생할 경우 일반적으로 웹 팜 환경에 대한 부적절한 데이터 보호 또는 캐싱 구성 문제로 추적됩니다.When any of the following symptoms occur intermittently, the problem is usually traced to improper Data Protection or caching configuration for a web farm environment:

  • 인증 중단 – 인증 쿠키가 잘못 구성되었거나 암호 해독할 수 없습니다.Authentication breaks – The authentication cookie is misconfigured or can't be decrypted. OAuth(Facebook, Microsoft, Twitter) 또는 OpenIdConnect 로그인이 “상관 관계 실패” 오류로 인해 실패합니다.OAuth (Facebook, Microsoft, Twitter) or OpenIdConnect logins fail with the error "Correlation failed."
  • 권한 부여 중단 – ID가 손실되었습니다.Authorization breaks – Identity is lost.
  • 세션 상태에서 데이터가 손실됩니다.Session state loses data.
  • 캐시된 항목이 사라집니다.Cached items disappear.
  • TempData가 실패합니다.TempData fails.
  • POST 실패 – 위조 방지 검사가 실패합니다.POSTs fail – The anti-forgery check fails.

웹 팜 배포의 데이터 보호 구성에 대한 자세한 내용은 ASP.NET Core 데이터 보호를 구성 합니다.를 참조하세요.For more information on Data Protection configuration for web farm deployments, see ASP.NET Core 데이터 보호를 구성 합니다.. 웹 팜 배포의 캐싱 구성에 대한 자세한 내용은 ASP.NET Core의 캐싱 분산를 참조하세요.For more information on caching configuration for web farm deployments, see ASP.NET Core의 캐싱 분산.

앱에서 데이터 얻기Obtain data from apps

웹 팜 앱이 요청에 응답할 수 있는 경우 터미널 인라인 미들웨어를 사용하여 앱에서 요청, 연결 및 추가 데이터를 가져옵니다.If the web farm apps are capable of responding to requests, obtain request, connection, and additional data from the apps using terminal inline middleware. 자세한 내용과 샘플 코드는 ASP.NET Core 프로젝트 문제 해결을 참조하세요.For more information and sample code, see ASP.NET Core 프로젝트 문제 해결.