엔터프라이즈 앱 개발 소개

참고 항목

이 전자책은 2017년 봄에 게시되었으며 그 이후로 업데이트되지 않았습니다. 이 책에는 귀중한 기본 많이 있지만 일부 자료는 구식입니다.

플랫폼에 관계없이 엔터프라이즈 앱 개발자는 다음과 같은 몇 가지 문제에 직면합니다.

  • 시간이 지남에 따라 변경될 수 있는 앱 요구 사항
  • 새로운 비즈니스 기회와 과제
  • 앱의 범위 및 요구 사항에 크게 영향을 미칠 수 있는 개발 중 지속적인 피드백

이러한 점을 염두에 두고 시간이 지남에 따라 쉽게 수정하거나 확장할 수 있는 앱을 빌드하는 것이 중요합니다. 앱의 나머지 부분에 영향을 주지 않고 앱의 개별 부분을 독립적으로 개발하고 테스트할 수 있는 아키텍처가 필요하기 때문에 이러한 적응성을 고려한 디자인은 어려울 수 있습니다.

많은 엔터프라이즈 앱은 둘 이상의 개발자가 필요할 정도로 충분히 복잡합니다. 여러 개발자가 앱에 통합될 때 원활하게 결합되도록 하면서 여러 개발자가 독립적으로 앱의 여러 부분에서 효과적으로 작업할 수 있도록 앱을 디자인하는 방법을 결정하는 것은 중요한 과제일 수 있습니다.

하나의 앱을 디자인하고 빌드하는 기존의 접근 방식은 이른바 모놀리식 앱을 구성하는 결과를 초래하며, 여기서 구성 요소는 명확한 분리 없이 긴밀하게 결합됩니다. 일반적으로 이러한 모놀리식 접근 방식은 앱의 다른 구성 요소를 중단하지 않고 버그를 해결하기 어려울 수 있고 새 기능을 추가하거나 기존 기능을 교체하기 어려울 수 있으므로 유지 관리를 하기가 어렵고 비효율적인 앱을 야기합니다.

이러한 문제에 대한 효과적인 해결 방법은 앱에 쉽게 통합할 수 있는 느슨하게 결합된 개별 구성 요소로 앱을 분할하는 것입니다. 이러한 접근 방식은 다음과 같은 몇 가지 이점을 제공합니다.

  • 이를 통해 개별 기능을 다른 개인 또는 팀에서 개발, 테스트, 확장 및 유지 관리할 수 있습니다.
  • 재사용을 촉진하며 앱의 수평 기능(예: 인증 및 데이터 액세스)과 수직 기능(예: 앱별 비즈니스 기능) 간의 문제를 깔끔하게 분리합니다. 이렇게 하면 앱 구성 요소 간의 종속성과 상호 작용을 보다 쉽게 관리할 수 있습니다.
  • 이는 다른 개인 또는 팀이 전문 지식에 따라 특정 작업이나 기능에 집중할 수 있도록 하여 역할 분리를 유지하는 데 도움이 됩니다. 특히 사용자 인터페이스와 앱의 비즈니스 논리를 더 깔끔하게 분리할 수 있습니다.

