패턴 개요

웹 또는 모바일 애플리케이션을 서로 다른 애플리케이션 팀에서 독립적으로 테스트, 배포 및 소유할 수 있는 마이크로서비스 세트로 구축합니다. REST API로 서비스를 노출하고 API를 사용하여 다른 마이크로서비스와 통신합니다.

웹 또는 모바일 앱에 대한 가장 중요한 요구 사항은 다음과 같습니다.

  • 브라우저 및 모바일 장치와 같은 다양한 클라이언트를 지원해야 합니다.
  • 안전해야 합니다.
  • 연중무휴 24시간 가용성을 제공해야 함
  • 수요 급증에 대응하기 위해 확장해야 합니다.
  • 낮은 네트워크 대기시간을 처리해야 함
  • 업데이트 또는 수정 시 작동 중지 시간이 0이어야 합니다.

Oracle Cloud Infrastructure(OCI)는 가장 까다로운 웹 및 모바일 앱을 위해 확장 가능하고 안전하며 안정적이며 고성능의 인프라를 제공합니다. 이 문서에서는 웹 또는 모바일 앱을 설계하기 위한 설계 원칙과 이러한 원칙에 따라 참조 아키텍처를 제시합니다.

설계 원칙

경량 오픈 소스 프레임워크 및 완성도가 높은 프로그래밍 언어 사용

Graal Development Kit for Micronaut 또는 Helidon을 사용하여 앱을 빌드합니다. 둘 다 로깅, 원격 측정, 보안 및 구성과 같은 기능은 물론 REST API 구축과 같은 공통 패턴을 제공합니다.

수백만 명의 개발자가 확장 가능하고 탄력적이며 안전한 앱을 구축하는 데 사용하는 풍부한 라이브러리 세트가 포함된 플랫폼 독립적인 이식 가능한 Java를 사용합니다.

API를 사용하여 통신하는 서비스형 앱 구축

앱을 여러 앱 팀에서 독립적으로 테스트, 배포 및 소유할 수 있는 마이크로서비스 세트로 구축합니다. 잘 정의된 REST API와 서비스를 노출하고 해당 API를 사용하여 다른 서비스와 통신합니다. OCI API Gateway를 모든 클라이언트의 단일 진입점으로 사용한 다음 API 요청을 해당 서비스로 라우팅합니다.

OCI Service Mesh를 사용하면 Oracle Container Engine for Kubernetes(OKE) 클러스터에 호스팅된 서비스 간 통신을 간소화하고 보호할 수 있습니다. 또한 OCI Service Mesh를 사용하면 애플리케이션 Pod에서 사이드카로 실행되는 프록시 구성요소에서 내보낸 측정지표와 로그를 통해 서비스 간의 모든 네트워크 트래픽을 관찰할 수 있습니다.

구축, 테스트 및 배포 자동화

코드를 자주 제공하고 다운타임을 최소화하는 방식으로 앱을 배포합니다. OCI DevOps를 사용하여 일관되고 자동화된 방식으로 앱을 개발, 구축, 패키지화, 테스트 및 배포할 수 있습니다. Oracle Cloud Infrastructure Resource Manager를 사용하면 API 게이트웨이, 로드 밸런서, 데이터베이스, Kubernetes 클러스터 및 기타 서비스와 같은 인프라 요소를 안정적으로 프로비저닝할 수 있습니다.

완전 관리형 서비스를 사용하여 앱 개발, 런타임 및 데이터 관리의 복잡성 제거

Oracle Container Engine for Kubernetes(OKE), Oracle Cloud Infrastructure Object Storage, Oracle Autonomous Database와 같은 완전 관리형 서비스를 사용합니다. 이 서비스는 가용성 및 확장성을 극대화하여 앱의 변화하는 요구에 대응합니다. 완전 관리형 서비스는 앱의 가용성을 보장하고, 앱 인프라를 호스팅하는 데이터 센터에서 장애가 발생할 경우 이를 보호합니다.

앱 계층을 Stateless로 유지

가능한 경우 앱의 중간 계층 구성 요소를 무상태로 유지합니다. 필요한 경우 Oracle Autonomous Database를 사용하여 앱 상태를 저장하면 일관성, 내구성 및 빠른 복구가 가능합니다.

모든 데이터에 대한 완전한 기능을 지원하는 컨버지드 데이터베이스 사용

