본문 바로가기

카테고리 없음

Backends for Frontends pattern

아래 글을 번역했습니다.

 

Backends for Frontends pattern - Azure Architecture Center

Explore the Backends for Frontends pattern, which creates separate backend services to be consumed by specific frontend applications or interfaces.

learn.microsoft.com

특정 프론트엔드 애플리케이션이나 인터페이스에서 사용할 별도의 백엔드 서비스를 만듭니다. 이 패턴은 여러 인터페이스에 대해 단일 백엔드를 사용자 지정하지 않으려는 경우에 유용합니다. 이 패턴은 샘 뉴먼이 처음 설명했습니다.

Context and problem

애플리케이션은 처음에 데스크톱 웹 UI를 타깃으로 개발될 수 있습니다. 일반적으로 해당 UI에 필요한 기능을 제공하는 백엔드 서비스가 동시에 개발됩니다. 애플리케이션의 사용자 기반이 증가함에 따라 동일한 백엔드와 상호 작용해야 하는 모바일 애플리케이션이 개발됩니다. 백엔드 서비스는 데스크톱과 모바일 인터페이스의 요구 사항을 모두 충족하는 범용 백엔드가 됩니다.

 

하지만 모바일 디바이스의 기능은 화면 크기, 성능, 디스플레이 제한 등 측면에서 데스크톱 브라우저와 크게 다릅니다. 따라서 모바일 애플리케이션 백엔드에 대한 요구 사항은 데스크톱 웹 UI와 다릅니다. 

 

이러한 차이로 인해 백엔드에 대한 요구 사항이 서로 상충됩니다. 백엔드는 데스크톱 웹 UI와 모바일 애플리케이션에 모두 서비스를 제공하기 위해 정기적이고 중요한 변경이 필요합니다. 종종 별도의 인터페이스 팀이 각 프론트엔드에서 작업하여 백엔드가 개발 프로세스의 병목 현상이 발생하는 경우가 있습니다. 상충되는 업데이트 요구 사항과 두 프론트엔드 모두에서 서비스가 계속 작동하도록 유지해야 하기 때문에 배포 가능한 단일 리소스에 많은 노력을 기울여야 할 수 있습니다.

개발 활동이 백엔드 서비스에 집중되면 백엔드를 관리하고 유지보수하기 위한 별도의 팀이 만들어질 수 있습니다. 결국 인터페이스 팀과 백엔드 개발 팀 간의 단절이 발생하여 백엔드 팀은 서로 다른 UI 팀의 경쟁적인 요구 사항 간의 균형을 맞춰야 하는 부담을 안게 됩니다. 한 인터페이스 팀에서 백엔드에 변경이 필요한 경우, 해당 변경 사항을 백엔드에 통합하기 전에 다른 인터페이스 팀과 함께 검증해야 합니다. 

Solution

사용자 인터페이스당 하나의 백엔드를 생성하세요. 다른 프론트엔드 경험에 영향을 미칠 걱정없이 각 백엔드의 동작과 성능을 프론트엔드 환경의 요구사항에 가장 잘 맞도록 미세조정할 수 있습니다.

 

각 백엔드는 하나의 인터페이스에 특화되어 있으므로 해당 인터페이스에 최적화할 수 있습니다. 결과적으로 모든 인터페이스에 대한 요구 사항을 충족하려는 일반 백엔드보다 더 작고, 덜 복잡하며, 더 빠를 가능성이 높습니다. 각 인터페이스 팀은 자체 백엔드를 제어할 수 있는 자율성을 가지며 중앙 집중식 백엔드 개발 팀에 의존하지 않습니다. 따라서 인터페이스팀은 언어 선택, 릴리즈 주기, 워크로드 우선순위 지정, 백엔드의 기능 통합에 있어 유연성을 확보할 수 있습니다. 

 

When to use this pattern

- 공유 또는 범용 백엔드 서비스는 상당한 개발 오버헤드를 감수하면서 유지 관리해야 할 때

- 특정 클라이언트 인터페이스의 요구 사항에 맞게 백엔드를 최적화하려고 할 때

- 여러 인터페이스를 수용하기 위해 범용 백엔드에 사용자 지정이 이루어질 때

 

인터페이스가 백엔드에 동일하거나 유사한 요청을 하는 경우, 하나의 인터페이스만 백엔드와 상호작용하는데 사용하는 경우는 이 패턴은 적합하지 않을 수 있습니다.