- 백엔드 프레임워크의 기능과 ASP.NET Core 예제
백엔드 프레임워크는 웹 애플리케이션의 서버 측 로직을 구현하는 데 필요한 도구와 기능을 제공합니다. 이 문서에서는 백엔드 프레임워크가 지원하는 주요 기능들을 소개하고, ASP.NET Core를 예시로 설명합니다.
클라이언트 요청을 적절한 컨트롤러와 액션 메서드로 라우팅합니다.
- 경로 매핑: URL 경로를 컨트롤러 메서드와 매핑.
- 동적 라우팅: 다양한 URL 패턴을 지원.
웹 애플리케이션의 주요 로직을 처리하는 컨트롤러와 액션 메서드를 제공합니다.
- 컨트롤러: 요청을 처리하고 응답을 생성하는 클래스.
- 액션 메서드: 컨트롤러 내에서 특정 요청을 처리하는 메서드.
클라이언트의 요청 데이터를 자동으로 모델 객체에 바인딩합니다.
- 폼 데이터: 폼 데이터를 모델 객체에 바인딩.
- 쿼리 스트링: URL의 쿼리 스트링 데이터를 모델 객체에 바인딩.
데이터베이스와의 상호작용을 위한 ORM(Object-Relational Mapping)을 지원합니다.
- Entity Framework Core: .NET용 ORM 프레임워크.
- LINQ: 데이터베이스 쿼리를 작성하기 위한 언어 통합 쿼리.
모델 데이터를 검증하는 유효성 검사 기능을 제공합니다.
- 데이터 주석: 모델 속성에 대한 유효성 검사 특성.
- 커스텀 유효성 검사: 사용자 정의 유효성 검사 로직.
객체 간의 의존성을 관리하고 주입하는 기능을 제공합니다.
- 서비스 등록: 의존성을 DI 컨테이너에 등록.
- 서비스 주입: 생성자 또는 메서드 주입을 통해 서비스 주입.
요청 파이프라인에서 요청과 응답을 처리하는 미들웨어를 지원합니다.
- 요청 처리: 요청을 처리하고 다음 미들웨어로 전달.
- 응답 처리: 응답을 처리하고 클라이언트에 전달.
사용자 인증과 권한 부여를 처리하는 기능을 제공합니다.
- 쿠키 인증: 쿠키 기반 인증.
- JWT 인증: JSON Web Token을 사용한 인증.
- 역할 기반 권한 부여: 사용자 역할에 따른 권한 부여.
애플리케이션의 로깅을 지원하여 문제를 진단하고 추적합니다.
- 로그 레벨: 다양한 로그 레벨(정보, 경고, 오류 등) 지원.
- 로그 출력: 파일, 콘솔, 데이터베이스 등 다양한 출력 대상.
- ASP.NET Core는 마이크로소프트에서 개발한 오픈 소스, 크로스 플랫폼 웹 프레임워크입니다.
- 고성능: 높은 성능과 확장성을 제공합니다.
- 모듈화: 필요에 따라 구성 요소를 추가하거나 제거할 수 있습니다.
- 컨트롤러와 라우팅: MVC 아키텍처를 기반으로 한 라우팅 및 컨트롤러.
- 의존성 주입: 내장된 DI 컨테이너를 통한 의존성 관리.
- 데이터베이스 연동: Entity Framework Core를 통한 데이터베이스 연동.
- 유효성 검사: 데이터 주석을 통한 모델 유효성 검사.
- 미들웨어: 요청 파이프라인을 구성하는 미들웨어.
- 인증 및 권한 부여: 다양한 인증 및 권한 부여 메커니즘.
- 로깅: 통합된 로깅 시스템.
dotnet new webapi -o MyApi
cd MyApi
dotnet run
dotnet new webapi
: 새로운 ASP.NET Core Web API 프로젝트 생성.dotnet run
: 애플리케이션 실행.
ASP.NET Core에서 컨트롤러는 클라이언트 요청을 처리하는 클래스입니다.
using Microsoft.AspNetCore.Mvc;
namespace MyApi.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
[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();
}
}
}
ASP.NET Core에서 모델은 데이터를 정의하는 클래스입니다.
namespace MyApi
{
public class WeatherForecast
{
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string Summary { get; set; }
}
}
Entity Framework Core를 사용하여 데이터베이스와 상호작용합니다.
using Microsoft.EntityFrameworkCore;
namespace MyApi
{
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<WeatherForecast> WeatherForecasts { get; set; }
}
}
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyApiDb;Trusted_Connection=True;MultipleActiveResultSets=true"
},
...
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddControllers();
}
ASP.NET Core는 의존성 주입을 기본적으로 지원합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IWeatherForecastService, WeatherForecastService>();
services.AddControllers();
}
using System.Collections.Generic;
namespace MyApi
{
public interface IWeatherForecastService
{
IEnumerable<WeatherForecast> GetForecasts();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
namespace MyApi
{
public class WeatherForecastService : IWeatherForecastService
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public IEnumerable<WeatherForecast> GetForecasts()
{
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();
}
}
}
ASP.NET Core는 데이터 주석을 사용하여 모델 유효성 검사를 지원합니다.
using System;
using System.ComponentModel.DataAnnotations;
namespace MyApi
{
public class WeatherForecast
{
[Required]
public DateTime Date { get; set; }
[Range(-20, 55)]
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
[Required]
[StringLength(100)]
public string Summary { get; set; }
}
}
ASP
.NET Core는 요청 파이프라인에서 요청과 응답을 처리하는 미들웨어를 지원합니다.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
ASP.NET Core는 다양한 인증 및 권한 부여 메커니즘을 지원합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["Jwt:Issuer"],
ValidAudience = Configuration["Jwt:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
};
});
services.AddControllers();
}
ASP.NET Core는 다양한 로깅 메커니즘을 제공합니다.
using Microsoft.Extensions.Logging;
namespace MyApi.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly ILogger<WeatherForecastController> _logger;
public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogInformation("Fetching weather forecasts.");
// Other code...
}
}
}
백엔드 프레임워크는 웹 애플리케이션의 서버 측 로직을 구현하는 데 필요한 다양한 기능을 제공합니다. ASP.NET Core는 강력한 기능을 갖춘 백엔드 프레임워크로, 라우팅, 컨트롤러, 데이터베이스 연동, 유효성 검사, 의존성 주입, 미들웨어, 인증 및 권한 부여, 로깅 등을 지원합니다. 이 문서를 통해 백엔드 프레임워크의 주요 기능과 ASP.NET Core를 사용한 웹 애플리케이션 개발의 기초를 이해할 수 있습니다.