그러나 앱을 느슨하게 결합된 개별 구성 요소로 분할할 때 해결해야 할 많은 문제가 있습니다. 여기에는 다음이 포함됩니다.

  • 사용자 인터페이스(UI) 컨트롤과 그것의 논리 간에 문제를 완전히 분리하는 방법을 결정. 엔터프라이즈 앱을 만들 Xamarin.Forms 때 가장 중요한 결정 중 하나는 비즈니스 논리를 코드 숨김 파일에 배치할지, 아니면 사용자 인터페이스 컨트롤과 해당 논리 간의 클린 분리를 만들어 앱을 더 기본 지속 가능하고 테스트 가능하게 만들지 여부입니다. 자세한 내용은 Model-View-ViewModel을 참조하세요.
  • 종속성 주입 컨테이너를 사용할지 여부를 결정 종속성 주입 컨테이너는 종속성이 주입된 클래스의 인스턴스를 생성하고 컨테이너 구성에 따라 수명을 관리하는 기능을 제공하여 개체 간의 종속성 결합을 줄입니다. 자세한 내용은 종속성 주입을 참조하세요.
  • 개체 및 형식 참조로 연결하는 데 불편한 구성 요소 간 느슨하게 결합된 메시지 기반 통신과 플랫폼 제공 이벤트 중에서 하나를 선택. 자세한 내용은 느슨하게 결합된 구성 요소 간의 통신 소개 를 참조하세요.
  • 탐색을 호출하는 방법 및 탐색 논리가 상주해야 하는 위치를 포함해 여러 페이지를 탐색하는 방법을 결정. 자세한 내용은 탐색을 참조하세요.
  • 정확성을 위해 사용자 입력의 유효성을 검사하는 방법을 결정 여기서는 사용자 입력의 유효성을 검사하는 방법과 유효성 검사 오류를 사용자에게 알리는 방법도 함께 결정해야 합니다. 자세한 내용은 유효성 검사를 참조하세요.
  • 인증을 수행하는 방법 및 권한 부여를 사용하여 리소스를 보호하는 방법을 결정. 자세한 내용은 인증 및 권한 부여를 참조 하세요.
  • 데이터를 안정적으로 검색하는 방법 및 데이터를 캐시하는 방법을 포함하여 웹 서비스에서 원격 데이터에 액세스하는 방법을 결정. 자세한 내용은 원격 데이터 액세스를 참조 하세요.
  • 앱을 테스트하는 방법을 결정 자세한 내용은 단위 테스트를 참조하세요.

이 가이드에서는 이러한 문제에 대한 지침을 제공하고 플랫폼 간 엔터프라이즈 앱을 빌드 Xamarin.Forms하기 위한 핵심 패턴 및 아키텍처에 중점을 둡니다. 이 지침은 일반적인 Xamarin.Forms 엔터프라이즈 앱 개발 시나리오를 해결하고 MVVM(Model-View-ViewModel) 패턴에 대한 지원을 통해 프레젠테이션, 프레젠테이션 논리 및 엔터티의 문제를 구분하여 적응 가능하고 기본 달성 가능하고 테스트 가능한 코드를 생성하는 데 도움이 되는 것을 목표로 합니다.

예제 애플리케이션

이 가이드에는 다음 기능이 포함된 온라인 스토어인 eShopOnContainers 샘플 애플리케이션이 포함되어 있습니다.

  • 백 엔드 서비스에 대한 인증 및 권한 부여
  • 셔츠, 커피 머그잔 및 기타 마케팅 항목의 카탈로그를 검색
  • 카탈로그 필터링
  • 카탈로그에서 항목 주문
  • 사용자의 주문 기록 보기
  • 설정 구성

샘플 애플리케이션 아키텍처

그림 1-1에서는 샘플 애플리케이션의 아키텍처에 대한 개략적인 개요를 제공합니다.

eShopOnContainers high-level architecture

그림 1-1: eShopOnContainers 고급 아키텍처

샘플 애플리케이션과 함께 제공되는 세 가지 클라이언트 앱은 다음과 같습니다.

  • ASP.NET Core를 사용하여 개발된 MVC 애플리케이션
  • Angular 2 및 Typescript를 사용하여 개발된 SPA(단일 페이지 애플리케이션) 웹 애플리케이션에 대한 이 접근 방식은 각 작업을 사용하여 서버를 왕복하는 것을 방지합니다.
  • iOS, Android 및 UWP(유니버설 Windows 플랫폼)를 지원하는 모바일 앱으로 개발되었습니다Xamarin.Forms.