앱은 테이블 형식(관계형), 비구조적, XML, JSON, 공간 또는 그래프와 같은 다양한 형식의 데이터를 사용할 수 있습니다. 전통적으로 이러한 다양성에는 관계형 데이터용 관계형 데이터베이스, 비구조적 데이터용 문서 저장소, 계층적으로 링크된 데이터용 그래프 데이터베이스 등 각 데이터 형식마다 다른 종류의 데이터베이스가 필요했습니다. 그러나 여러 데이터베이스를 사용하면 운영상의 복잡성과 데이터 불일치가 발생하는 경우가 많습니다. 대신 단일 다중 모델 Oracle Autonomous Database를 사용하여 여러 유형 및 형식의 데이터를 저장, 인덱스화 및 검색할 수 있습니다.

계측기 엔드투엔드 모니터링 및 추적

개발 팀이 소유한 서비스와 앱에 대한 가시성을 확보하기 위해 자체 관찰 가능성 도구를 개발하려는 유혹입니다. 앱에는 다양한 앱과 비즈니스 팀이 소유한 수백 개의 서비스가 포함될 수 있습니다. 각 팀이 자체 도구를 구축하는 대신 Oracle Cloud Observability and Management Platform을 사용하여 솔루션을 중앙 집중화합니다. 이 플랫폼은 전체 스택의 모든 계층을 모니터링하여 앱에서 문제를 찾아 해결합니다.

자동화된 데이터 복제 및 장애 복구를 통해 단일 장애 지점 제거

앱은 탄력성을 유지하고 장애로부터 복구하며 다운타임과 데이터 손실을 최소화해야 합니다. 다음과 같은 방법으로 중복성을 구현하여 단일 Failure 지점을 제거합니다.

  • OKE에서 다중 가용성 도메인 영역에서 각 노드가 별도의 가용성 도메인에 있는 최소 3개의 노드로 노드 풀을 설정합니다.
  • 단일 가용성 도메인 영역에서 최소 3개의 노드로 OKE에 노드 풀을 설정합니다. 각 노드는 별도의 결함 도메인에 있습니다.
  • OKE에서 중복성을 위해 단일 공용 로드 밸런서 및 다중 수신 컨트롤러가 있는 다중 전용 로드 밸런서를 사용합니다.
  • 재해가 앱이 호스팅되는 기본 영역에 충돌하는 경우 파일럿 재해 복구 토폴로지를 설계하여 앱을 재시작하고 대기 영역에서 워크로드를 빠르게 복원합니다.
  • 리전 실패로부터 복구하기 위해 앱을 대기 영역에 배치하도록 CI/CD 파이프라인을 구성합니다.
  • 블록 스토리지 볼륨 복제 및 오브젝트 스토리지 복제를 사용하여 여러 영역 간에 블록 스토리지 볼륨을 복제합니다.
  • 기본 영역이 실패할 경우 Oracle Cloud Infrastructure Resource Manager를 사용하여 대기 영역에 필요한 인프라를 프로비전합니다.
  • 자율운영 Data Guard를 사용하여 운영 작동 중지 시간 및 데이터 손실을 최소화하도록 Oracle Autonomous Database를 설정하십시오.

또한 탄력성을 테스트하여 앱이 간헐적으로 발생하는 비정상적인 조건에서 어떻게 동작하는지 확인합니다. 예를 들어 혼돈 테스트에 Chaos Monkey 프레임워크를 채택할 수 있습니다. 또한 스로틀링, 회로 차단기 및 재시도 메커니즘을 사용하여 탄력적인 앱을 구현합니다.

앱 수명 주기를 보호하기 위한 심층 방어 접근 방식 구현

악성 개체에 의한 공격으로부터 보호할 수 있는 충분한 보안으로 앱을 설계해야 합니다. 앱, 클라이언트측 코드 및 타사 코드를 검토하여 의심스러운 동작을 확인합니다. WAF(웹 애플리케이션 방화벽)를 사용하여 필터링 규칙을 사용하고 DDoS 보호를 설정하여 원치 않는 트래픽으로부터 앱을 보호합니다.

비밀번호 및 인증/권한 부여 토큰과 같은 중요한 정보를 Oracle Cloud Infrastructure Vault에 저장하십시오. etcd에서 Kubernetes 암호의 암호화를 설정합니다. 앱이 신뢰할 수 있는 엔티티를 가장하기 어렵게 만드는 데 사용하는 인증서의 짧은 수명을 회전하고 설정합니다.

