시스템 아키텍트백엔드 개발자

분산 아키텍처에서 API 조합 패턴을 사용하여 요청을 구현하는 방법은 무엇인가요?

Hintsage AI 어시스턴트로 면접 통과

답변.

API 조합 패턴은 프론트엔드 또는 외부 서비스에 필요한 데이터를 여러 마이크로서비스에서 집계해야 할 때 사용됩니다. 이는 필요한 서비스에 대한 개별 요청을 통해 필요한 데이터를 수집하고 최종 응답을 형성하는 조정 계층(API Composer)을 통해 구현됩니다.

이 계층은 종종 별도의 서비스, 게이트웨이 또는 BFF(백엔드 포 프론트엔드)로 구현되어 집계, 변환 및 오류 처리를 제공합니다. 이러한 솔루션은 중복 네트워크 호출을 줄이고 내부 API의 변경으로부터 클라이언트를 격리합니다.

코드 예시 (Node.js + Express 사용):

const axios = require('axios'); app.get('/user-details/:id', async (req, res) => { const user = await axios.get(`http://usersvc/user/${req.params.id}`); const orders = await axios.get(`http://ordersvc/orders/user/${req.params.id}`); res.json({ user: user.data, orders: orders.data }); });

주요 특징:

  • 하나의 API에서 여러 서비스의 데이터 변환 및 통합
  • 마이크로서비스의 내부 아키텍처 세부정보로부터 클라이언트 격리
  • 별도의 계층으로 부하 분산을 통한 확장성

속임수 질문.

API 조합이 항상 마이크로서비스의 데이터를 통합하는 가장 좋은 방법인가요?

아니요, 관련 엔티티가 많고 연결이 느릴 경우 성능이 저하될 수 있습니다. 특정 경우에는 CQRS 또는 데이터 집계 서비스 사용이 더 나을 수 있습니다.

프론트엔드에서 각 마이크로서비스에 직접 접근할 수 있나요?

작은 시스템에서는 가능하지만 시스템이 커짐에 따라 보안, 스키마 관리, 확장성 및 프론트엔드의 집계 로직 부담과 관련된 문제가 발생합니다. 따라서 중앙집중형 집계 계층이 선호됩니다.

API 조합이 서비스 간의 트랜잭션 무결성을 보장합니까?

아니요. 이 패턴은 요청에 대한 데이터만 집계합니다. 트랜잭션 처리는 사가 또는 이벤트 메커니즘을 통해 구현해야 합니다.