웹 애플리케이션에 관한 자세한 내용은 ASP.NET Core 및 Microsoft Azure를 사용하여 최신 웹 애플리케이션 설계 및 개발을 참조하세요.

샘플 애플리케이션에 포함되는 백 엔드 서비스를 열거하면 다음과 같습니다.

  • ASP.NET Core ID 및 IdentityServer를 사용하는 ID 마이크로 서비스
  • EntityFramework Core를 이용한 SQL Server 데이터베이스를 사용하는 CRUD(데이터 기반 만들기, 읽기, 업데이트, 삭제) 서비스인 카탈로그 마이크로 서비스
  • 도메인 기반 디자인 패턴을 사용하는 도메인 기반 서비스인 주문 마이크로 서비스
  • Redis Cache를 사용하는 데이터 기반 CRUD 서비스인 basket 마이크로 서비스

이러한 백 엔드 서비스는 ASP.NET Core MVC를 사용하여 마이크로 서비스로 구현되며 단일 Docker 호스트 내에서 고유한 컨테이너로 배포됩니다. 전체적으로 이러한 백 엔드 서비스를 일컬어 eShopOnContainers 참조 애플리케이션이라고 합니다. 클라이언트 앱은 REST(Representational State Transfer) 웹 인터페이스를 통해 백 엔드 서비스와 통신합니다. 마이크로 서비스 및 Docker에 대한 자세한 내용은 컨테이너화된 마이크로 서비스를 참조 하세요.

백 엔드 서비스의 구현에 관한 자세한 내용은 .NET 마이크로 서비스: 컨테이너화된 .NET 애플리케이션에 대한 아키텍처를 참조하세요.

모바일 앱

이 가이드에서는 eShopOnContainers 모바일 앱을 예로 사용하여 Xamarin.Forms플랫폼 간 엔터프라이즈 앱을 빌드하는 데 중점을 둡니다. 그림 1-2는 앞에서 설명한 기능을 제공하는 eShopOnContainers 모바일 앱의 페이지를 보여줍니다.

The eShopOnContainers mobile app

그림 1-2: eShopOnContainers 모바일 앱

모바일 앱은 eShopOnContainers 참조 애플리케이션에서 제공하는 백 엔드 서비스를 사용합니다. 그러나 백 엔드 서비스를 배포하지 않으려는 사용자를 위해 모의 서비스의 데이터를 사용하도록 구성할 수 있습니다.

eShopOnContainers 모바일 앱은 다음 Xamarin.Forms 기능을 실행합니다.

  • XAML
  • 컨트롤
  • 바인딩
  • 변환기
  • 스타일
  • 애니메이션
  • 명령
  • 동작
  • 트리거
  • 효과
  • 사용자 지정 렌더러
  • MessagingCenter
  • 사용자 지정 컨트롤

이 기능에 대한 자세한 내용은 설명서Mobile AppsXamarin.Forms를 사용하여 만들기를 참조 Xamarin.Forms 하세요.

또한 eShopOnContainers 모바일 앱의 일부 클래스에 대한 단위 테스트가 제공됩니다.

모바일 앱 솔루션

eShopOnContainers 모바일 앱 솔루션은 소스 코드 및 기타 리소스를 프로젝트로 구성합니다. 모든 프로젝트는 폴더를 사용하여 소스 코드 및 기타 리소스를 여러 범주로 구성합니다. 다음 표에서는 eShopOnContainers 모바일 앱을 구성하는 프로젝트를 간략하게 설명합니다.

