ASP.NET Core란?
.NET 생태계에서의 자리와 용도입니다.
.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 에 이것과 거의 같은 내용이 들어 있습니다.
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "안녕하세요."); app.Run();
이 단원은 브라우저에서 실행할 수 없습니다. 서버를 띄워 요청을 기다리는 프로그램이라 여러분의 터미널에서 돌려야 합니다.
실행한 뒤 브라우저에서 그 주소를 열면 안녕하세요. 가 보입니다. 네 줄이 하는 일은 이렇습니다.
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 는 따로 버전을 매기지 않고 .NET 을 따라갑니다. .NET 10 이면 ASP.NET Core 10.0 이고, 해마다 11월에 함께 나옵니다. 그래서 C# 1.1에서 본 LTS 규칙이 그대로 적용됩니다. 짝수는 3년, 홀수는 18개월입니다.
버전을 올릴 때 손이 가장 많이 가는 자리는 Program.cs
입니다. .NET 6에서 최상위 문으로 바뀌면서 그 전의
Startup.cs 가 사라졌기 때문입니다. 인터넷 예제에
ConfigureServices 와
Configure 라는 메서드가 보이면 .NET 5 이전의
것입니다.
직접 해보기
터미널에서 웹 프로젝트를 하나 만들고 실행한 뒤, 터미널에 찍힌 주소를 브라우저로 열어보세요.
/hello 를 열면 자기 이름이 나오도록 줄 하나를 추가해보세요. 고친 뒤에는 실행을 멈추고 다시 시작해야 반영됩니다.
app.MapGet("/", …) 아래에 같은 모양으로 한 줄을 추가합니다. 첫 인수가 주소입니다.- 콘솔 프로그램은 한 번 돌고 끝나지만, 웹은 켜진 채로 요청을 기다립니다.
- ASP.NET Core 는 .NET 위에서 웹을 맡는 프레임워크이고, 이름만 같은 옛 ASP.NET 과는 다릅니다.
- 서버(Kestrel)가 안에 들어 있어
app.Run()한 줄로 켜집니다. - 버전은 .NET 을 그대로 따라갑니다. 지금 시작한다면 .NET 10(LTS) 입니다.