아키텍처 종류와 정의
아키텍처란 하드웨어와 소프트웨어를 포함한
컴퓨터 시스템 전체의 설계 방식으로
컴퓨터 아키텍처라고도한다.
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)이 가능.
- 단점:
- 네트워크 지연, 데이터 일관성 문제.
- 높은 복잡도.