sbyeol3 / articles

Learn.. Run.. 🏃
34 stars 1 forks source link

[번역] BFF(Backend for Frontend)란? #42

Open sbyeol3 opened 2 years ago

sbyeol3 commented 2 years ago

부제 : Get to know the benefits of using the BFF pattern in practice 원문 : https://blog.bitsrc.io/bff-pattern-backend-for-frontend-an-introduction-e4fa965128bf

여러분이 마이크로서비스를 이용한 이커머스 어플리케이션을 만든다고 상상해보세요. 고객, 주문, 물건, 장바구니 등에 대한 마이크로서비스가 있을 것입니다. 마이크로서비스는 프론트엔드에서 사용하는 API를 노출합니다. 그러나 프론트엔드에 반환되는 데이터는 프론트엔드가 정확히 원하는 대로 포맷팅되거나 필터링 되어 있지 않을 겁니다.

이런 경우에 프론트엔드는 데이터를 다시 포맷팅할 수 있는 로직이 필요합니다. 프론트엔드에 이런 로직이 담기면 더 많은 브라우저 자원이 소모됩니다.

이와 같은 상황에서 우리는 프론트엔드 로직을 중간 레이어로 옮기고자 하는 목적으로 BFF를 사용합니다. 중간 층이 BFF인 것이죠. 프론트엔드가 특정 데이터를 요청하면 BFF에서 API를 호출합니다.

BFF는 아래와 같은 일을 할 것입니다.

결과적으로 프론트엔드에는 더 적은 로직만이 남습니다. 그래서 BFF는 데이터를 표현하는 것을 능률적으로 해주고 프론트엔드에 초점을 맞춘 인터페이스 제공자의 역할을 합니다.

백엔드-프론트엔드 관계는 더 단순하게 해주는 다른 좋은 방법은 그들끼리 타입을 공유하는 것입니다. 결합되지 않은 프로젝트 사이에서 타입(또는 코드 조각)을 공유하기 위해 어떻게 Bit을 사용하는지 알아보세요.

어떻게 이커머스 예제에 적합한가?

아래 다이어그램은 각 마이크로서비스가 BFF를 통해 프론트엔드와 연결되는 구조를 보여줍니다.

image

BFF의 역할

이미 위에서 봤듯이, BFF는 프론트엔드와 마이크로서비스 사이에서 단순한 인터페이스 역할을 합니다. 이상적으로, 프론트엔드 팀은 BFF를 관리하는 책임을 가집니다.

하나의 BFF는 하나의 UI에 대해만 초점이 맞춰집니다. 결과적으로 프론트엔드를 단순하게 하고 백엔드를 통한 데이터에 대해 일관된 뷰를 볼 수 있게 합니다. 그러면 다음 질문이 나오겠죠. 여러 UI에 대해 여러 BFF를 가질 수 있는 걸까요? 이 질문에 대한 답은 이 아티클 마지막 섹션에서 답해드리고 합니다. 계속 읽어주세요. 😊

BFF는 latency(대기시간)를 증가시킬까?

BFF는 클라이언트와 다른 외부 API, 서비스 등 사이에서 하나의 프록시 서버의 역할을 한다는 것을 알고 있습니다. 요청이 다른 컴포넌트를 통해야 한다면 당연히 대기시간을 증가시킬 것입니다. 그러나 BFF의 대기시간은 프론트엔드에 최적화되지 않은 여러 서비스를 위해 브라우저의 많은 자원을 소비해야 하는 것에 비하면 충분히 무시할 만한 정도입니다.

BFF를 만드는 것은 다른 백엔드/마이크로서비스에 대해 지능적인 배치 호출을 가능하게 하고 한번에 데이터를 반환하거나 데이터를 변환하여 더 편리한 표현식의 데이터를 반환합니다.

이는 한 커넥션을 만드는데 수 초가 걸릴 수 있는 2G나 3G 네트워크의 모바일 클라이언트들에게 굉장히 유용합니다.

BFF 구조를 사용해야 할 때

다른 패턴들과 같이, 여러분의 어플리케이션에서 BFF를 사용하는 것은 컨텍스트와 여러분이 따르고자 하는 아키텍처에 따라 달라집니다. 예를 들어 여러분의 어플리케이션이 단순한 모놀리틱 구조를 따른다면 BFF는 필요하지 않습니다. 가치가 거의 없기 때문입니다.

그러나 마이크로서비스에 의존하고 많은 외부 API나 다른 서비스를 사용해야 한다면, 데이터 흐름을 간소화하고 어플리케이션에 많은 효율성을 제공하므로 BFF를 사용하는 것이 좋습니다.

더불어, 어플리케이션이 특정 프론트엔드 인터페이스에 대해 최적화된 백엔드를 개발해야 하거나 클라이언트가 굉장히 많은 양의 집합 연산을 요구하는 데이터를 사용해야 한다면 BFF는 꽤 적절한 선택지가 됩니다.

여러 개의 BFF를 가질 수 있을까?

그럼요! 그것이 바로 BFF를 선택하는 이유입니다. 전통적인 접근방식(BFF가 없는 어플리케이션)은 모든 클라이언트에 대해 단 하나의 API 게이트웨이만을 가집니다. 아래 그림과 같죠.

image

그러나 BFF를 만드는 목적은 여러분의 클라이언트에 더 맞춰진 인터페이스를 제공하는 것입니다. 예를 들어 모바일 UI에 의해 데이터를 사용하는 것과 웹 브라우저에서 데이터를 사용하는 것은 차이가 있을 수 있습니다. 이런 경우에서 더 나은 데이터 표현방식을 위해 두 개의 BFF를 가질 수 있습니다. 여러 BFF를 가지는 어플리케이션 다이어그램을 살펴봅시다.

image

여러분이 볼 수 있듯이, 각 클라이언트는 BFF를 가지고 있습니다. 이는 서비스에 대한 응답값들을 최적화합니다.

BFF의 장점

image

BFF에 대한 모범 사례

BFF에 대해 알아보는 동안 놀라운 것들이 많았습니다. 그러나 BFF는 모든 위험을 방지할 수 있을까요? 대답은 '아니오'입니다! 모든 다른 기술이나 패턴과 마찬가지로 BFF도 위험이 있습니다. 위험들을 피하기 위해 우리는 모범 사례들을 따라야 합니다.

요약

BFF 패턴은 개발을 도울 뿐만 아니라 UX를 매우 향상시킵니다. 그래서 BFF는 프론트엔드에 집중하며 데이터 최적화와 집계를 고려하는 것이 필수적입니다. 이전에 BFF 패턴을 사용해본 적이 없다면 지금이 시작할 때입니다. 여러분의 경험과 의견을 나중에 저에게 공유해주세요. 😃

wanderer-s commented 2 years ago

좋은 글 잘 읽고갑니다 :)

ironhee commented 2 years ago

좋은 글 번역 감사합니다.

Yoonlang commented 2 years ago

좋은 내용 감사합니다

woongjang commented 2 years ago

잘 읽었습니다 감사합니다 :)

daanta-real commented 1 year ago

감사합니다. 예전에 다른 글을 읽고 "BFF도 서버니까 백엔드 담당자가 같이 만들면 되지 왜 프론트엔드가 직접 만들어야 하는가!" 하는 생각에 아리송했었는데 명쾌한 설명에 오늘 그 해답을 찾은 것 같습니다. 좋은 도움이 되었습니다!