Backend for Frontend (BFF) 패턴은 다양한 클라이언트(예: 모바일 애플리케이션, 웹 애플리케이션, IoT 장치)에 대해 서로 다른 API 또는 인터페이스를 제공해야 할 때 사용됩니다. 이를 통해 클라이언트와 백엔드 간의 상호 작용을 최적화하고 마이크로서비스의 내부 복잡성을 숨길 수 있습니다. 각 클라이언트 유형은 클라이언트의 요구에 가장 적합한 전문 API를 구현하는 자체 BFF 서버를 갖습니다.
대규모 시스템에서 작업할 때 이것은 편리합니다. 서로 다른 BFF는 다음을 허용합니다:
Node.js를 이용한 아키텍처 예:
// BFF를 위한 Express const express = require('express'); const axios = require('axios'); const app = express(); app.get('/profile', async (req, res) => { // 다양한 서비스에서 데이터 집계 const [user, settings] = await Promise.all([ axios.get('http://user-service/api/user'), axios.get('http://settings-service/api/settings') ]); res.json({ name: user.data.name, theme: settings.data.theme }); }); app.listen(3000);
주요 특징:
BFF는 클라이언트와 마이크로서비스 간의 단순 프록시입니까?
아니요. BFF와 일반 프록시의 주요 차이점은 비즈니스 로직과 데이터 적응 기능의 존재입니다. BFF는 데이터를 전송하고 집계하며 단순히 요청을 전달하지 않습니다.
모든 클라이언트에 대해 하나의 BFF를 사용할 수 있습니까?
아니요, BFF의 원칙 중 하나는 각 클라이언트 유형에 대해 BFF를 분리하는 것입니다. 단일 BFF를 사용하면 다양한 인터페이스와 장치 유형에 대해 최적의 조정 의미가 손실됩니다.
BFF는 팀 간의 느슨한 결합을 증가시킵니다?
종종 "예"라고 대답하지만, 그렇지 않습니다: BFF를 지원하는 것은 프론트엔드와 백엔드 팀의 공동 작업을 요구하므로 변화의 조정이 필요하고 이는 결합성을 강화합니다.