프로젝트 설명
eShopOnContainers.Core 이 프로젝트는 공유 코드 및 공유 UI를 포함하는 PCL(이식 가능한 클래스 라이브러리) 프로젝트입니다.
eShopOnContainers.Droid 이 프로젝트는 Android 특정 코드를 보유하며 Android 앱의 진입점입니다.
eShopOnContainers.iOS 이 프로젝트는 iOS 특정 코드를 보유하며 iOS 앱의 진입점입니다.
eShopOnContainers.UWP 이 프로젝트는 UWP(유니버설 Windows 플랫폼) 특정 코드를 보유하며 Windows 앱의 진입점입니다.
eShopOnContainers.TestRunner.Droid 이 프로젝트는 eShopOnContainers.UnitTests 프로젝트의 Android 테스트 실행기입니다.
eShopOnContainers.TestRunner.iOS 이 프로젝트는 eShopOnContainers.UnitTests 프로젝트의 iOS 테스트 실행기입니다.
eShopOnContainers.TestRunner.Windows 이 프로젝트는 eShopOnContainers.UnitTests 프로젝트의 유니버설 Windows 플랫폼 테스트 실행기입니다.
eShopOnContainers.UnitTests 이 프로젝트에는 eShopOnContainers.Core 프로젝트에 대한 단위 테스트가 포함되어 있습니다.

eShopOnContainers 모바일 앱의 클래스는 거의 또는 전혀 수정하지 않고 모든 Xamarin.Forms 앱에서 다시 사용할 수 있습니다.

eShopOnContainers.Core 프로젝트

eShopOnContainers.Core PCL 프로젝트에는 다음 폴더가 포함되어 있습니다.

폴더 설명
애니메이션 XAML에서 애니메이션을 사용할 수 있도록 하는 클래스를 포함합니다.
동작 뷰 클래스에 노출되는 동작을 포함합니다.
컨트롤 앱에서 사용하는 사용자 지정 컨트롤을 포함합니다.
변환기 바인딩에 사용자 지정 논리를 적용하는 값 변환기를 포함합니다.
효과 특정 Entry 컨트롤의 EntryLineColorEffect 테두리 색을 변경하는 데 사용되는 클래스를 포함합니다.
예외 사용자 지정 ServiceAuthenticationException을 포함합니다.
확장 VisualElementIEnumerable 클래스에 대한 확장 메서드를 포함합니다.
도우미 앱에 대한 도우미 클래스를 포함합니다.
모델 앱에 대한 모델 클래스를 포함합니다.
속성 .NET 어셈블리 메타데이터 파일을 포함합니다 AssemblyInfo.cs.
Services 앱에 제공되는 서비스를 구현하는 인터페이스 및 클래스를 포함합니다.
트리거 XAML에서 BeginAnimation 애니메이션을 호출하는 데 사용되는 트리거를 포함합니다.
Validations 데이터 입력 유효성 검사와 관련된 클래스를 포함합니다.
ViewModels 페이지에 노출되는 애플리케이션 논리를 포함합니다.
앱의 페이지를 포함합니다.
플랫폼 프로젝트

플랫폼 프로젝트에는 효과 구현, 사용자 지정 렌더러 구현 및 기타 플랫폼별 리소스가 포함됩니다.

요약

Xamarin의 플랫폼 간 모바일 앱 개발 도구 및 플랫폼은 B2E, B2B 및 B2C 모바일 클라이언트 앱에 대한 포괄적인 솔루션을 제공하여 모든 대상 플랫폼(iOS, Android 및 Windows)에서 코드를 공유하는 기능을 제공하고 총 소유 비용을 절감하는 데 도움이 됩니다. 앱은 네이티브 플랫폼 모양과 느낌을 유지하면서 사용자 인터페이스 및 앱 논리 코드를 공유할 수 있습니다.

엔터프라이즈 앱 개발자는 개발 중에 앱의 아키텍처를 변경할 수 있는 몇 가지 문제에 직면해 있습니다. 따라서 시간이 지남에 따라 수정하거나 확장할 수 있도록 앱을 빌드하는 것이 중요합니다. 이러한 적응성을 고려한 디자인은 어려울 수 있으며 다만 일반적으로 앱에 쉽게 통합할 수 있는 느슨하게 결합된 개별 구성 요소로 앱을 분할하는 작업이 필요합니다.