ASP.NET Core로 C# 웹 애플리케이션 만들기
웹 애플리케이션 개발은 현대 개발자에게 필수적인 기술이며, 프로젝트의 핵심 구조를 이해하는 것은 매우 중요합니다. 이 글은 Tim Corey의 " 웹 API 소개 " 영상에서 영감을 받아 ASP.NET Core 프레임워크를 사용하여 웹 앱을 구축하는 복잡한 과정을 자세히 살펴봅니다.
Tim의 통찰력을 따라가면서 ASP.NET Core 프레임워크의 잠재력을 최대한 활용하여 효율적이고 유지보수 가능한 웹 페이지와 API를 구축하고 웹 애플리케이션을 설정, 구성 및 최적화하는 방법을 살펴보겠습니다. 웹 개발 초보자이든 기술을 연마하려는 분이든, 이 가이드는 복잡한 웹 개발 작업량을 헤쳐나가는 데 도움을 주고 효과적이고 고성능의 웹 애플리케이션을 구축하는 데 필요한 지식을 제공할 것입니다.
소개
팀 코리는 ASP .NET Core 사용하여 API를 만드는 주제를 소개하면서 튜토리얼을 시작합니다. 그는 견고하고 확장 가능한 웹 애플리케이션을 구축하기 위해 API 기본 사항을 이해하는 것이 중요하다고 강조합니다.
팀은 API가 현대 소프트웨어 개발에서 수행하는 중요한 역할을 설명하면서, Blazor 웹 서버와 Blazor 웹 어셈블리와 같은 다양한 웹 개발 프레임워크 간의 통신을 용이하게 한다는 점을 강조합니다. Razor Pages의 기본 프로젝트 유형조차도 ASP.NET Core 이므로 여러 프로젝트에서 다양한 기능을 원활하게 통합하여 웹 앱을 구축할 수 있습니다.
ASP.NET Core 웹 API 프로젝트 생성하기
먼저 Tim Corey가 새로운 ASP.NET Core 웹 API 프로젝트를 설정하는 방법을 보여줍니다. 다음은 그의 영상에 설명된 단계입니다.
Visual Studio 열기 : Visual Studio 설치 관리자를 열고 새 프로젝트 생성 옵션을 선택합니다.

API 템플릿 선택 : 프로젝트 템플릿에서 "ASP.NET Core Web API"를 선택하고 다음을 클릭합니다.

프로젝트 설정 구성 : 프로젝트 이름, 위치 및 솔루션 이름을 입력합니다.

추가 정보 : .NET Framework 선택하고 인증 유형을 선택하며, 다른 설정은 변경하지 않는 것이 좋습니다.

- 프로젝트 생성 : "생성"을 클릭하여 기본 설정과 필요한 코드가 포함된 프로젝트를 생성합니다.
이 설정은 API 개발을 탐색하기 위한 기반을 제공하며, Visual Studio는 Program.cs, controllers 폴더, appsettings.json과 같은 필수 구성 요소를 포함하는 기본 구조를 생성합니다.
기본 API 애플리케이션 개요
팀 코리의 비디오 5분 57초에서 그는 ASP.NET Core 에서 생성되는 기본 API 애플리케이션에 대한 개요를 제공합니다.
기본 애플리케이션 실행
팀은 개발자들이 기본적으로 제공받는 기능을 설명하기 위해 기본 애플리케이션을 실행하는 것으로 시작합니다. 프로젝트가 실행되면 API를 빌드하고 필요한 NuGet 패키지를 다운로드한 후 웹 페이지를 실행합니다. 이 초기 설정은 어떠한 수정도 없이 API의 기본 구조와 기능을 보여줍니다.

