Server

[Web 서버 기초] Web API Framework와 ASP.Net Core

dev-ohdam 2024. 5. 31. 02:09
들어가는 말

 

  필자는 게임공학과에 재학하며 C++ 언어와 TCP-IP 소켓 프로그래밍를 중점으로 배워왔다.

그리고 C#, ASP.NET Core, HTTP 통신와 관련 개념을 작년 8월 컴투스 산학협력 프로그램을 진행하며 처음 접하게 되었는데, 그때 당시에는 어떤 순서로 공부를 수행해야할 지 감을 잡지 못해 많은 어려움이 있었다.  그래서 해당 활동 이후 여러 영문 영상 등을 시청하며, 기본 개념과 관련된 자료를 많이 찾아본 것 같다.

 

 추후 ASP.Net Core와 관련되서 학습하고자 하는 학생은  현재 해당 카테고리에 작성된 글 순서대로 참고해보면 좋을 것 같다.

 

Web API Framework 와 ASP.Net Core

 

 지난 게시글에서 Web API가 동작하는 방식에 관해 그림과 함께 설명해보는 시간을 가졌었다.

Web API가 동작되는 그 일련의 과정을 개발자가 직접 구현해야 한다면 굉장히 어려울 것이다.

Web API Framework는 그런 과정을 처리하는 것에 관한 기본적인 기능을 제공해주며, 개발자로 하여금 필요한 서비스만 구현할 수 있도록 도와준다. 그 뿐만 아니라, 제공되는 기능을 직접 구현하고 활용하는 것 또한 지원된다.

 

 Microsoft 의 ASP.Net Core는 Web API Framework의 한 종류이다. 과거에도 여러 Web API Framework가 존재했으나 ASP.Net Core의 경우, 다양한 플랫폼에서 지원되지 못했던 기존 프레임워크들의 문제점을 보완했다는 특징이 있다. 

 

그리고 이를 개발할 때 C# 프로그래밍 언어를 사용한다.

 

Web API Framework는 어떻게 우리를 도와줄까?

 

 

 일단 Web API Framwork가 개발자에게 어떤 것을 도와주는지 알기 위해서 ASP.NET Core 기반의 간단한 웹 서버 프로젝트를 하나 만들어 보겠다. 필자는 Visaul Studio 2022와 ASP.NET Core 8.0 을 사용했다. 

 

var builder = WebApplication.CreateBuilder(args); 
// 빌더를 생성한다. appSetting.json을 통해 다양한 Configuration 값을 세팅할 수 있다.

var app = builder.Build(); // 빌더를 통해 애플리케이션을 빌드한다.

app.UseHttpsRedirection(); // http 요청을 https로 재설정해주는 함수

app.Run(); // 빌드된 애플리케이션을 시작

 

 

 프로젝트를 생성한 후, 불필요한 구성 요소를 모두 지우고 나면(weather 어쩌구하는 친구들..) 다음과 같은 모양이 나온다.

 

 일단 먼저 간단하게 설명하자면 program.cs는 Web API 프로젝트의 진입점이라고 볼 수 있다. (main 함수)

스스로 공부하며 인터넷에 asp.net core 관련 내용을 검색해 본 사람들은 Program 클래스 안에 StartUp() 멤버 함수를 가진 형태로 작성된 코드를 많이 본 적 있을 것이다. 옛날 버전에서는 그런 형태로 작성했다고 하니 참고만 하는게 좋다. 

 

차례대로 설명해보도록 하겠다. 

 

우리에겐 웹 애플리케이션을 빌드하기 위한 빌더가 제공된다. (builder)

그리고 해당 빌더를 통해 애플리케이션을 빌드할 수 있다. 그 빌드된 결과물이 app이다.

app의 Run() 함수를 호출하는 것으로 애플리케이션이 호출된다.

 

app.UseHttpRedirction() 같은 함수들이 해당 프레임워크에서 개발자를 위해 지원하는 요소 중 하나라고

볼 수 있다.

 

지금까지 기본 코드에 관한 설명이다. 그리고 여기에 몇 줄의 코드를 더 추가해보겠다.

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.UseHttpsRedirection();

// Routing 
app.MapGet("/character", () =>
{
    return "Get My Character Information.";
}
);

// 이렇게 요청에 포함된 정보를 인자값으로 넘겨줄 수 있다.
app.MapGet("/character{id}", (int id) => 
{
	return $"Get My Character Information Id : {id}";
}
);
app.MapPost()

app.Run();

 

 Routing 이라는 주석 아래에 MapGet()이라는 함수를 호출한 것을 볼 수 있다.

 

 Routing(라우팅)은 지난 시간 내가가 설명했던 개념 중 하나이다. 라우팅은 호스트가 보낸 Request를 적절한 엔드 포인트로 경로를 설정해주는 것이다. 이때 엔드 포인트는 사용자가 요청에 대한 서비스를 제공하는 지점이다.

 

 MapOOO 함수들은 엔드 포인트에 도달하기 위한 경로를 사전에 맵핑(Mapping) 하는 작업을 한다. 여기서 OOO에는 보통 HTTP Method(Verb)가 들어간다. 내가 호출한 함수는 MapGet()이므로 Get Method와 관련된 것임을 추측할 수 있다. 그리고

 

  • 첫 번째 인자로 들어간 것은 엔드 포인트의 경로
  • 두 번째 인자로 들어간 것은 엔드 포인트를 직접 함수로 구현한 것이다.

 

 이렇게 구현하게 되면, 우리가 요청을 보낼 때, 적절한 엔드 포인트로 경로를 지정해줄 수 있다.

이런 Mapping 작업 또한, Web API Framework가 개발자에게 지원해주는 주는 요소이다.

 

그 덕분에 개발자는 엔드 포인트 구현에만 집중할 수 있는 것이다. 

 

★ 지금 작성한 코드에 관한 실행 결과 & 검증 방법은 다음 게시글에서 보여주도록 하겠다.

 


정리

 

Web API Framework

 

 이렇듯 Web API Framework는 개발자의 수고를 덜어준다.

해당 그림은 지난 시간 Web API 동작 방식에 관한 그림을 이번 주제에 맞게 변형한 것이다.

앞서 설명한 것 외에도 다양한 기능을 기본적으로 제공해주는데 각 항목을 차례대로 설명해보겠다.

 

  • Authentication & Authorization : 호스트의 Request에 관한 인증 & 인가 작업
  • Routing : 라우팅 작업 (아까 코드를 통해 보았다)
  • Model Binding : 요청에 포함된 데이터 모델을 함수에서 사용할 수 있는 파라미터로 변환하는 작업
  • Model Validation : 데이터 모델의 요소에 관한 검증 작업
  • Exception Handle : 예외 처리 작업
  • Result Formating : 호스트에게 전달할 Response에 맞게 엔드 포인트 결과물을 포맷팅하는 작업

 

마무리

 

이렇게 오늘은 Web API Framework와 ASP.NET Core에 관해 살펴보는 시간을 가졌다.

다음 시간에는 이번 게시글에 작성된 코드에 관한 결과를 어떤 방법으로 확인하는지 알아보겠다.

(그 전에 https 통신 & rest api와 관련된 게시글을 먼저 작성할 예정이다.)