카테고리 없음

아키텍처 종류와 정의

최종군 2024. 12. 3. 21:07

아키텍처란 하드웨어와 소프트웨어를 포함한

컴퓨터 시스템 전체의 설계 방식으로 

컴퓨터 아키텍처라고도한다. 

 

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

- 모든 애플리케이션 컴포넌트(프론트엔드, 백엔드, 데이터베이스)가 하나의 코드베이스에 통합된 구조.

 

  • 장점:
    • 단순하고 초기 개발 및 배포가 빠름.
    • 통합된 환경에서 테스트가 용이.
  • 단점:
    • 확장성 제한 (수직 확장만 가능).
    • 작은 변경에도 전체 애플리케이션 재배포 필요.
    • 대규모 애플리케이션에서는 유지보수가 어려움.

 

 

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

- 애플리케이션을 독립적으로 배포 및 확장 가능한 작은 서비스들로 나누는 구조.

- 각 서비스는 특정 비즈니스 기능을 담당하며 서로 독립적으로 운영.

 

  • 장점:
    • 서비스별 독립적 배포 및 확장 가능.
    • 각 팀이 독립적으로 개발 및 관리.
    • 특정 기술 스택에 얽매이지 않음.
  • 단점:
    • 서비스 간 통신 복잡성 증가 
    • 데이터 관리와 트랜잭션 처리가 어려움.
    • 모니터링 및 디버깅이 어려움.

 

Layered Architecture (계층형 아키텍처)

- 애플리케이션을 기능별로 계층화하여 설계 (예: 프레젠테이션, 비즈니스 로직, 데이터 계층).

  • 장점:
    • 코드 구조가 명확하고 이해하기 쉬움.
    • 각 계층이 독립적으로 개발 가능.
  • 단점:
    • 계층 간 호출로 인한 성능 저하 가능.
    • 수직적 확장에 제약이 있을 수 있음.
    •  

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

- 시스템 컴포넌트가 이벤트를 통해 상호작용.

- 이벤트가 발생하면 이를 처리하는 리스너(consumer)가 동작.

 

  • 장점:
    • 비동기 처리가 가능하여 높은 확장성 제공.
    • 느슨한 결합(loose coupling)으로 유연한 시스템 구축 가능.
  • 단점:
    • 디버깅과 테스트가 복잡.
    • 메시지 순서 보장이 필요할 수 있음.

 

 

 

 

Serverless Architecture (서버리스 아키텍처)

-서버 관리 없이 클라우드 서비스 제공자가 실행 환경을 제공.

-함수 단위로 애플리케이션을 구성 (FaaS: Function as a Service).

 

  • 장점:
    • 서버 관리 부담 없음.
    • 사용량에 따라 비용 지불 (Pay-as-you-go).
  • 단점:
    • 클라우드 제공자에 종속(vendor lock-in).
    • 지속적인 처리 작업에는 적합하지 않을 수 있음.

 

 

Service-Oriented Architecture (SOA, 서비스 지향 아키텍처)

- 각 서비스가 특정 비즈니스 프로세스를 구현하며, 중앙 허브(ESB: Enterprise Service Bus)를 통해 통신. 

  • 장점:
    • 비즈니스 기능을 재사용 가능.
    • 이기종 시스템 통합에 유리.
  • 단점:
    • ESB가 병목지점이 될 가능성.
    • 시스템 설정 및 유지보수 복잡.

 

 

 

Hexagonal Architecture (헥사고날 아키텍처, Ports and Adapters)

-비즈니스 로직을 중심에 두고, 외부 시스템(I/O)을 어댑터를 통해 연결.

-애플리케이션 코어(도메인 로직)가 외부 기술에 종속되지 않도록 설계.

  • 장점:
    • 코드가 테스트 가능하며 독립적.
    • 외부 의존성을 쉽게 교체 가능.
  • 단점:
    • 초기에 설계 및 구현이 복잡할 수 있음.

CQRS (Command Query Responsibility Segregation)

-읽기(Query)와 쓰기(Command)를 분리하여 각각 최적화된 모델로 설계.

  • 장점:
    • 읽기와 쓰기 성능을 독립적으로 최적화 가능.
    • 복잡한 비즈니스 로직 처리에 유리.
  • 단점:
    • 설계와 구현이 복잡.
    • 데이터 동기화 문제 발생 가능.

 

Clean Architecture (클린 아키텍처)

-의존성 규칙을 따라 애플리케이션을 설계하여, 비즈니스 로직이 외부 구현 세부사항에 의존하지 않도록 함.

-중심에는 엔터프라이즈 비즈니스 규칙, 그 외곽으로 인터페이스 계층 배치.

  • 장점:
    • 높은 유지보수성.
    • 테스트 용이성.
  • 단점:
    • 구현 복잡도가 높음.
    • 초기에 시간과 리소스가 많이 소요.

Distributed Architecture (분산 아키텍처)

  • 설명:
    • 여러 독립적인 시스템이 협력하여 하나의 애플리케이션처럼 작동.
    • 각 시스템은 서로 다른 서버에서 실행될 수 있음.
  • 장점:
    • 확장성이 매우 높음.
    • 장애 허용(fault tolerance)이 가능.
  • 단점:
    • 네트워크 지연, 데이터 일관성 문제.
    • 높은 복잡도.