최소 권한 원칙에 따라 사용자 및 서비스 계정에 작업을 수행하는 데 필요한 최소 권한만 부여되도록 합니다. Oracle Cloud Infrastructure Identity and Access Management(IAM)를 사용하여 앱 및 해당 구성요소에 액세스할 수 있는 사용자를 제어합니다. IAM에서 다중 인증을 사용하면 관리자가 앱 및 해당 구성요소에 대한 액세스를 제한할 수 있도록 강력한 인증을 적용할 수 있습니다.

구조

이 아키텍처 패턴은 OKE의 Kubernetes 클러스터에 컨테이너로 배포된 마이크로서비스로 구성된 웹 또는 모바일 애플리케이션에 권장됩니다. 데이터 지속성은 Oracle Autonomous Database를 사용하여 달성됩니다. 앱의 미디어 및 이미지 파일은 오브젝트 스토리지에 저장됩니다.

다음 다이어그램에는 이 아키텍처가 설명되어 있습니다.



아키텍처-maf-web-mobile-oracle.zip

아키텍처의 구성 요소는 다음과 같습니다.

  • Web Application Firewall (WAF)

    WAF는 악성 및 원치 않는 인터넷 트래픽으로부터 앱을 보호합니다. 모든 인터넷 연결 엔드포인트를 보호할 수 있으므로 모든 앱에서 일관된 규칙 적용이 가능합니다.

  • Oracle Cloud Infrastructure API 게이트웨이

    OCI API 게이트웨이는 OKE 및 Oracle Cloud Infrastructure에서 실행되는 기타 모든 서비스 또는 엔드포인트에 대해 보호된 RESTful API 엔드포인트를 제공하는 완전 관리형 지역 API 게이트웨이 서비스입니다. 이 아키텍처에서 요청은 OKE에서 실행 중인 서비스로 요청을 전달하는 전용 로드 밸런서로 라우팅됩니다.

  • Oracle Cloud Infrastructure Identity and Access Management(OCI IAM)

    OCI IAM은 강력한 다중 요소 인증, 소셜 로그인, 최종 사용자를 위한 자체 등록, ID 관리, SSO(Single Sign-On) 및 앱용 ID 거버넌스를 제공합니다.

  • Load balancer

    로드 밸런싱 서비스는 아키텍처의 컨테이너화된 마이크로서비스의 OKE 노드와 같은 가상 클라우드 네트워크에서 도달할 수 있는 여러 서버로 단일 시작점에서 자동으로 트래픽 분배를 제공합니다.

  • Oracle Autonomous Database

    Oracle Autonomous Database는 탄력적으로 확장되고 빠른 질의 성능을 제공하며 데이터베이스 관리가 필요 없는 완전 관리형 데이터베이스 환경입니다. 하드웨어를 구성 또는 관리하거나 소프트웨어를 설치할 필요가 없습니다.

  • Object storage

    오브젝트 스토리지를 사용하면 데이터베이스 백업, 분석 데이터, 이미지 및 비디오와 같은 리치 콘텐츠 등 모든 콘텐츠 유형의 대량의 정형 및 비정형 데이터에 빠르게 접근할 수 있습니다. 빠르고 즉각적이며 자주 액세스하는 데 필요한 핫 스토리지에 표준 스토리지를 사용합니다. 장기간 보존하고 거의 액세스하지 않는 콜드 스토리지에는 아카이브 스토리지를 사용합니다.

    이 아키텍처에서 앱의 미디어 자산은 표준 스토리지 클래스의 버킷에 있는 오브젝트 스토리지에 저장됩니다.

  • Kubernetes용 컨테이너 엔진(OKE)

    OKE는 컨테이너화된 앱을 클라우드에 배포할 수 있는 확장 가능하고 가용성이 뛰어난 완전 관리형 서비스입니다. 앱에 필요한 컴퓨트 리소스를 지정하면 OKE가 기존 테넌시의 OCI에서 프로비저닝합니다. Container Engine은 Kubernetes를 사용하여 호스트 클러스터 전반에 걸쳐 컨테이너화된 앱의 배포, 확장 및 관리를 자동화합니다.

  • Service mesh

    Oracle Cloud Infrastructure(OCI) Service Mesh는 OCI가 서비스 간 통신을 위해 관리하는 애플리케이션 인프라 계층입니다. 관찰 가능성, 보안 및 트래픽 관리에 대한 표준을 정의하여 클라우드 네이티브 앱의 개발 및 배포를 간소화합니다. Service Mesh는 애플리케이션이 인식할 필요 없이 애플리케이션 코드와 함께 고객의 포드에 배포되는 경량 프록시 배열로 구현됩니다.