API와의 상호작용
실행되는 웹 페이지는 현재 OpenAPI로 알려진 Swagger를 기반으로 합니다. Swagger는 API와 상호 작용하기 위한 사용자 친화적인 인터페이스를 제공합니다. 이를 통해 개발자와 비개발자 모두 API 엔드포인트를 쉽게 이해하고 테스트할 수 있습니다. 이 인터페이스는 API 작동 방식을 시각화하고 문서화하는 데 특히 유용합니다.
스웨거 탐구하기
Swagger는 API에서 사용 가능한 엔드포인트를 보여줍니다. 기본 설정에서 미리 구성된 엔드포인트 중 하나는 "날씨 예보" 엔드포인트입니다. 이 엔드포인트를 클릭하고 "직접 사용해 보기" 기능을 사용하면 사용자는 API 호출을 실행하고 응답을 확인할 수 있습니다. 이 응답에는 JSON 형식의 날씨 예보가 포함되어 있으며, API에서 데이터가 반환되는 방식을 보여줍니다.
Tim은 8분 32초에 원시 JSON 데이터를 브라우저에서 직접 읽는 것은 어려울 수 있지만, Swagger의 문서 오버레이 덕분에 훨씬 더 이해하기 쉬워진다고 강조합니다. 문서에는 요청 메서드(GET, POST 등), 반환되는 데이터의 구조 및 필수 매개변수를 포함하여 엔드포인트에 대한 자세한 정보가 제공됩니다.
JSON 문서화 및 API 버전 관리
Swagger는 Tim이 9분 10초에 언급한 것처럼 API를 기계가 읽을 수 있는 형식으로 문서화하는 JSON 파일도 생성합니다. 이 문서는 사용 가능한 엔드포인트, 데이터 스키마 및 예상 응답을 설명하므로 API와 상호 작용해야 하는 다른 애플리케이션에 매우 중요합니다.
Tim은 9시 29분에 API 버전 관리의 중요성을 지적합니다. 기본 설정에는 버전 표시기가 포함되어 있어 여러 API 버전이 존재할 가능성을 암시합니다. 버전 관리는 하위 호환성을 유지하는 데 필수적입니다. API 변경으로 기존 클라이언트가 제대로 작동하지 않을 수 있는 경우, 여러 버전을 보유하면 개발자는 현재 사용자를 방해하지 않고 새로운 기능이나 변경 사항을 도입할 수 있습니다.
API란 무엇인가요?
11분 22초 지점에서 팀 코리는 현대 웹 개발에서 API(애플리케이션 프로그래밍 인터페이스)의 근본적인 역할에 대해 설명합니다. 그는 서로 다른 소프트웨어 구성 요소 간의 데이터 교환을 관리하고 보호하는 데 있어 이러한 요소들의 중요성을 강조합니다.
API의 목적
팀은 대부분의 애플리케이션이 데이터, 즉 데이터 검색, 조작 및 표시를 중심으로 이루어진다고 강조합니다. API는 사용자 인터페이스와 기본 데이터 사이의 중개자 역할을 하며, 안전하고 효율적인 데이터 접근 수단을 제공합니다. 이러한 중앙집중화는 여러 가지 이유로 매우 중요합니다.
보안 : API는 데이터 접근을 관리하는 안전한 방법을 제공합니다. 모바일 및 클라이언트 측 애플리케이션은 데이터베이스에 직접 연결해서는 안 됩니다. 클라이언트 코드에 데이터베이스 자격 증명을 포함시키면 심각한 보안 위험이 발생하기 때문입니다.
- 추상화 : API는 데이터 계층을 사용자 인터페이스에서 추상화하여 다양한 클라이언트 애플리케이션(모바일 앱, 웹 앱, 데스크톱 앱)이 데이터베이스나 자격 증명을 노출하지 않고도 동일한 데이터 소스와 상호 작용할 수 있도록 합니다.
다양한 프레임워크에서의 활용성
팀은 API가 특정 프레임워크나 언어에 국한되지 않는다고 지적합니다. 예를 들어, C# API는 Angular, React 또는 Vue와 같은 JavaScript 프레임워크에서 접근할 수 있으며, 이는 API의 크로스 플랫폼 기능을 보여줍니다.
API 웹 앱 코드 검토
15분 21초부터 팀 코리는 ASP.NET Core API 프로젝트의 구조와 기능에 대한 자세한 설명을 시작합니다. 다음은 API 웹 앱을 개발할 때 HTTP 서버 및 서버 측 기술을 다룰 때 이해해야 할 그의 설명에서 핵심적인 내용입니다.
1. Program.cs 개요
Tim은 Program.cs 파일을 검토하면서 이 파일이 웹 애플리케이션을 빌드하고 컨트롤러의 종속성 주입 및 Swagger(OpenAPI)와 같은 서비스를 구성한다는 점을 지적합니다. 이 코드는 애플리케이션을 빌드하고 실행하기 전에 필수 서비스를 설정합니다.
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();2. 환경 구성
Tim이 launchSettings.json에서 환경 설정이 구성되는 방법을 설명합니다. 기본 환경은 로컬 테스트를 위한 "개발"로 설정되어 있으며, Swagger가 활성화됩니다. 실제 운영 환경에서는 보안상의 이유로 Swagger가 일반적으로 비활성화되어 있지만, 개발 환경 검사를 제거하면 활성화할 수 있습니다.
{
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"WebApplication": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}3. HTTPS 리디렉션 및 컨트롤러
팀은 HTTPS 리디렉션과 컨트롤러 매핑에 대해 지적합니다. 이 설정을 통해 API 경로가 올바르게 구성됩니다. 그는 HTTP 요청 및 응답 경로의 명확성을 위해 "api" 접두사를 사용하는 것을 선호하며, API 경로가 서로 구별되도록 접두사를 수정할 수 있습니다.
4. 일기예보 관리자
Tim이 WeatherForecastController.cs을 자세히 살펴보고 경로 구성을 강조합니다. 기본 경로는 /weatherforecast이며, "api" 접두사를 포함하도록 수정할 수 있습니다. 컨트롤러는 HTTP GET 요청을 사용하여 데이터를 가져오며, 지정된 경로를 통해 해당 데이터에 접근할 수 있습니다.
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
}using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
}
}
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public string? Summary { get; set; }
}5. HTTP 동사 및 라우팅
팀은 HTTP 동사(GET, POST, PUT, DELETE)가 API 엔드포인트를 정의하는 방식을 설명합니다. GET 요청의 경우 브라우저는 컨트롤러에 지정된 메서드를 호출합니다. 다른 동사들을 테스트하려면 Postman과 같은 도구가 필요합니다.
API 컨트롤러 생성
Tim은 API 컨트롤러를 생성하는 과정을 시연합니다.
컨트롤러 추가 : "컨트롤러" 폴더를 마우스 오른쪽 버튼으로 클릭하고 "추가 > 컨트롤러"를 선택합니다.
API 컨트롤러 선택 : "API 컨트롤러 - 빈칸"을 선택하고 컨트롤러 이름을 입력합니다.

