ASP.NET Core 1.1 · 1부. 웹 개발 기초

ASP.NET Core란?

.NET 생태계에서의 자리와 용도입니다.

예상 학습 시간 12분 난이도 입문
개념 설명

.NET 안에서 어디에 있나

지금까지 작성한 것은 콘솔 프로그램이었습니다. 실행하면 위에서 아래로 한 번 돌고 끝납니다. 웹은 그렇지 않습니다. 프로그램이 켜진 채로 기다리다가 누군가 주소를 열면 그때 응답을 만들어 돌려주고, 다시 기다립니다.

ASP.NET Core 는 그 기다리는 일을 맡는 프레임워크입니다. .NET 위에 얹히는 여러 프레임워크 가운데 웹을 맡은 것이고, 같은 자리에 데스크톱을 맡는 것과 모바일을 맡는 것이 따로 있습니다.

  • .NET 런타임과 기본 라이브러리 — 어느 프레임워크를 사용하든 같습니다. 1부에서 4부까지 배운 문법과 컬렉션이 여기에 있습니다.
  • ASP.NET Core — HTTP 요청을 받고 응답을 돌려줍니다. 이 트랙이 다루는 것입니다.
  • Entity Framework Core — 데이터베이스와 주고받습니다. 웹과 짝을 이루어 자주 함께 사용하지만 별개입니다(3부).

이름이 비슷한 ASP.NET(Core 가 붙지 않은 것)은 2002년에 나온 다른 프레임워크입니다. 윈도우와 IIS 위에서만 돌았고 지금은 고쳐지지 않습니다. ASP.NET Core 는 2016년에 처음부터 다시 만든 것이라 이름만 이어받았습니다. 인터넷에서 예제를 찾을 때 이 둘이 섞여 나오므로 구분해서 봐야 합니다.

최소 예제

네 줄로 서버 하나

아래가 동작하는 웹 서버의 전부입니다. 터미널에서 dotnet new web -o HelloWeb 로 만들면 Program.cs 에 이것과 거의 같은 내용이 들어 있습니다.

Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "안녕하세요.");

app.Run();
터미널
$ dotnet run Now listening on: http://localhost:5227 Application started. Press Ctrl+C to shut down.

이 단원은 브라우저에서 실행할 수 없습니다. 서버를 띄워 요청을 기다리는 프로그램이라 여러분의 터미널에서 돌려야 합니다.

실행한 뒤 브라우저에서 그 주소를 열면 안녕하세요. 가 보입니다. 네 줄이 하는 일은 이렇습니다.

  • CreateBuilder — 설정과 로그, 나중에 사용할 서비스를 담을 자리를 갖춥니다.
  • Build — 갖춘 것으로 앱을 만듭니다. 이 뒤로는 서비스를 추가하지 않습니다.
  • MapGet — 어느 주소로 GET 요청이 오면 무엇을 돌려줄지 잇습니다.
  • Run — 서버를 켜고 기다립니다. Ctrl+C 를 누를 때까지 이 줄에서 돌아오지 않습니다.
상세 사용법

무엇을 맡고 무엇을 맡지 않나

웹 프로그램을 만들 때 되풀이되는 일은 정해져 있습니다. ASP.NET Core 는 그것들을 미리 갖춰 두고, 우리가 할 일만 남깁니다.

맡는 것하는 일
호스팅Kestrel 이라는 서버가 안에 들어 있어 IIS 없이도 요청을 받습니다.
라우팅주소를 보고 어느 코드를 부를지 정합니다(2부).
모델 바인딩요청에 실려 온 값을 형식에 담고 옳은지 봅니다(2부).
의존성 주입필요한 것을 만들어 넣어 줍니다. 밖에서 new 하지 않습니다.
인증·인가누구인지 확인하고 무엇을 할 수 있는지 정합니다(4부).
설정·로깅환경마다 다른 값을 읽고 기록을 남깁니다(4부·5부).

반대로 맡지 않는 것도 분명합니다. 데이터베이스 접근은 EF Core 같은 다른 것이 맡고, 화면 디자인과 배포도 밖의 일입니다. 웹 프레임워크가 이 모두를 안고 있으면 하나를 바꿀 때 전부가 흔들리기 때문입니다.

만드는 방식이 여럿입니다

같은 ASP.NET Core 위에서도 목적에 따라 만드는 방식이 나뉩니다. 이 트랙은 앞의 둘을 다룹니다.

방식돌려주는 것다루는 곳
Minimal API데이터(JSON)2.1
MVC데이터 또는 화면(HTML)2.2 ~ 2.5
Razor Pages화면 하나에 코드 하나를 짝지어 그립니다다루지 않습니다
Blazor브라우저 안에서 C# 을 실행합니다다루지 않습니다

지금 보고 계신 이 학습 사이트도 ASP.NET Core MVC 로 만들었고, 예제를 실행하는 부분은 Blazor 입니다. 한 사이트 안에 둘이 함께 있어도 됩니다.

버전 배지

어느 버전을 선택해야 하나

ASP.NET Core 10.0

ASP.NET Core 는 따로 버전을 매기지 않고 .NET 을 따라갑니다. .NET 10 이면 ASP.NET Core 10.0 이고, 해마다 11월에 함께 나옵니다. 그래서 C# 1.1에서 본 LTS 규칙이 그대로 적용됩니다. 짝수는 3년, 홀수는 18개월입니다.

버전을 올릴 때 손이 가장 많이 가는 자리는 Program.cs 입니다. .NET 6에서 최상위 문으로 바뀌면서 그 전의 Startup.cs 가 사라졌기 때문입니다. 인터넷 예제에 ConfigureServicesConfigure 라는 메서드가 보이면 .NET 5 이전의 것입니다.

실습 문제

직접 해보기

1. 웹 프로젝트 만들어 띄우기 난이도 하

터미널에서 웹 프로젝트를 하나 만들고 실행한 뒤, 터미널에 찍힌 주소를 브라우저로 열어보세요.

콘솔은 dotnet new console 이었습니다. 웹은 뒤의 이름만 다릅니다.
dotnet new web -o HelloWeb cd HelloWeb dotnet run # 터미널에 찍힌 http://localhost:… 를 브라우저로 엽니다
2. 주소 하나 추가하기 난이도 중

/hello 를 열면 자기 이름이 나오도록 줄 하나를 추가해보세요. 고친 뒤에는 실행을 멈추고 다시 시작해야 반영됩니다.

이미 있는 app.MapGet("/", …) 아래에 같은 모양으로 한 줄을 추가합니다. 첫 인수가 주소입니다.
app.MapGet("/", () => "안녕하세요."); app.MapGet("/hello", () => "홍길동입니다.");
요약
  • 콘솔 프로그램은 한 번 돌고 끝나지만, 웹은 켜진 채로 요청을 기다립니다.
  • ASP.NET Core 는 .NET 위에서 웹을 맡는 프레임워크이고, 이름만 같은 옛 ASP.NET 과는 다릅니다.
  • 서버(Kestrel)가 안에 들어 있어 app.Run() 한 줄로 켜집니다.
  • 버전은 .NET 을 그대로 따라갑니다. 지금 시작한다면 .NET 10(LTS) 입니다.