월간 지앤선

번역: 이상한모임 번역팀

편집: 지앤선 편집장 아델라

 

Mac OSX에서 ASP.NET Core 와 Visual Studio Code 를 사용해서 Ocelot API 게이트웨이 만들기

 

마이크로서비스를 만든다면, API 게이트웨이가 필요할 것입니다.

REST API를 관리하는 데 이용되는 API 게이트웨이 종류가 몇 가지 있습니다. 시리즈로 연재할 목록을 아래에 몇 가지 소개하고자 합니다.

1. Ocelot — Ocelot은 오픈소스입니다. Tencent가 사용하는 .NET Core API 게이트웨이며, 이번 글에서 우리가 소개할 게이트웨이입니다. 

2. Kong — 인기있는 Nginx 서버에서 동작하는 API 게이트웨이입니다. Kong에는 커뮤니티 에디션과 유료인 기업용 에디션이 있으며, 아주 강력한 플랫폼입니다.

3. Express API Gateway — 유명한 Express JS에서 사용할 수 있는 게이트웨이입니다. 

4. Azure API Management — Azure API 게이트웨이는 문서화 작업과 API 게이트웨이 등을 포함하는 관리 계층을 만들 수 있게 해 줍니다.

 

이 글에서 보여 드릴 예제는 주로 Mac OSX와 Visual Studio Code를 이용한 것입니다. 또 다른 글에서 Visual Studio 2017과 Windows를 이용한 동영상에 대해 알아보겠습니다.

API 게이트웨이가 필요한 이유

API 게이트웨이가 필수는 아닙니다. API 게이트웨이는 단일 장애 지점이 될 수 있기 때문에 사용하지 않는다는 일부 얘기들도 있지만(어떻게 그렇게 되는지는 잘 모르겠지만), 게이트웨이 패턴을 사용하면 일이 정말 간단해집니다.

 

마이크로서비스 아키텍처를 구축하는 경우, 사용할 수 있는 몇 가지 전략이 있습니다. 개별 소비자가 알아야 하는 별도의 API를 사용하거나, API 게이트웨이를 통해서 통합 API를 제공할 수 있습니다.

 

통합된 게이트웨이를 통해 API를 제공한다면, API 게이트웨이 플랫폼이 필요합니다.

 

마이크로서비스 예제 — 전자상거래(E-Commerce) API

이번 예제에서는 전자상거래 API를 구축하고 있다고 가정하겠습니다.

 

전자상거래 응용프로그램은 굉장히 복잡해지고 있습니다. 여기에는 카탈로그/제품 정보, 배송 서비스, 세금 서비스, 주문 서비스, 재고 관리 서비스, 이메일 서비스, 사용자 관리 서비스 등이 있습니다.

 

전자상거래 도메인은 모놀리스(monolith)로 만들기에는 매우 복잡합니다. 할 수는 있겠지만, 잠 못 이루는 밤이 있을 수도 있습니다. ;)

 

따라서 각 서비스의 복잡도에 따라, 하나 이상의 마이크로 서비스로 나누는 것으로 결정할 수도 있습니다.

 

Orders API와 Catalog API를 아주 간단하게 구축해 보겠습니다. 이 두 가지는 API Gateway — Ocelot를 보여주기에 적당한 예시입니다.

 

구축 전략은 아래와 같습니다.

1. Catalog API 를 구축합니다— 7001번 포트

2. Orders API 를 구축합니다— 7002번 포트

3. API Gateway 를 구축합니다— 7000번 포트

4. Ocelot를 구성합니다.

5. API Gateway를 테스트합니다.

 

이에 대한 영상 자료는 여기에 있습니다.

Ocelot API with ASP.NET Core 2.1 and VS Code/Mac OS X

 

자, 이제 시작해 봅시다.

 

솔루션 구축 & 다양한 API

좋은 구조를 구축하는 가장 최고의 방법은 여러 개의 API 마이크로 서비스를 갖춘 솔루션을 구축하는 것입니다. 마이크로 서비스당 각각의 솔루션(팀 구성 방식에 따라 다름)을 가질 수 있지만 해당 데모에서는 2개의 마이크로서비스 및 1개의 API 게이트웨이 프로젝트로 1개의 솔루션을 구축할 예정입니다.

 

다음 그림이 제가 생각한 프로젝트 구조입니다.

 

Folder Structure for the API Gateway

 

