본문 바로가기
개발 상식 시리즈/백엔드 상식

주요 아키텍처 패턴

by 신재은👩🏼‍💻 2024. 5. 16.

처음에는 API 만드는 스타일만 확인하려 했는데 범용적인 아키텍처 패턴도 알아야 하겠더라.

https://youtu.be/f6zXyq4VPP8?feature=shared

1. Layered Architecture (계층형 아키텍처)

특징:

  • 계층별 역할: 애플리케이션을 계층으로 분리하여 각 계층이 특정 역할을 담당합니다.
    • 프레젠테이션 계층: 사용자 인터페이스
    • 애플리케이션 계층: 비즈니스 로직
    • 도메인 계층: 비즈니스 규칙
    • 인프라 계층: 데이터베이스 및 외부 시스템과의 통합

장점:

  • 코드 구조가 명확하여 유지보수가 쉽습니다.
  • 각 계층을 독립적으로 개발 및 테스트할 수 있습니다.

단점:

  • 계층 간의 의존성이 복잡해질 수 있습니다.
  • 성능 저하의 원인이 될 수 있습니다.

사용 사례:

  • 전통적인 엔터프라이즈 애플리케이션
  • CRUD 기반 애플리케이션

2. Event-Driven Architecture (이벤트 기반 아키텍처)

특징:

  • 이벤트 생성 및 소비: 시스템은 이벤트를 생성하고, 이 이벤트에 반응하는 방식으로 동작합니다.
  • 느슨한 결합: 이벤트 발행자와 소비자가 느슨하게 결합되어 있습니다.
  • 비동기 처리: 이벤트 기반으로 비동기 처리를 할 수 있습니다.

장점:

  • 확장성과 유연성이 높습니다.
  • 독립적인 서비스가 이벤트를 통해 상호작용할 수 있습니다.

단점:

  • 이벤트 흐름을 추적하기 어려울 수 있습니다.
  • 디버깅이 복잡해질 수 있습니다.

사용 사례:

  • 실시간 데이터 처리 시스템
  • 분산 시스템 및 마이크로서비스

3. Monolithic Architecture (모놀리식 아키텍처)

특징:

  • 단일 코드베이스: 애플리케이션이 하나의 코드베이스로 관리됩니다.
  • 모든 기능이 하나로 통합: 모든 기능이 하나의 단위로 배포되고 실행됩니다.

장점:

  • 개발 및 배포가 단순합니다.
  • 초기에 개발이 빠릅니다.

단점:

  • 애플리케이션 규모가 커질수록 유지보수가 어렵습니다.
  • 한 부분의 변경이 전체 시스템에 영향을 미칠 수 있습니다.

사용 사례:

  • 소규모 애플리케이션
  • 초기 스타트업 제품

4. Microkernel Architecture (마이크로커널 아키텍처)

특징:

  • 핵심 시스템과 플러그인 모듈: 핵심 시스템 기능과 독립적인 플러그인 모듈로 구성됩니다.
  • 확장성: 플러그인 모듈을 통해 기능을 쉽게 확장할 수 있습니다.

장점:

  • 시스템을 쉽게 확장하고 유지보수할 수 있습니다.
  • 핵심 기능과 확장 기능을 분리하여 관리할 수 있습니다.

단점:

  • 플러그인 모듈 간의 통신 및 관리가 복잡할 수 있습니다.
  • 초기 설계와 구현이 어렵습니다.

사용 사례:

  • 확장 가능한 애플리케이션
  • IDE(통합 개발 환경) 및 플러그인 시스템

5. Microservices Architecture (마이크로서비스 아키텍처)

특징:

  • 독립적인 서비스: 각 기능이 독립적인 서비스로 분리되어 관리됩니다.
  • 서비스 간 통신: REST, gRPC 등의 프로토콜을 사용하여 서비스 간 통신을 수행합니다.

장점:

  • 독립적인 배포 및 확장이 가능합니다.
  • 각 서비스가 독립적으로 개발 및 운영될 수 있습니다.

단점:

  • 서비스 간의 통합과 관리가 복잡해질 수 있습니다.
  • 분산 시스템으로 인해 추가적인 인프라 관리가 필요합니다.

사용 사례:

  • 대규모 엔터프라이즈 애플리케이션
  • 클라우드 네이티브 애플리케이션

기타 주요 아키텍처 패턴

6. Service-Oriented Architecture (SOA)

특징:

  • 서비스 재사용: 서비스는 독립적이며 재사용 가능하도록 설계됩니다.
  • 표준 프로토콜: SOAP, REST 등을 사용하여 서비스 간 통신을 수행합니다.