- 액션 정의 : 다양한 HTTP 요청을 처리하기 위해 컨트롤러 내에 액션을 구현합니다. Tim은 GET, POST, PUT, DELETE 메서드를 정의하는 방법을 보여주는 코드 예제를 제공합니다. 자세한 코드는 영상 26분 25초부터 참고하세요.
이 실습 데모는 개발자가 다양한 유형의 요청을 처리하기 위한 API 컨트롤러를 구축하고 구성하는 방법을 이해하는 데 도움이 됩니다.
REST API
팀 코리가 REST(Representational State Transfer)와 그 원리를 소개합니다.
REST란 무엇인가 : REST는 네트워크 애플리케이션 설계를 위한 아키텍처 스타일입니다. 이 프로토콜은 상태 비저장 통신에 의존하며 표준 HTTP 메서드(GET, POST, PUT, DELETE)를 사용하여 작업을 수행합니다.
RESTful 원칙 : RESTful API는 URL 패턴을 사용하여 리소스를 표현합니다. 예를 들어,
/users는 모든 사용자를 검색하며,/users/5는 ID가 5인 특정 사용자를 검색합니다.- REST 규정 준수 : 팀은 REST가 원래 이론적인 모델이었기 때문에 완전한 REST 규정 준수를 달성하는 것이 어려울 수 있다고 지적합니다. 하지만 REST 원칙을 준수하면 더욱 직관적이고 일관성 있는 API를 만들 수 있습니다.
팀은 REST API 규정 준수를 목표로 하되, 사용성과 기능성을 보장하기 위해 실질적인 고려 사항을 바탕으로 API를 설계해야 한다고 강조합니다.
최소 API 애플리케이션
코리는 ASP.NET Core 에서 API 개발을 위한 간소화된 접근 방식인 '미니멀 API'를 소개합니다.
최소 API 설정 : Tim은 프로젝트 설정 시 "컨트롤러 사용" 옵션을 선택 해제하여 최소 API 프로젝트를 만드는 방법을 보여줍니다.
간소화된 코드: 최소화된 API는 컨트롤러와 라우팅 속성의 필요성을 제거하여 개발자가
Program.cs에서app.MapGet(),app.MapPost()등의 메소드를 사용하여 직접 엔드포인트를 정의할 수 있게 합니다.- 코드 예시 : Tim은 단 한 줄의 코드로 엔드포인트를 정의하는 코드 예시를 제공합니다. 그는 최소한의 설정으로 GET 요청을 엔드포인트에 매핑하는 방법을 보여줍니다.
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Hosting;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();최소 API는 특히 소규모 애플리케이션이나 마이크로서비스의 개발을 단순화하도록 설계되었습니다.
최소한의 API를 사용하는 이유는 무엇일까요?
Tim은 최소 API의 이점에 대해 논의합니다.
새 프로젝트 생성 : Tim은 새 웹 API 프로젝트를 생성하지만 이번에는 추가 정보에서 컨트롤러 사용 옵션을 선택 해제합니다. 이를 통해 최소한의 API만 사용하는 프로젝트를 생성할 수 있습니다.

