Skip to content

0831

MFA

BFF

  • Backend For Frontend의 약자로, 말 그대로
    프론트엔드를 위한 백엔드 계층을 따로 두는 아키텍처 패턴
  • MSA 환경에는 여러개의 마이크로 서비스가 있을거 아님?
  • 근데 이걸 프론트엔드에서 그대로 호출하기는 불편함.
    • 왜지? 애초에 백엔드에서 api 설계할 때 제대로 하면 되는거 아닌가?
      라는 생각을 했는데
    • 프론트엔드에서는 한 번에 많은 데이터를 갖고와서 화면을 풍성하게 보여주길 원하잖음? 근데 이걸 백엔드 쪽에서 모든 케이스를 고려해서 설계하면 API가 지나치게 복잡해질거임.
    • 그리고 보안 관점에서도 클라이언트에서 다루는 것 보다 BFF에서 인증/인가 처리 후 가공 된 데이터만 클라이언트 딴에 전달하는게 좋음.
    • 성능적인 측면에서도 여러 API를 각각 호출하는 것 보다, BFF로 여러 서비스 호출을 서버 쪽에서 한 번에 묶어서 Aggregation(집합)하는게 좋음.
  • 그래서 프론트엔드 전용 API 게이트웨이 역할을 하는 BFF 레이어를 두는 경우가 있음.
  • https://tech.kakaoent.com/front-end/2022/220310-kakaopage-bff/

정말 꼭 필요할까?

  1. api gateway(관문)에서 aggregation
    • aws api gateway나 kong과 같은 인프라/플랫폼 차원에서 마이크로 서비스를 묶어서(aggregation) 전달.
    • 프론트에 특화 된 요구사항(데이터 가공)을 다루기엔 부족할 수 있음.
  2. graphQL
    • 마이크로 서비스를 GraphQL에 붙여놓고 프론트엔드는 단일 엔드포인트만 호출
    • 쿼리로 불러오니 필요한 데이터만 딱 맞게 받아올 수 있지만, 쿼리 복잡성이 증가되고 캐싱 처리가 어려워질 수 있음.

cf. 왜 graphQL을 사용하면 캐싱 처리가 어려워지는가?
graphQL은 단일 엔드포인트만 존재하기에 url만으로는 캐싱이 불가능함. 그래서 tanstack query같은걸로 캐싱을 해결하는 것.

cf.

  • graphQL
    • 데이터를 그래프(Graph) 구조로 모델링해서 Query Language로 표현해서 GraphQL이라고 함.
  • Rest는 Represnetational State Transfer의 약자.