ASP.NET Core 8.0을 사용한 Web API 간 통신
이 튜토리얼에서는 ASP.NET Core 8.0을 사용하여 두 개의 Web API 프로젝트를 만들고, 하나의 프로젝트에서 다른 프로젝트의 API를 호출하는 방법을 단계별로 설명합니다. 우리가 만들 프로젝트는 다음과 같습니다.
- BroadcastingAPI: 메시지를 방송하는 API 엔드포인트를 제공합니다.
- ClientAPI:
BroadcastingAPI
의 엔드포인트에 메시지를 보내는 클라이언트 역할을 합니다.
프로젝트 준비
1. BroadcastingAPI 프로젝트 생성
- Visual Studio에서 프로젝트 생성:
- "File > New > Project"를 선택합니다.
- "ASP.NET Core Web API" 프로젝트 템플릿을 찾아 "Next"를 클릭합니다.
- 프로젝트 이름을
BroadcastingAPI
로 지정합니다. - ".NET 8.0"을 대상 프레임워크로 선택하고 "Create"를 클릭합니다.
2. ClientAPI 프로젝트 생성
- 또 다른 Web API 프로젝트 생성:
BroadcastingAPI
와 같은 방법으로ClientAPI
라는 이름의 또 다른 "ASP.NET Core Web API" 프로젝트를 생성합니다.
BroadcastingAPI 구현
1. BroadcastMessageController 추가
BroadcastingAPI
프로젝트에 다음 코드를 포함하는 BroadcastMessageController
클래스를 추가합니다. 이 컨트롤러는 외부 요청을 받아 메시지를 방송합니다.
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
namespace VisualAcademy.Apis
{
[Route("api/[controller]")]
[ApiController]
public class BroadcastMessageController : ControllerBase
{
private readonly ILogger<BroadcastMessageController> _logger;
public BroadcastMessageController(ILogger<BroadcastMessageController> logger)
{
_logger = logger;
}
[HttpPost]
public async Task<IActionResult> Broadcast([FromBody] BroadcastMessageRequest request)
{
if (request == null)
{
return BadRequest("Invalid request.");
}
_logger.LogInformation($"Broadcasting message: {request.Message}, Tenant: {request.Tenant}, Type: {request.Type}, URL: {request.Url}, EmployeeId: {request.EmployeeId}");
// 여기에 실제 메시지 전달 로직을 구현합니다.
return Ok("Message broadcasted successfully.");
}
}
public class BroadcastMessageRequest
{
public string Message { get; set; }
public string Tenant { get; set; }
public string Type { get; set; }
public string Url { get; set; }
public long? EmployeeId { get; set; }
}
}
ClientAPI 구현
1. HttpClientFactory 설정
ClientAPI
프로젝트의 Program.cs
파일에 HttpClientFactory
를 추가합니다.
builder.Services.AddHttpClient();
2. TestBroadcastController 추가
ClientAPI
프로젝트에 다음 코드를 포함하는 TestBroadcastController
클래스를 추가합니다. 이 컨트롤러는 HttpClient
를 사용하여 BroadcastingAPI
의 BroadcastMessageController
에 테스트 메시지를 보냅니다.
using Microsoft.AspNetCore.Mvc;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace VisualAcademy.Apis
{
[Route("api/[controller]")]
[ApiController]
public class TestBroadcastController : ControllerBase
{
private readonly IHttpClientFactory _clientFactory;
public TestBroadcastController(IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
}
[HttpPost]
public async Task<IActionResult> BroadcastTestMessage()
{
var client = _clientFactory.CreateClient();
var messageData = new
{
Message = "Test Broadcasting Message",
Tenant = "TestTenant",
Type = "TestType",
Url = "http://localhost",
EmployeeId = (long?)null
};
var jsonContent = JsonSerializer.Serialize(messageData);
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
// BroadcastingAPI의 실제 URL로 변경해야 합니다.
var response = await client.PostAsync("https://localhost:5000/api/BroadcastMessage", content);
if (response.IsSuccessStatusCode)
{
return Ok(await response.Content.ReadAsStringAsync());
}
else
{
return BadRequest("Failed to broadcast message.");
}
}
}
}
테스트 및 디버깅
BroadcastingAPI 실행 및 테스트
BroadcastingAPI
프로젝트를 시작 프로젝트로 설정하고, F5를 눌러 디버깅 모드로 실행합니다.https://localhost:5001
또는http://localhost:5000
에서 서비스가 실행됩니다.
ClientAPI를 통한 메시지 전송 테스트
ClientAPI
프로젝트를 새 인스턴스에서 실행합니다. Visual Studio에서 프로젝트를 우클릭하고 "Debug > Start new instance"를 선택합니다.- Postman 또는 다른 HTTP 클라이언트 도구를 사용하여
http://localhost:<ClientAPIPort>/api/TestBroadcast
에 POST 요청을 보냅니다. BroadcastingAPI
의 출력에서 방송된 메시지를 확인합니다.
이 튜토리얼을 통해 두 개의 ASP.NET Core Web API 프로젝트 간에 메시지를 전송하고 방송하는 방법을 단계별로 배웠습니다. 이 과정은 API 개발 및 통신의 기본적인 이해를 제공하며, 실제 애플리케이션 개발에서 확장하고 적용할 수 있는 기반을 마련합니다.
환경 변수 사용하기
이제 ClientAPI
에서 BroadcastingAPI
의 URL을 appsettings.json
파일에 저장하고, 이 설정을 읽어와 HttpClient
를 사용하여 요청을 보내는 방법을 설명하겠습니다. 이 접근 방식은 하드코딩된 URL 대신 설정 파일을 사용하여 더 유연하고 관리하기 쉬운 코드를 만들 수 있게 합니다.
appsettings.json 파일에 API URL 추가
ClientAPI
프로젝트의appsettings.json
파일을 엽니다.- 파일에 다음과 같이
BroadcastingAPI
의 URL을 추가합니다.
{
"BroadcastingApiUrl": "https://localhost:5000/api/BroadcastMessage"
}
Configuration 설정 읽기
ASP.NET Core에서는 IConfiguration
인터페이스를 사용하여 appsettings.json
파일의 설정 값을 읽을 수 있습니다. IHttpClientFactory
와 함께 IConfiguration
을 TestBroadcastController
에 주입하여 BroadcastingApiUrl
값을 사용할 수 있게 합니다.
1. Startup.cs 또는 Program.cs에서 IConfiguration 사용 설정
ASP.NET Core 6.0 이상부터는 Program.cs
파일에 모든 설정과 서비스 등록이 포함됩니다. IConfiguration
을 사용하려면 별도의 설정이 필요하지 않습니다. 이미 builder.Configuration
을 통해 접근할 수 있습니다.
2. TestBroadcastController 수정
TestBroadcastController
에서 IConfiguration
을 사용하여 BroadcastingApiUrl
설정 값을 읽고, HttpClient
요청에 이 URL을 사용하도록 코드를 수정합니다.
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace VisualAcademy.Apis
{
[Route("api/[controller]")]
[ApiController]
public class TestBroadcastController : ControllerBase
{
private readonly IHttpClientFactory _clientFactory;
private readonly string _broadcastingApiUrl;
public TestBroadcastController(IHttpClientFactory clientFactory, IConfiguration configuration)
{
_clientFactory = clientFactory;
// appsettings.json에서 BroadcastingApiUrl 값을 읽습니다.
_broadcastingApiUrl = configuration.GetValue<string>("BroadcastingApiUrl");
}
[HttpPost]
public async Task<IActionResult> BroadcastTestMessage()
{
var client = _clientFactory.CreateClient();
var messageData = new
{
Message = "Test Broadcasting Message",
Tenant = "TestTenant",
Type = "TestType",
Url = "http://localhost",
EmployeeId = (long?)null
};
var jsonContent = JsonSerializer.Serialize(messageData);
var content = new StringContent(jsonContent, Encoding.UTF8, "application/json");
// 설정 파일에서 읽은 URL을 사용합니다.
var response = await client.PostAsync(_broadcastingApiUrl, content);
if (response.IsSuccessStatusCode)
{
return Ok(await response.Content.ReadAsStringAsync());
}
else
{
return BadRequest("Failed to broadcast message.");
}
}
}
}
이렇게 하면 ClientAPI
에서 BroadcastingAPI
로의 요청 URL이 appsettings.json
파일에서 관리됩니다. 이 방식을 사용하면, 배포 환경에 따라 다른 URL을 설정 파일에서 쉽게 변경할 수 있으며, 코드를 재컴파일 할 필요 없이 유연한 설정 관리가 가능해집니다.