Skip to main content

Cloud SW 아키텍처 패턴:소개

목차


1.확장성 아키텍처 패턴 - Scalability Patterns
2.데이터 집약 시스템을 위한 성능 아키텍처 패턴 - Performance Patterns for Data Intensive Systems
3.기능 확장성 아키텍처 패턴 - Software Extensibility Architecture Patterns
4.신뢰성, 오류 처리 및 복구 아키텍처 패턴 - Reliability, Error Handling and Recovery Software Architecture Patterns
5.배포 및 프로덕션 테스트 아키텍처 패턴 - Deployment and Production Testing Patterns


Types of System Requirements


시스템의 요구사항은 크게 3가지로 분류해서 접근 한다.

1 기능 요구사항 Function Requirements

  • Dictate the functionality / features of the product

2 품질 요구 사항 Non-Functional Requirements (Quality Attributes)

  • Performance, Scalability, Availability, Reliability ...

3 시스템 제약 사항 System Constraints

  • Limit our design choices

품질 요구사항의 패턴화

다른 도메인의 시스템들은 각자 다른 기능 요구사항을 가지고 있다.
하지만 공통점 또한 존재한다. 품질 요구사항 측면에서 보면 모두 유사한 기능이 필요하다.

예를들어 Online Store Company, Education Platform Company, Online Dating Company 모두 다른 기능을 제공한다.
하지만 아래의 기능들은 공통으로 요구된다.

  • User Interface
  • Millions of Customers
  • Store Business Data
  • Big Data Processing
  • Query/Display User Data

아키텍처 패턴을 알아야 하는 이유

보편적으로 적용이 가능하다.
이미 많은 회사에서 성공적으로 적용이 된 케이스이다.
기능과 달리 시스템상 독립적으로 구현가능하다.

클라우드 컴퓨팅을 이용한 아키텍처 패턴

장점 1.
이론상 무한한 자원에 접근가능하다. 컴퓨팅, 스토리지, 네트워크 리소스 그리고 용량이 무제한이다. (돈만 있다면야...)
( IaaS - Infra as a Service 의 무제한 사용 )

장점 2.
클라우드 밴더사를 이용하면 인프라 관련 전문가를 고용하지 않아도 된다.

장점 3.
초기 스타트업이 사용한 만큼 돈을 지불하므로, 서비스 개발에 대한 진입장벽이 낮아진다.

클라우드 환경의 이점

1.도구 제공

Tools / Features to improve:
• Performance
• Scalability • Reliability

  • Examples: Multi-Region / Multi-Zone

2.추가적인 인프라가 따라옴

In addition to Infrastructure such as:
• Virtual machines
• Network routers
• Switches
• Storage devices

3.PaaS

Platform with services like:
• Databases
• Message Brokers
• Load Balancers
• Monitoring
• Log Services
• Function as a Service (FaaS)

클라우드 환경의 단점

  • 우리가 시스템 인프라를 소유할 수 없다. 그리고 시스템이 복잡해질수록 더 많은 비용을 낼 뿐이다.
  • 인프라에 대한 직접적인 컨트롤이 불가능하다. 원하는 하드웨어 스펙을 넣거나, 새컴퓨터를 할당받는 등의 작업은 못한다.

Cloud Software Architect's Job

Building Reliable Systems using Unreliable Components

Design Patterns vs Software Architecture Patterns


Design Patterns benefits:

• Better code organization
• Reusability
• Extensibility
• High developer productivity

Design Patterns limited to:

• Single application / library
• Object Oriented languages

Design Patterns are not very helpful in architecting:

• A Large Scale System
• Using multiple independently deployable services
• Implemented in different languages (some not Object Oriented)

Design Patterns don't address:

• Performance
• User experience
• Error handling
• Processing big data or high network traffic