ASP.NET Core 기본 개요

등록일시: 2017-05-30 08:00,  수정일시: 2017-10-19 14:20
조회수: 5,521
이 문서는 ASP.NET Core 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.
본문에서는 ASP.NET Core 응용 프로그램의 가장 기본적인 개념들을 간단하게 살펴봅니다.

간단히 말해서 ASP.NET Core 응용 프로그램은 Main 메서드에서 웹 서버를 생성하는 콘솔 응용 프로그램입니다:

using System;
using Microsoft.AspNetCore.Hosting;

namespace aspnetcoreapp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}

Main 메서드는 빌더 패턴(Builder Pattern)을 따르는 WebHostBuilder 클래스를 이용해서 웹 응용 프로그램 호스트를 생성하는데, 이 빌더 클래스는 웹 서버를 정의하는 메서드나 (UseKestrel 등) 시작 클래스를 정의하는 메서드를 (UseStartup) 제공합니다. 예를 들어서, 위의 예제 코드는 Kestrel 웹 서버를 사용하고 있지만, 다른 웹 서버를 지정할 수도 있습니다. 참고로 UseStartup 확장 메서드에 관해서는 다음 문서에서 더 자세히 살펴봅니다. 그 밖에도 WebHostBuilder 클래스는 응용 프로그램을 IIS 및 IIS Express에서 호스팅하기 위한 UseIISIntegration 확장 메서드나, 루트 콘텐츠 디렉터리를 지정하기 위한 UseContentRoot 확장 메서드 같은 다양한 선택적 메서드를 제공합니다. 마지막으로 BuildRun 메서드는 응용 프로그램을 호스트하는 IWebHost 개체를 만들고 이를 실행해서 전달되는 HTTP 요청의 수신을 대기합니다.

Startup 클래스

WebHostBuilder 클래스가 제공하는 UseStartup 메서드는 응용 프로그램의 Startup 클래스를 지정합니다.

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

Startup 클래스는 요청 처리 파이프라인을 정의하는 장소이면서, 응용 프로그램에 필요한 모든 서비스가 구성되는 장소입니다. Startup 클래스는 public으로 지정되어야 하며 다음과 같은 메서드들을 제공해야 합니다:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
    }

    public void Configure(IApplicationBuilder app)
    {
    }
}
  • ConfigureServices 메서드에서는 응용 프로그램에서 사용되는 ASP.NET MVC Core 프레임워크, Entity Framework Core, Identity 같은 서비스를 정의합니다. (서비스 절 참고.)

  • Configure 메서드에서는 요청 파이프라인의 미들웨어를 정의합니다.

보다 자세한 정보는 응용 프로그램 Startup 클래스 문서를 참고하시기 바랍니다.

서비스

서비스는 응용 프로그램에서 공통적으로 사용되는 구성 요소입니다. 서비스는 의존성 주입(DI, Dependency Injection)을 통해서 사용할 수 있습니다. ASP.NET Core에는 생성자 주입을 기본으로 지원하는 간단한 내장 IoC (Inversion of Control) 컨테이너가 포함되어 있습니다. 물론 이 내장 컨테이너를 직접 선택한 컨테이너로 손쉽게 교체할 수도 있습니다. DI를 활용하면 느슨한 결합의 장점을 얻을 수 있을뿐만 아니라, 응용 프로그램 전체에서 서비스를 사용할 수 있습니다. 한 가지 예로, 응용 프로그램 전체에서 로깅을 사용할 수 있습니다.

보다 자세한 정보는 Dependency Injection 문서를 참고하시기 바랍니다.

미들웨어

ASP.NET Core에서는 미들웨어를 이용해서 요청 파이프라인을 구성합니다. ASP.NET Core의 미들웨어는 HttpContext 상에서 비동기 로직을 수행한 다음, 파이프라인의 다음 미들웨어를 호출하거나 바로 요청을 종료합니다. 일반적으로 미들웨어는 NuGet 패키지를 통해서 필요한 종속성을 가져온 다음, Configure 메서드에서 그에 해당하는 IApplicationBuilderUseXYZ 확장 메서드를 호출하는 방식으로 사용됩니다.

ASP.NET Core는 풍부한 내장 미들웨어 모음을 기본으로 제공합니다:

ASP.NET Core에서는 OWIN 기반의 모든 미들웨어를 사용할 수 있으며, 사용자 지정 미들웨어를 직접 작성할 수도 있습니다.

보다 자세한 정보는 미들웨어 문서와 Open Web Interface for .NET (OWIN) 문서를 참고하시기 바랍니다.

서버

ASP.NET Core의 호스팅 모델은 요청을 직접 수신하지 않습니다. 그 대신 응용 프로그램으로 요청을 전달해주는 HTTP 서버 구현에 의존합니다. 이렇게 전달된 요청은 응용 프로그램의 기능 인터페이스들의 모음으로 래핑된 다음, HttpContext로 구성됩니다. ASP.NET Core에는 일반적으로 IIS 또는 nginx 같은 운영 환경용 웹 서버의 뒷단에서 실행되는, Kestrel이라는 관리되는 크로스 플랫폼 웹 서버가 포함되어 있습니다.

보다 자세한 정보는 서버 문서와 호스팅 문서를 참고하시기 바랍니다.

콘텐츠 루트

콘텐츠 루트(Content Root)는 응용 프로그램의 뷰와 웹 콘텐츠 같은, 응용 프로그램에서 사용하는 모든 콘텐츠의 기본 경로입니다. 기본적으로 콘텐츠 루트는 응용 프로그램을 호스팅하는 실행 파일의 응용 프로그램 기본 경로와 동일하지만, WebHostBuilder 를 이용해서 다른 위치를 지정할 수도 있습니다.

웹 루트

응용 프로그램의 웹 루트(Web Root)는 css, js 및 이미지 파일 같은 공개된 정적 리소스에 대한 프로젝트의 디렉터리입니다. 기본적으로 정적 파일 미들웨어는 웹 루트 디렉터리 및 하위 디렉토리에 존재하는 파일들만 서비스합니다. 웹 루트 경로의 기본값은 <content-root>/wwwroot 지만 WebHostBuilder 를 이용해서 다른 위치를 지정할 수도 있습니다.

구성

ASP.NET Core는 간단한 이름-값 쌍을 처리하는 새로운 구성 모델을 사용합니다. 이 새로운 구성 모델은 System.Configuration 클래스나 web.config 파일 대신, 정렬된 구성 공급자 모음을 기반으로 합니다. 내장된 구성 공급자는 다양한 파일 형식 (XML, JSON, INI) 및 환경 변수를 지원함으로써 환경에 기반한 구성을 가능하게 만들어줍니다. 또한 사용자 지정 구성 공급자를 작성할 수도 있습니다.

보다 자세한 정보는 ASP.NET Core 구성하기 문서를 참고하시기 바랍니다.

환경

"Development" 및 "Production" 같은 환경(Environments)은 ASP.NET Core의 일급 개념으로, 환경 변수를 이용해서 설정할 수 있습니다.

보다 자세한 정보는 다양한 환경에서 작업하기 문서를 참고하시기 바랍니다.

.NET Core 대 .NET 프레임워크 런타임

ASP.NET Core 응용 프로그램은 .NET Core 또는 .NET 프레임워크 런타임을 사용할 수 있습니다. 보다 자세한 정보는 Choosing between .NET Core and .NET Framework 문서를 참고하시기 바랍니다.

추가 자료

다음 문서들을 함께 살펴보시기 바랍니다: