OData C# (개발자를 위한 작동 방식)
오픈 데이터 프로토콜 (OData)은 Microsoft .NET 개발에서 RESTful API를 구축하고 소비하는 것을 간소화합니다. CRUD (Create, Read, Update, Delete) 작업을 통해 데이터를 쿼리하고 조작하는 표준화 된 접근 방식을 제공합니다. 이 글에서는 .NET에서 API 개발을 간소화하는 Open Data Protocol의 예시와 주요 이점을 강조합니다. OData에 대해 더 알아보려면 소스 코드를 확인하기 위해 OData C# GitHub Repository를 확인할 수 있습니다.

OData는 GET 및 POST와 같은 URL 및 HTTP 동사를 사용하여 RESTful 웹 API를 구축하기 위한 표준 관행을 따릅니다. 데이터를 표현하기 위해 엔터티 데이터 모델 (EDM) 및 JSON 또는 AtomPub를 메시지 인코딩으로 사용합니다. OData가 GraphQL에 비해 API 개발을 간소화하지만, 고급 기능은 적을 수 있습니다.

.NET에서 OData 사용 이점
- 표준화: OData는 엔터티 데이터 모델, 요청 처리 및 응답 서식을 정의하는 일관된 방법을 강요합니다. 이는 개발 복잡성을 줄이고 클라이언트 애플리케이션 통합을 단순화합니다.
- 풍부한 쿼리 기능: OData는 CRUD 작업, 필터링($filter), 정렬(오름차순/내림차순)($orderby), 페이징($top,$skip) 기능을 수행하기 위한 데이터 쿼리의 일관된 방법을 지원하여 클라이언트가 특정 데이터 세트를 효율적으로 검색할 수 있게 합니다.
- 개발자 경험 향상: .NET의 OData 라이브러리는 API 개발을 간소화합니다. 개발자는 라우팅, 쿼리 처리 및 데이터 직렬화를 위한 사전 제작된 컴포넌트를 활용하여 코드 중복 및 개발 시간을 줄일 수 있습니다.
- 상호운용성: 다양한 플랫폼의 OData 호환 클라이언트는 .NET 기반의 OData 서비스와 원활하게 상호작용하여 더 넓은 애플리케이션 통합을 촉진합니다.
OData를 사용하여 .NET Framework 시작하기
.NET의 OData 라이브러리는 데이터를 조작하는 효율적인 방법을 제공하여 개발자 경험을 향상시킵니다. .NET 개발에서 RESTful API를 구축하고 소비하는 것을 간소화합니다. CRUD 작업(Create, Read, Update, Delete)과 같은 친숙한 작업을 통한 데이터 쿼리 및 조작에 대한 표준화 된 접근 방식을 제공합니다.
.NET 프로젝트에서 OData 설정하기
Visual Studio에서 새 프로젝트를 열고 시작하십시오. 그런 다음 솔루션 탐색기로 이동하여 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 'NuGet 패키지 관리'를 선택하십시오. Microsoft.AspNetCore.OData를 검색하고 설치하십시오. 현재 OData 버전은 8.2.5입니다.
NuGet 패키지 관리자 콘솔에서 다음 명령어를 사용하여 OData를 설치하십시오.
Install-Package Microsoft.AspNetCore.OData

예제: ASP.NET Core에서 OData 서비스 생성하기
ASP.NET Core 애플리케이션에서 간단한 OData 모델 클래스를 만들어 봅시다. 다음의 코드에서는 OData 구문을 사용하여 쿼리할 수 있는 서비스 목록을 노출하는 클래스를 보여줍니다.
public class Service
{
public int Id { get; set; }
public string FirstName { get; set; }
public decimal Price { get; set; }
}
public class Service
{
public int Id { get; set; }
public string FirstName { get; set; }
public decimal Price { get; set; }
}
Public Class Service
Public Property Id As Integer
Public Property FirstName As String
Public Property Price As Decimal
End Class
코드 설명
Service 클래스는 C#에서 서비스 관리를 위한 기본 데이터 구조를 나타냅니다. 세 가지 속성을 포함합니다: Id: 서비스에 대한 정수 식별자. FirstName: 서비스와 관련된 이름을 나타내는 문자열. Price: 서비스의 가격을 나타내는 소수 값. 이 클래스는 .NET 개발에서 더 복잡한 서비스 관련 기능을 만드는 기본 블록으로 사용할 수 있습니다. 상황에 따라 컬렉션 또는 내비게이션 속성을 사용할 수도 있습니다.
여기서 Visual Studio에서 ASP.NET Core 애플리케이션에서 표준 OData 엔드포인트를 통해 서비스 목록을 노출하는 OData 컨트롤러를 설정하는 방법을 소개합니다. 다음 예제는 정적 서비스 목록을 사용하는 기본 구현과 Web API에서 OData 쿼리 기능을 활성화하는 방법을 보여줍니다.
using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace DemoOData.Controllers
{
[Route("odata/[controller]")]
public class ServiceController : ODataController
{
private static readonly List<Service> Products = new List<Service>
{
new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
};
[HttpGet]
[EnableQuery]
public IActionResult Get() => Ok(Products);
}
}
using DemoOData.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.OData.Query;
using Microsoft.AspNetCore.OData.Routing.Controllers;
namespace DemoOData.Controllers
{
[Route("odata/[controller]")]
public class ServiceController : ODataController
{
private static readonly List<Service> Products = new List<Service>
{
new Service { Id = 1, FirstName = "Laptop", Price = 6239.9M },
new Service { Id = 2, FirstName = "Smartphone", Price = 2585.9M }
};
[HttpGet]
[EnableQuery]
public IActionResult Get() => Ok(Products);
}
}
Imports DemoOData.Models
Imports Microsoft.AspNetCore.Mvc
Imports Microsoft.AspNetCore.OData.Query
Imports Microsoft.AspNetCore.OData.Routing.Controllers
Namespace DemoOData.Controllers
<Route("odata/[controller]")>
Public Class ServiceController
Inherits ODataController
Private Shared ReadOnly Products As New List(Of Service) From {
New Service With {
.Id = 1,
.FirstName = "Laptop",
.Price = 6239.9D
},
New Service With {
.Id = 2,
.FirstName = "Smartphone",
.Price = 2585.9D
}
}
<HttpGet>
<EnableQuery>
Public Function [Get]() As IActionResult
Return Ok(Products)
End Function
End Class
End Namespace
코드 설명
제공된 코드는 ASP.NET Core 애플리케이션에서 ODataController라는 이름의 ServiceController를 정의하여 OData 프로토콜을 사용하여 데이터 검색 및 조작을 가능하게 합니다. 요청을 odata/Service로 라우팅하고 노트북과 스마트폰을 포함하는 Service 객체의 정적 목록을 제공합니다. Get 메소드는 [EnableQuery]로 장식되어, 클라이언트가 Products 목록에 대해 OData 쿼리(필터링, 정렬, 페이징)를 수행하고, HTTP GET 요청의 결과를 IActionResult로 반환할 수 있게 합니다.
Program.cs에 OData 서비스 등록
.NET 6 애플리케이션에 OData를 통합하려면 필요한 OData 패키지를 설치하고 구성해야 합니다. 이는 OData 모델 정의, OData 미들웨어 설정, 필터링, 정렬, 확장과 같은 OData 기능을 지원하도록 서비스를 구성하는 것을 포함합니다.
using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
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();
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Service>("Services");
return builder.GetEdmModel();
}
builder.Services.AddControllers()
.AddOData(options => options
.AddRouteComponents("odata", GetEdmModel())
.Select()
.Filter()
.OrderBy()
.SetMaxTop(20)
.Count()
.Expand()
);
using DemoOData.Models;
using Microsoft.AspNetCore.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.ModelBuilder;
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();
static IEdmModel GetEdmModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Service>("Services");
return builder.GetEdmModel();
}
builder.Services.AddControllers()
.AddOData(options => options
.AddRouteComponents("odata", GetEdmModel())
.Select()
.Filter()
.OrderBy()
.SetMaxTop(20)
.Count()
.Expand()
);
Imports DemoOData.Models
Imports Microsoft.AspNetCore.OData
Imports Microsoft.OData.Edm
Imports Microsoft.OData.ModelBuilder
Private 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()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static IEdmModel GetEdmModel()
'{
' ODataConventionModelBuilder builder = New ODataConventionModelBuilder();
' builder.EntitySet<Service>("Services");
' Return builder.GetEdmModel();
'}
builder.Services.AddControllers().AddOData(Function(options) options.AddRouteComponents("odata", GetEdmModel()).Select().Filter().OrderBy().SetMaxTop(20).Count().Expand())
코드 설명
이 코드는 .NET 6 애플리케이션에서 OData 지원을 구성합니다. 먼저 필요한 네임스페이스를 가져오고 WebApplicationBuilder 인스턴스를 생성합니다. GetEdmModel 메소드는 ODataConventionModelBuilder를 사용하여 OData 모델을 정의하고, Service 엔티티에 대한 엔티티 세트를 지정합니다. 그런 다음 AddOData 메소드를 호출하여 선택, 필터, 정렬, 개수, 확장을 포함한 OData 서비스를 구성하고, 쿼리 결과에 대한 최대 상위 값을 20으로 설정합니다. 이 설정은 애플리케이션이 OData 쿼리를 효과적으로 처리할 수 있도록 보장합니다.
AddOData() 메소드는 GetEdmModel() 메소드를 사용하여 쿼리에 사용되는 데이터 모델을 검색하여 OData 서비스의 기초를 형성합니다. 이 서비스는 노출된 데이터를 정의하는 추상 데이터 모델인 엔티티 데이터 모델(EDM)을 사용합니다. ODataConventionModelBuilder 클래스는 기본 네이밍 방식으로 EDM을 생성하여 코드 요구사항을 최소화합니다. 대신 개발자는 EDM에 대한 더 큰 제어를 위해 ODataModelBuilder 클래스를 사용할 수 있습니다.
코드의 스크린샷

서비스 실행하기
서비스를 실행한 후 다양한 OData 쿼리 옵션을 사용하여 서비스를 쿼리할 수 있습니다. 예를 들어:
https://localhost:7131/odata/Service
프로그램의 출력

IronPDF 소개
IronPDF는 파일을 PDF로 변환, PDF 페이지를 분할, PDF에서 페이지를 제거하는 작업을 .NET 애플리케이션 내에서 간소화하도록 설계된 포괄적인 C# 라이브러리입니다. HTML, CSS, 이미지, JavaScript로부터 PDF를 생성할 수 있는 기능을 포함하며, 개발자가 웹 콘텐츠를 고품질 PDF 문서로 손쉽게 변환할 수 있게 합니다. 사용하기 쉬운 API와 강력한 렌더링 엔진을 통해 IronPDF는 개발자가 PDF 생성 프로세스를 간소화하여 응용 프로그램에 동적 문서 생성 기능을 쉽게 통합할 수 있도록 합니다.

프로젝트에 IronPDF 추가하기
Visual Studio에서 IronPDF를 설치하려면 NuGet 패키지 관리자 콘솔로 이동하고 다음 명령을 사용합니다.
Install-Package IronPdf
PDF 생성하기
.NET 애플리케이션에서 HTML 콘텐츠로부터 PDF 문서를 생성하려면 DinkToPdf와 같은 라이브러리의 ChromePdfRenderer 클래스를 사용할 수 있습니다. 이 예제는 직원 레코드의 세부 정보를 포함하는 PDF를 만드는 방법을 보여줍니다.
public record Employee (string FirstName, string LastName);
class Program
{
static void Main(string[] args)
{
var employee = new Employee("Iron", "Developer");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
pdf.SaveAs("PersonRecord.pdf");
}
}
public record Employee (string FirstName, string LastName);
class Program
{
static void Main(string[] args)
{
var employee = new Employee("Iron", "Developer");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>");
pdf.SaveAs("PersonRecord.pdf");
}
}
'INSTANT VB TODO TASK: C# 'records' are not converted by Instant VB:
'public record Employee(string FirstName, string LastName)
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim employee As New Employee("Iron", "Developer")
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf($"<h1>Person Record</h1><p>Name: {employee.FirstName} {employee.LastName}</p>")
pdf.SaveAs("PersonRecord.pdf")
End Sub
End Class
이 예제는 간단한 직원 기록을 생성한 후, IronPDF를 사용하여 사람의 이름을 표시하는 PDF 문서를 생성합니다. 이는 C# 레코드가 .NET 애플리케이션에서 PDF 생성과 얼마나 매끄럽게 통합될 수 있는지를 보여줍니다.

