본문 바로가기
Backend

🚀 BFF 패턴이란? 개념부터 구현까지 완벽 정리!

by SOLYI 2025. 3. 13.

웹 개발에서 BFF(Backend for Frontend) 패턴이란 무엇이며, 왜 필요한 걸까요?
이 글에서는 BFF 패턴의 개념, 장점, 그리고 실제 구현 방법까지 자세히 알아보겠습니다.

📌 목차

  1. BFF(Backend for Frontend)란?
  2. BFF 패턴이 필요한 이유
  3. BFF 패턴의 장점과 단점
  4. BFF 패턴 아키텍처
  5. BFF 패턴 구현하기
  6. OAuth 2.0과 함께 사용하는 BFF
  7. BFF 패턴을 적용할 때 고려해야 할 점
  8. 결론

1️⃣ BFF(Backend for Frontend)란?

BFF(Backend for Frontend)는 클라이언트(프론트엔드)별로 별도의 백엔드(서버)를 제공하는 아키텍처 패턴입니다.
일반적으로 프론트엔드는 단일 API 서버에 요청하지만, BFF 패턴에서는 각 클라이언트(Web, Mobile, Desktop 등)마다 최적화된 백엔드를 따로 둡니다.

💡 쉽게 말해?

  • BFF는 클라이언트와 API 서버 사이에 위치하여 클라이언트에 맞게 데이터를 가공하고, API 요청을 조정하는 역할을 합니다.

📌 예제 구조:

csharp
복사편집
[Frontend (React, Vue, 모바일 앱)] ↓ [BFF (Backend for Frontend)] ↓ [API 서버 또는 마이크로서비스]

2️⃣ BFF 패턴이 필요한 이유

단순히 클라이언트가 직접 API를 호출하면 되는데, 굳이 BFF를 도입해야 할까요?
다음과 같은 이유로 BFF 패턴이 필요합니다.

🔹 각 클라이언트에 맞는 데이터 가공

  • 웹과 모바일에서 필요한 데이터 형식이 다를 수 있습니다.
  • BFF가 API 데이터를 클라이언트에 맞게 변환하여 불필요한 데이터를 줄이고 최적화할 수 있습니다.

🔹 보안 강화

  • 클라이언트가 직접 API를 호출하면 보안 이슈가 발생할 수 있습니다.
  • BFF가 API 호출을 대행하면, 클라이언트가 직접 민감한 정보를 다루지 않아도 됩니다.

🔹 프론트엔드의 변경에 유연하게 대응

  • 클라이언트의 UI 변경이 있을 때 BFF에서만 수정하면 되므로 API 서버를 수정할 필요가 줄어듭니다.

🔹 OAuth 2.0 및 인증 처리

  • OAuth 2.0 인증을 사용할 때, 클라이언트가 직접 액세스 토큰을 관리하는 것보다 BFF에서 처리하는 것이 더 안전합니다.

3️⃣ BFF 패턴의 장점과 단점

장점
✔ 클라이언트별로 최적화된 데이터 제공
✔ 보안 강화 (토큰 관리, API 보호)
✔ API 변경에 유연한 대응
✔ 마이크로서비스와의 연결 최적화

단점
✖ API 서버와 BFF 서버가 분리되므로 관리해야 할 서버가 증가함
✖ BFF가 병목(Bottleneck)이 될 가능성이 있음
✖ 잘못 설계하면 불필요한 중복 로직이 생길 수 있음


4️⃣ BFF 패턴 아키텍처

BFF 패턴은 다음과 같은 구조를 가집니다.

📌 BFF 패턴의 기본 아키텍처

css
복사편집
[Web Client][BFF][API Gateway or Microservices] [Mobile Client][BFF][API Gateway or Microservices]

BFF는 API 서버의 데이터를 가공하여 클라이언트에게 적절한 형태로 제공합니다.


5️⃣ BFF 패턴 구현하기

📌 BFF API 예제 (ASP.NET Core Minimal API)


var builder = WebApplication.CreateBuilder(args);

// 🔹 JWT 인증 추가
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://auth.example.com"; // 인증 서버 주소
        options.Audience = "bff-api"; // 대상 Audience 설정
    });

builder.Services.AddAuthorization();

var app = builder.Build();

app.UseAuthentication();
app.UseAuthorization();

// 🔹 BFF API 엔드포인트
app.MapGet("/api/bff/user", async (HttpContext httpContext) =>
{
    var user = httpContext.User;
    if (!user.Identity?.IsAuthenticated ?? true)
        return Results.Unauthorized();

    return Results.Ok(new
    {
        UserId = user.Claims.FirstOrDefault(c => c.Type == "sub")?.Value
    });
}).RequireAuthorization(); // 인증 필요

app.Run();
    

6️⃣ OAuth 2.0과 함께 사용하는 BFF

BFF 패턴은 OAuth 2.0 및 OpenID Connect와 함께 사용하면 더욱 안전한 인증 시스템을 구축할 수 있습니다.

JWT 기반 인증을 적용하면

  • BFF가 유효한 Access Token을 확인한 후, API 서버로 요청을 보냅니다.
  • 클라이언트가 직접 API 서버를 호출하지 않으므로 보안성이 향상됩니다.

7️⃣ BFF 패턴을 적용할 때 고려해야 할 점

📌 1. 클라이언트별 BFF를 분리할 것인가?

  • Web, Mobile이 다르다면 각각의 BFF를 둘 것인지, 하나의 BFF에서 처리할 것인지 고민해야 합니다.

📌 2. API 요청이 너무 많아지지 않도록 최적화할 것

  • BFF가 단순히 API 요청을 중계하는 역할만 한다면, 과부하가 발생할 수 있습니다.
  • API 요청을 병렬 처리하거나 캐싱을 고려해야 합니다.

📌 3. 보안 검증을 철저히 할 것

  • BFF가 API 호출을 대신하므로, API 키, JWT 검증, OAuth 2.0 인증을 반드시 적용해야 합니다.

8️⃣ 결론

BFF 패턴은 웹과 모바일 등 다양한 클라이언트 환경에서 최적화된 데이터를 제공하고 보안을 강화할 수 있는 강력한 아키텍처 패턴입니다.
하지만 잘못 설계하면 오히려 복잡도가 증가할 수 있으므로, 클라이언트와 API 서버 간의 역할을 명확히 구분하는 것이 중요합니다.

🚀 BFF 패턴을 도입하면?
✅ 클라이언트가 더 가볍고 빠르게 동작
✅ 보안 강화
✅ 유지보수가 용이한 아키텍처 구축 가능

👉 BFF 패턴을 프로젝트에 도입하려면, 각 클라이언트의 요구사항을 분석하고 적절한 데이터 처리 전략을 수립하는 것이 중요합니다! 🚀

반응형