반복적인 코드 감소 : 최소한의 API는 컨트롤러 및 추가 라우팅 설정이 필요 없도록 하여 반복적인 코드의 양을 줄여줍니다.
단순성 : 간단한 API에 대해 보다 직관적인 접근 방식을 제공하여 코드를 더 쉽게 이해하고 유지 관리할 수 있도록 합니다.
- 마이크로서비스 : 최소한의 API는 마이크로서비스에 특히 유용합니다. 마이크로서비스의 API는 제한된 수의 작업만 수행하면 되고, 기존 컨트롤러의 모든 기능을 필요로 하지 않기 때문입니다.
Tim은 미니멀 API가 특정 시나리오에서는 유용하지만, 규모가 크거나 복잡한 애플리케이션에는 기존 컨트롤러가 더 적합할 수 있다는 점을 인정합니다.
모범 사례, 요약 및 최종 의견
팀 코리는 API 개발을 위한 모범 사례를 제시하며 튜토리얼을 마무리합니다.
관심사의 분리:
Program.cs또는 컨트롤러 액션에 비즈니스 로직을 직접 배치하지 않도록 합니다. 대신, 코드의 깔끔함을 유지하고 SOLID 원칙을 준수하기 위해 로직을 별도의 클래스 라이브러리나 서비스로 분리하십시오.API를 사용자 인터페이스로 활용하기: API를 사용자 인터페이스처럼 다루고, 직관적이고 문서화가 잘 되어 있도록 만드는 데 집중합니다. 팀은 명확한 문서화와 효과적인 API 설계의 중요성을 강조합니다.
Swagger 및 문서화 : API 문서화 및 버전 관리에 Swagger를 활용하십시오. 팀은 코드의 XML 주석을 사용하여 상세한 API 문서를 생성하는 방법을 설명합니다.
- 추가 고려 사항 : API 성능 및 보안을 향상시키기 위해 캐싱, 속도 제한 및 기타 요소를 고려하십시오.
팀은 개발자들이 다양한 프로젝트 유형과 도구를 탐색하도록 장려하며, API를 이해하고 현대 소프트웨어 개발에서 API의 역할을 파악하는 것의 중요성을 강조합니다.
결론
팀 코리의 비디오는 ASP.NET Core 에서 API를 생성하고 관리하는 방법에 대한 자세한 가이드를 제공하며, RESTful API 방식과 최소 API 방식 모두를 다룹니다. 그의 통찰력은 개발자들이 API 설계의 핵심을 이해하는 데 도움을 줄 뿐만 아니라 효과적인 솔루션을 구현하기 위한 실질적인 조언도 제공합니다.
C# 및 기타 프로젝트 유형에 대한 더 자세한 튜토리얼과 정보를 얻으려면 Tim Corey의 YouTube 채널인 IAmTimCorey를 방문하세요.