솔루션을 추가하려면 "dotnet new sln"명령을 사용하세요 . 다음과 같이 작성된 새로운 솔루션이 있어야 합니다.

 

‘dotnet new sln’ 실행, 솔루션 생성

 

솔루션을 추가한 후에는 "CatalogApi" 및 "OrdersApi"와 같은 다양한 Api에 대한 하위 Api 폴더들을 추가할 수 있습니다. "dotnet new webapi"를 수행하여 해당 하위 폴더로 이동하고 ASP.NET Core API 프로젝트를 만들 수 있습니다.

 

다음과 같이 솔루션 탐색기용 VS Code Plugin을 사용하여 솔루션에 프로젝트를 추가할 수도 있습니다.

 

이미 생성한 솔루션에서 ‘Add Existing Project’를 선택한다 (Solution Explorer Plugin)

 

카탈로그(Catalog) API가 포트 7001에서 실행되는지( 아니라면 포트 7001로 바꿔주어야 합니다) 확인합니다.

카탈로그 API (Port 7001)

 

주문(Orders) API가 포트 7002에서 실행되는지 확인합니다.

 

주문 API (Port 7002)

 

API Gateway 추가

마이크로서비스를 추가했으면, 이제 API 게이트웨이를 추가할 차례입니다. “ApiGateway” 폴더에서 “dotnet new webapi”를 실행해서 ApiGateway 프로젝트를 추가합니다. 기본으로 생성되는 ValuesController는 여기서는 쓰이지 않으므로 삭제합니다.

 

그런 다음, 다음 두 가지를 진행해야 합니다.

 

1. ocelot.json 파일을 추가합니다. 이 파일은 Ocelot이 마이크로서비스를 어디로 전달해야 하는지에 대한 정보(리디렉션:redirections)를 담고 있습니다. 

2. ApiGateway 프로젝트에 ocelot.json 파일의 설정을 불러오도록 연결합니다.

 

이 과정은 간단합니다. ‘ocelot.json’ 이란 이름을 가진 파일을 ApiGateway 프로젝트에 추가하고, 같은 파일이 프로젝트에서 쓰이도록 다음과 같은 코드를 추가합니다.

 

App Configuration에 ocelot.json 파일 추가

 

이제, Ocelot 서비스와 미들웨어를 Startup.cs에 추가해 다음과 같이 변경해 줍니다.

 

Startup.cs 에 Ocelot 설정 추가

 

그런 다음, ocelot.json 파일은 다음과 같이 설정해 주세요.

ocelot.json을 사용 API를 재전달(redirect)하는 마이크로서비스 예제

 

주목해야 할 중요한 점은 다음과 같습니다.

 

1. GlobalConfiguration을 통해 Ocelot이 바라 볼 BaseUrl을 정의할 수 있습니다. 이번 프로젝트에서는 localhost:7000으로 설정했었죠.

 

2. ReRoutes 배열로 하나 이상의 리다이렉트할 Url을 설정할 수 있습니다. DownStream paths는 마이크로서비스의 실제 Url을 나타냅니다. Upstream paths는 사용자들이 API Gateway를 통해서 마이크로서비스로 접근할 수 있는 Url을 나타내죠.

 

3. 앞서 보셨던 것처럼 변수명을 정하여 각각의 api를 한 번에 받는 와일드카드 리다이렉션을 할 수도 있습니다. 이번 프로젝트에서는 {catchAll}이라는 변수명을 사용하여 catalog-api로 들어오는 모든 요청 트래픽은 7001 포트의 api로, orders-api로 들어오는 모든 요청 트래픽은 7002 포트의 api로 리다이렉트했습니다.

 

여러분이 꼭 알아야 할 필요가 있는 것은 이 정도입니다.

 

이제 위 동영상처럼 API gateway를 활용할 수 있을 겁니다.

 

🖋 원문 출처: https://link.medium.com/wGO26CJzmV

🖋 원문 저자: Anup Marwadi

 

Anup Marwadi – Medium

Read writing from Anup Marwadi on Medium. Tech Entrepreneur. Product Builder. Student for Life. CEO - HyperTrends. Every day, Anup Marwadi and thousands of other voices read, write, and share important stories on Medium.

medium.com

Medium 멤버. 테크 기업가. 프로덕트 제작자. 평생 학생. HyperTrends의 CEO. TicketSocket, Pharmly의 전 CTO. BlockChain의 현 CTO.

🖋 기술 번역: 이상한 모임 번역팀