대안

마이크로서비스를 사용하는 것이 모바일 앱이나 웹 앱을 만드는 유일한 방법은 아닙니다. 이 대체 아키텍처 패턴은 로드 밸런서, 자동 확장 웹/애플리케이션 계층, 고가용성 데이터베이스로 구성된 3계층 토폴로지를 보여줍니다.

모든 리소스는 OCI 리전의 단일 가용성 도메인에 배치됩니다. 계층은 단일 VCN(가상 클라우드 네트워크)의 개별 서브넷에 격리됩니다. 보안 목록은 각 계층의 리소스에 대한 네트워크 트래픽을 규제하는 방화벽 역할을 합니다. 각 서브넷에 연결된 라우트 테이블에는 VCN 외부의 대상으로 트래픽을 전달하기 위한 규칙이 포함되어 있습니다.

단일 페이지 아키텍처, PWA(Progressive Web Applications) 또는 JAMStack와 같은 다른 대체 아키텍처는 고려할 수 있지만 여기에 표시되지는 않습니다.

다음 다이어그램은 이 대체 아키텍처를 보여 줍니다.



아키텍처-maf-web-mobile-alternative-oracle.zip

예제 사용 사례

이 사용 사례에서는 온라인으로 GPU를 판매하는 매장에 대한 고객 주문 시스템을 설명합니다.

다음 다이어그램은 이 사용 사례의 아키텍처를 보여줍니다.



architecture-maf-web-mobile-example-oracle.zip

공용 인터넷의 트래픽은 DNS 서비스에서 WAF(웹 애플리케이션 방화벽)를 통해 인터넷 게이트웨이로 라우팅되며, 이 게이트웨이는 로드 밸런서를 통해 수신 요청을 Nginx(수신) 마이크로 서비스로 전달합니다. 이 앱은 프론트엔드 서비스, 주문 서비스, 메시징 서비스, 재고 서비스로 구성됩니다. 이러한 모든 서비스는 컨테이너화되며 OKE 클러스터에 있습니다. 이러한 각 서비스는 REST API를 사용하여 인터페이스를 노출합니다. 데이터는 자율운영 데이터베이스에 저장됩니다.

고객은 모바일 장치의 웹 앱 또는 앱에서 프론트 엔드 서비스를 사용하여 GPU를 주문합니다. 주문 서비스와 재고 서비스는 NATS 오픈 소스 메시징 서비스를 사용하여 서로 통신합니다. Orders 서비스는 Orders PDB(플러그 가능한 데이터베이스)에서 주문 데이터를 읽고 씁니다. 인벤토리 서비스는 인벤토리 PDB에서 인벤토리 데이터를 읽고 씁니다. 주문 서비스는 이메일 또는 Slack을 통해 고객에게 주문 상태를 알릴 수 있도록 통지 서비스를 사용하여 통지를 전송합니다. 고객은 주문 서비스에 대한 REST API를 사용하여 주문을 조회하는 프론트 엔드로부터 주문 상태를 검색할 수 있습니다.

배치

Universal Health Organization(UHO)은 Modern App Development Framework의 원칙을 준수하는 샘플 애플리케이션입니다. 특히, 웹 또는 모바일, 메시징 및 이벤트 기반 아키텍처 패턴의 요소를 구현하고 GitHub에서 사용할 수 있습니다.
  1. GitHub으로 이동합니다.
  2. 저장소를 로컬 컴퓨터에 복제하거나 다운로드합니다.
  3. README 문서의 지침을 따릅니다.

추가 탐색

관련 리소스에 대해 자세히 알아봅니다.

로그 변경

이 로그에는 중요한 변경 내용이 나열됩니다.

확인

  • Authors: Raghavendra Prasad, Sajan Parihar
  • 기여자: Hassan Ajan, Matthias Brantner, James Emerson, Harshad Kasture, Parvez Syed Mohamed, Jeff Schering, Joshua Stanley