결론
OData는 .NET에서 RESTful API의 개발 및 소비를 표준화 된 쿼리 및 조작 기능을 제공하여 간소화합니다. Entity Framework와 통합하여 데이터 액세스와 관리를 간소화하여 개발 효율성을 향상시킬 수 있습니다. OData는 풍부한 쿼리 기능과 개선된 개발자 경험을 통해 다양한 플랫폼 간의 무결성 및 상호 운영성을 제공하여 API 개발을 간소화 합니다. 또한 IronPDF는 .NET 애플리케이션 내에서 강력한 PDF 조작을 위한 포괄적인 기능과 지원을 제공합니다.
자주 묻는 질문
OData가 .NET에서 API 개발을 어떻게 단순화하나요?
OData는 CRUD 작업을 사용하여 데이터를 쿼리하고 조작하기 위한 표준 프로토콜을 제공하여 .NET에서 API 개발을 단순화합니다. URL과 HTTP 동사를 사용하여 RESTful 실행 방식을 따르며, 데이터 표현을 JSON 또는 AtomPub 형식으로 나타내는 엔티티 데이터 모델 (EDM)을 활용합니다.
OData를 .NET 애플리케이션에서 사용하는 주요 이점은 무엇인가요?
.NET 애플리케이션에서 OData를 사용하는 주요 이점에는 표준화, 풍부한 쿼리 기능, 향상된 개발자 경험, 다양한 플랫폼 간 상호 운용성 등이 포함되며 이는 복잡성을 줄이고 효율적인 데이터 검색을 강화합니다.
ASP.NET Core 애플리케이션에서 OData 서비스를 설정하는 방법은 무엇입니까?
ASP.NET Core 애플리케이션에서 OData 서비스를 설정하려면 OData 모델을 정의하고 미들웨어를 구성해야 합니다. Microsoft.AspNetCore.OData NuGet 패키지를 설치하고 ODataConventionModelBuilder를 사용하여 엔터티 데이터 모델을 정의할 수 있습니다.
OData에서 EnableQuery 속성의 역할은 무엇입니까?
OData의 EnableQuery 속성을 사용하면 클라이언트가 OData 컨트롤러가 노출하는 데이터에 대해 필터링, 정렬 및 페이징과 같은 작업을 수행할 수 있으므로 API의 유연성과 사용성이 향상됩니다.
.NET에서 HTML 콘텐츠에서 PDF를 생성하는 방법은 무엇입니까?
IronPDF 라이브러리를 사용하여 .NET에서 HTML 콘텐츠에서 PDF를 생성할 수 있습니다. HTML 문자열을 만들고 ChromePdfRenderer 클래스를 사용하여 HTML을 PDF 문서로 렌더링한 후 파일로 저장할 수 있습니다.
.NET에서 ODataConventionModelBuilder의 목적은 무엇입니까?
.NET에서 ODataConventionModelBuilder는 기본 명명 규칙을 사용하여 자동으로 엔터티 데이터 모델(EDM)을 생성하는 데 사용됩니다. 이를 통해 애플리케이션에서 OData 모델을 정의하는 데 필요한 코드 양이 줄어듭니다.
.NET에서 PDF 조작을 위한 종합적인 라이브러리는 무엇입니까?
IronPDF는 C#에서 PDF 조작을 위한 종합적인 라이브러리로, 파일을 PDF로 변환하고 PDF 페이지를 나누거나 제거하며 .NET 애플리케이션 내에서 HTML에서 PDF를 생성하는 작업을 용이하게 합니다.
OData는 .NET 서비스에서의 상호 운용성을 어떻게 향상합니까?
OData는 OData 표준을 준수하는 클라이언트가 .NET 기반 OData 서비스와 원활하게 상호 작용할 수 있도록 하여, 다양한 애플리케이션 및 플랫폼 간의 통합을 촉진함으로써 상호 운용성을 향상시킵니다.
OData의 맥락에서 CRUD 작업은 무엇입니까?
OData의 맥락에서 CRUD 작업은 RESTful API 내에서 데이터를 조작하는 데 필수적인 생성(Create), 읽기(Read), 업데이트(Update), 삭제(Delete)의 기본 작업을 의미합니다.




