참조
https://www.youtube.com/watch?v=XqQJ6-l26QM
위 영상을 보고 정리한 글, 영어 촙오라 좀 틀린 부분이 있을 수도 없을 수도 ~
BFF를 활용하는 방법을 알아보기 전에, 기존 특정 레거시 프로젝트에 대해서 살펴보겠습니다.
범용 API가 존재하고, 처음에는 웹 클라이언트만 존재하는 상황이 있을 수 있습니다. 시간이 지남에 따라 iOS, 안드로이드가 추가되고 더 많은 클라이언트들이 추가될 수 있습니다.
이렇게 다양한 클라이언트가 동일한 API를 사용한다면 이 API가 실제로 목적에 적합하지 않은 상황도 일어날 수 있습니다.
예를 들어, 쇼핑 앱같은 경우 웹 클라이언트 환경에서는 상품 리스트의 경우 상품의 디테일한 정보, 바코드 등까지도 바로 보여줄 수 있지만, 모바일 환경에서는 공간이 매우 제한이 되어 있기 때문에 디테일한 정보, 바코드 등을 보여주지 못하는 상황이 그런 경우입니다.
요즘 또 백엔드에서 모놀리스 아키텍처 에서 마이크로 서비스 아키텍처(MSA)로 구성을 하는 경우가 많습니다. 따라서 추적해야 하는 엔드포인트가 여러개가 존재합니다. 또 타사의 API를 사용하고 있다면 이에 대한 크레덴셜(자격증명?)을 관리하고 보안을 유지하는것은 매우 복잡해집니다.
아래와 같은 API가 존재한다고 할 때(회의 일정 앱 같은거라고 예를 들었음)
페이징 정보를 제공하고, 웹에서는 이를 유용하게 사용이 가능하지만 모바일에서는 한 번에 2~3개 정도를 보여주기 때문에 실제로 사용하지 않을 모든 이벤트를 다운로드할 필요는 없습니다.
iOS 앱에서는 회의의 디테일한 정보를 들어가야 지도가 보여서 그 전에는 필요가 없음에도 위도 경도를 들고 있는 상황도 생김
또 speakers
는 API의 ID 문자열로 다른 회의, 워크숍 등에도 사용이 된다. 이를 요청하면 다음 사진과 같은 JSON을 받을 수 있다.
이러한 사용하지 않을 정보들을 포함해 여러 네트워크 요청을 홈 화면에서 하고 있는게 홈 화면 문제라고 설명을 함. 이로 인해 메모리 문제, 배터리 문제 등등이 발생한다.
이런 부분을 해결 하는게 BFF임
이의 아이디어는 API에 연결되기 전에 또 다른 백엔드(BFF)를 넣습니다. 이는 특히 클라이언트의 요구 사항을 위해 존재하고, 클라이언트는 이 백엔드에 모든 요청을 처리할 수 있습니다. 따라서 훨씬 더 빠르게 어플리케이션을 업데이트하고 개발이 가능합니다.
회의 앱에서 BFF를 사용하여 GET을 하면 한 번의 요청으로 다음과 같은 JSON을 얻을 수 있다.
이전에는 API ID 값을 받아서 더 요청을 하였지만, 위 사진에서는 바로 값이 출력되고 있다.
여기서 BFF는 iOS 팀에서 관리한다고 설명 하심. 따라서 이 서버는 Swift로 개발을 한다고 함.
allegro, INGF(금융쪽 회사인듯 Swift로 서버를 만들어서 돈을 주고 받는다고 함), Amazon 프라임 비디오 등 스위프트로 서버를 사용하는 회사는 여러개 존재한다고 함.
서버로 코드를 공유할 수 있는 기능을 소개하심. (JSON에서 날짜를 표시하는 것에 표준이 잘 없나봄..?, 잘 모르겠지만 날짜로 예를 들었음)
API에서 날짜를 가져오는데 알 수 없는 형식으로 되어 있는 경우, 포맷터를 작성해야 합니다. 이는 미래의 어떤 시점에서 변경될 여지가 있는데 이를 서버에서 코드를 공유하여 변경 한다면, iOS에 앱 업데이트를 위해 심사를 하고 배포를 다시 해야하는 그런 점을 줄일 수 있다고 설명함
위 사진과 같이 공유 모델 패키지(프론트엔드와 BFF가 사용할 모델들을 포함하는)를 만들고, 이를 스위프트 패키지 매니저(SPM)을 통해 공유할 수 있다.
회의 앱에 대한 Codable
구조체를 아래와 같이 만들수 있습니다.
그리고 날짜에 관해서도 Date
타입을 사용이 가능한데 이는 BFF도 스위프트로 만들어서 파운데이션에 포함된 Date
타입으로 서버에 넘어갈것이기 때문임다.(라고 이해를 했슴니다.)
요약을 하자면, 개발자는 앱에서 네트워킹을 위한 복잡한 로직을 앱 스토어 배포 프로세스를 거치지 않고 쉽게 업데이트할 수 있는 별도의 컨테이너로 이동할 수 있고, 프론트에서 어느정도 제어가 가능하여 사용자에게도 훨씬 더 나은 유저 경험을 제공할 수 있습니다. iOS 앱에서 필요한 정보만을 얻기 때문임다.
BFF에 관해 좀 알게되었고, 나중에는 프론트에서도 어느 정도 서버를 관리하는 일을 하려나 싶은 생각도 함. iOS 앱에 맞는 서버를 개발하는건 iOS 팀에서 하는게 좋아보이긴 해서,,? 베이퍼도 은젠가는 공부해봐야게씀다~