ASP.NET Core 8.0을 사용한 Web API 간 통신

  • 7 minutes to read

이 튜토리얼에서는 ASP.NET Core 8.0을 사용하여 두 개의 Web API 프로젝트를 만들고, 하나의 프로젝트에서 다른 프로젝트의 API를 호출하는 방법을 단계별로 설명합니다. 우리가 만들 프로젝트는 다음과 같습니다.

  1. BroadcastingAPI: 메시지를 방송하는 API 엔드포인트를 제공합니다.
  2. ClientAPI: BroadcastingAPI의 엔드포인트에 메시지를 보내는 클라이언트 역할을 합니다.

프로젝트 준비

1. BroadcastingAPI 프로젝트 생성

  • Visual Studio에서 프로젝트 생성:
    1. "File > New > Project"를 선택합니다.
    2. "ASP.NET Core Web API" 프로젝트 템플릿을 찾아 "Next"를 클릭합니다.
    3. 프로젝트 이름을 BroadcastingAPI로 지정합니다.
    4. ".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를 사용하여 BroadcastingAPIBroadcastMessageController에 테스트 메시지를 보냅니다.

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 실행 및 테스트

  1. BroadcastingAPI 프로젝트를 시작 프로젝트로 설정하고, F5를 눌러 디버깅 모드로 실행합니다.
  2. https://localhost:5001 또는 http://localhost:5000에서 서비스가 실행됩니다.

ClientAPI를 통한 메시지 전송 테스트

  1. ClientAPI 프로젝트를 새 인스턴스에서 실행합니다. Visual Studio에서 프로젝트를 우클릭하고 "Debug > Start new instance"를 선택합니다.
  2. Postman 또는 다른 HTTP 클라이언트 도구를 사용하여 http://localhost:<ClientAPIPort>/api/TestBroadcast에 POST 요청을 보냅니다.
  3. BroadcastingAPI의 출력에서 방송된 메시지를 확인합니다.

이 튜토리얼을 통해 두 개의 ASP.NET Core Web API 프로젝트 간에 메시지를 전송하고 방송하는 방법을 단계별로 배웠습니다. 이 과정은 API 개발 및 통신의 기본적인 이해를 제공하며, 실제 애플리케이션 개발에서 확장하고 적용할 수 있는 기반을 마련합니다.

환경 변수 사용하기

이제 ClientAPI에서 BroadcastingAPI의 URL을 appsettings.json 파일에 저장하고, 이 설정을 읽어와 HttpClient를 사용하여 요청을 보내는 방법을 설명하겠습니다. 이 접근 방식은 하드코딩된 URL 대신 설정 파일을 사용하여 더 유연하고 관리하기 쉬운 코드를 만들 수 있게 합니다.

appsettings.json 파일에 API URL 추가

  1. ClientAPI 프로젝트의 appsettings.json 파일을 엽니다.
  2. 파일에 다음과 같이 BroadcastingAPI의 URL을 추가합니다.
{
  "BroadcastingApiUrl": "https://localhost:5000/api/BroadcastMessage"
}

Configuration 설정 읽기

ASP.NET Core에서는 IConfiguration 인터페이스를 사용하여 appsettings.json 파일의 설정 값을 읽을 수 있습니다. IHttpClientFactory와 함께 IConfigurationTestBroadcastController에 주입하여 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을 설정 파일에서 쉽게 변경할 수 있으며, 코드를 재컴파일 할 필요 없이 유연한 설정 관리가 가능해집니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com