장점:

  • 서비스 재사용을 통해 개발 효율성을 높일 수 있습니다.
  • 플랫폼 독립적인 통합이 가능합니다.

단점:

  • 서비스 간의 통합이 복잡할 수 있습니다.
  • 성능 저하가 발생할 수 있습니다.

사용 사례:

  • 엔터프라이즈 시스템 통합
  • 이기종 시스템 통합

7. Serverless Architecture

특징:

  • 서버 관리 불필요: 서버 인프라 관리가 필요 없습니다.
  • 이벤트 기반 실행: 함수가 이벤트에 반응하여 실행됩니다.

장점:

  • 비용 효율적입니다(사용한 만큼만 지불).
  • 스케일링이 자동으로 이루어집니다.

단점:

  • 장기 실행 작업에 적합하지 않습니다.
  • 벤더 종속성이 발생할 수 있습니다.

사용 사례:

  • 짧고 빈번한 작업 처리
  • 이벤트 기반 애플리케이션

API는 여러 종류로 만들어도 이런 아키텍처는 여러 개를 가지고 가면 안 될 것 같았다.

너무 복잡하지 않나?

그런데 불가능하지 않더라.

 

아키텍처 패턴을 선택할 때, 하나의 주요 아키텍처 패턴을 중심으로 설계하는 것이 일반적이지만, 여러 패턴을 혼합하여 사용할 수도 있습니다. 다양한 패턴을 조합하면 각 패턴의 장점을 취하면서 단점을 보완할 수 있기 때문입니다. 특히, 복잡하고 대규모 애플리케이션에서는 이러한 혼합이 더욱 유용할 수 있습니다. 아래에 각각의 혼합 가능성을 설명하겠습니다.

1. Layered Architecture와 다른 패턴의 혼합

  • Layered + Event-Driven: 기본적으로 계층형 아키텍처를 사용하되, 각 계층 간의 통신을 이벤트 기반으로 처리하여 느슨한 결합을 유지할 수 있습니다.
  • Layered + Microservices: 계층형 아키텍처를 사용하여 각 서비스(마이크로서비스)가 자체적인 계층 구조를 가질 수 있습니다.

2. Event-Driven Architecture와 다른 패턴의 혼합

  • Event-Driven + Microservices: 마이크로서비스 간의 통신을 이벤트 기반으로 처리하여 확장성과 유연성을 높일 수 있습니다.
  • Event-Driven + Microkernel: 플러그인 모듈 간의 통신을 이벤트 기반으로 처리하여 모듈 간의 독립성을 유지할 수 있습니다.

3. Monolithic Architecture와 다른 패턴의 혼합

  • Monolithic + Layered: 단일 코드베이스 내에서 계층형 아키텍처를 사용하여 코드 구조를 명확히 할 수 있습니다.
  • Monolithic + Event-Driven: 단일 애플리케이션 내에서 이벤트 기반 처리를 도입하여 모듈 간의 느슨한 결합을 유지할 수 있습니다.

4. Microkernel Architecture와 다른 패턴의 혼합

  • Microkernel + Event-Driven: 플러그인 모듈 간의 통신을 이벤트 기반으로 처리하여 확장성을 높일 수 있습니다.
  • Microkernel + Microservices: 핵심 시스템은 마이크로커널 아키텍처로 설계하고, 확장 기능은 마이크로서비스로 구현할 수 있습니다.

5. Microservices Architecture와 다른 패턴의 혼합

  • Microservices + Event-Driven: 마이크로서비스 간의 통신을 이벤트 기반으로 처리하여 확장성과 유연성을 높일 수 있습니다.
  • Microservices + Layered: 각 마이크로서비스가 자체적인 계층 구조를 가질 수 있습니다.

실용적인 예시

  1. e-commerce 플랫폼:
    • Microservices + Event-Driven: 개별 마이크로서비스(사용자 관리, 제품 관리, 주문 관리 등) 간의 통신을 이벤트 기반으로 처리하여 확장성과 유연성을 높임.
    • Layered Architecture: 각 마이크로서비스 내에서 계층형 구조를 사용하여 코드의 명확성과 유지보수성을 높임.
  2. 실시간 데이터 처리 시스템:
    • Event-Driven + Microservices: 데이터 처리와 분석을 여러 마이크로서비스로 분리하고, 이벤트 스트림을 통해 데이터를 전달하여 확장성과 실시간 처리를 지원.
    • Microkernel: 데이터 처리 핵심 기능은 마이크로커널 아키텍처로 구현하고, 다양한 데이터 분석 플러그인을 추가하여 기능 확장.

오, 여기까지 보니까 더욱 섞어 쓰는 것도 나쁘지 않아 보인다.