아키텍처 간략 정리
1. MVC (Model-View-Controller)
구성 요소
- Model: 데이터와 비즈니스 로직을 관리합니다.
- View: 사용자에게 정보를 시각적으로 표시합니다.
- Controller: 사용자 요청을 처리하고 Model과 View를 연결합니다.
특징
- 역할이 분리되어 코드의 가독성과 재사용성이 높습니다.
- 사용자가 View와 상호작용하면 Controller가 이를 처리하고 Model을 업데이트한 후, View에 결과를 표시합니다.
활용
- 웹 애플리케이션(스프링 MVC, Ruby on Rails 등)
- 데스크톱 애플리케이션
2. MVVM (Model-View-ViewModel)
구성 요소
- Model: 데이터와 비즈니스 로직.
- View: UI 요소.
- ViewModel: View와 Model 사이의 중간 계층으로, View의 상태를 관리하고, 데이터 바인딩을 지원합니다.
특징
- 양방향 데이터 바인딩을 통해 View와 ViewModel의 동기화를 자동으로 처리합니다.
- View는 데이터에 대한 의존성을 최소화합니다.
활용
- WPF(Windows Presentation Foundation)
- Angular, Vue.js, React + Redux/MobX와 같은 SPA(Single Page Application) 프레임워크
3. MVP (Model-View-Presenter)
구성 요소
- Model: 데이터와 비즈니스 로직.
- View: 사용자 인터페이스(UI).
- Presenter: View의 로직을 담당하며 Model과 상호작용한 후 데이터를 View에 전달합니다.
특징
- View는 단순히 UI를 표시하는 역할만 하고, 모든 로직은 Presenter에서 처리됩니다.
- View와 Presenter는 1:1 관계를 갖습니다.
활용
- 안드로이드 애플리케이션
- 레거시 데스크톱 애플리케이션
4. Clean Architecture
구성 요소
- Entities: 애플리케이션의 비즈니스 규칙을 캡슐화.
- Use Cases: 애플리케이션의 특정 작업이나 기능을 정의.
- Interface Adapters: 데이터와 UI의 변환 계층.
- Frameworks & Drivers: 데이터베이스, UI, 외부 API 등.
특징
- 의존성 규칙: 안쪽 계층은 바깥쪽 계층을 알지 못합니다.
- 비즈니스 로직이 프레임워크와 독립적이어서 확장성과 유지보수가 용이합니다.
활용
- 대규모 시스템
- 멀티 플랫폼 애플리케이션
5. Layered Architecture (계층형 아키텍처)
구성 요소
- Presentation Layer: 사용자 인터페이스.
- Application Layer: 비즈니스 로직.
- Data Layer: 데이터베이스 및 데이터 액세스.
특징
- 계층 간 명확한 분리가 이루어집니다.
- 단순하고 이해하기 쉬운 구조지만, 복잡한 시스템에서 성능 저하가 있을 수 있습니다.
활용
- 전통적인 웹 애플리케이션(3-tier 아키텍처)
- 엔터프라이즈 애플리케이션
6. Microservices Architecture
구성 요소
- 애플리케이션을 독립적으로 배포 가능한 작은 서비스들로 나눕니다.
- 각 서비스는 고유한 비즈니스 기능을 담당하며 API로 통신합니다.
특징
- 독립적인 배포와 확장이 가능합니다.
- 서비스 간 통신 오버헤드가 있고, 분산 시스템의 복잡성이 증가할 수 있습니다.
활용
- 대규모 분산 시스템
- 클라우드 네이티브 애플리케이션
7. Event-Driven Architecture
구성 요소
- Event Producer: 이벤트를 생성하고 발행.
- Event Consumer: 이벤트를 처리.
- Event Broker: 이벤트를 전달하거나 중개.
특징
- 비동기 통신을 기반으로 설계되어 높은 확장성을 제공합니다.
- 복잡한 이벤트 흐름을 관리하기 위한 설계가 필요합니다.
활용
- IoT 시스템
- 실시간 애플리케이션(채팅, 트랜잭션 시스템)
8. Hexagonal Architecture (Ports and Adapters)
구성 요소
- Core (Application Logic): 애플리케이션의 핵심 비즈니스 로직.
- Ports: 외부와의 상호작용을 정의하는 인터페이스.
- Adapters: 특정 구현을 제공하여 Core와 통신.
특징
- 비즈니스 로직과 외부 시스템 간의 의존성을 최소화합니다.
- 높은 테스트 가능성과 확장성을 제공합니다.
활용
- 복잡한 도메인 로직이 있는 시스템
- 시스템 간 통합이 필요한 애플리케이션
9. Serverless Architecture
구성 요소
- 클라우드 기반 서비스와 함수(Function-as-a-Service)를 이용하여 애플리케이션을 실행.
- 서버를 관리하지 않고도 클라우드 제공자가 모든 인프라를 처리.
특징
- 확장성과 비용 효율성이 높습니다.
- 서버 환경에 대한 제어가 제한적입니다.
활용
- 이벤트 중심 애플리케이션
- 간단한 API 백엔드
10. CQRS (Command Query Responsibility Segregation)
구성 요소
- Command: 데이터 변경 작업(쓰기).
- Query: 데이터 읽기 작업.
특징
- 읽기와 쓰기를 분리하여 각 작업을 최적화합니다.
- 복잡한 시스템에서 동시성과 확장성을 지원합니다.
활용
- 이벤트 소싱 시스템
- 고성능 읽기/쓰기 작업이 필요한 시스템
11. Pipe and Filter Architecture
구성 요소
- Filters: 데이터를 처리하는 독립적인 컴포넌트.
- Pipes: 필터 간 데이터를 전달.
특징
- 데이터 흐름을 직관적으로 표현할 수 있습니다.
- 처리 단계가 많아지면 성능 저하가 발생할 수 있습니다.
활용
- 데이터 처리 파이프라인
- 이미지 또는 오디오 프로세싱
12. Service-Oriented Architecture (SOA)
구성 요소
- 독립적인 서비스들로 구성되며, 각 서비스는 특정 비즈니스 기능을 제공합니다.
- 서비스는 표준 프로토콜(예: SOAP, REST)을 통해 통신합니다.
특징
- 서비스 간 의존성이 낮아 확장성과 재사용성이 높습니다.
- 복잡한 통합과 관리가 필요합니다.
활용
- 엔터프라이즈 애플리케이션
- 분산 시스템
CSR에서 자바 스프링 백엔드 아키텍처
- 계층형 아키텍처 사용 (Layered Architecture)
- RESTful API 서버로 프론트엔드와 데이터 통신
- JPA + Hibernate를 통한 데이터베이스 연동
- JWT를 통한 보안 및 인증 처리
- 마이크로서비스 및 API Gateway 적용 가능 (Spring Cloud Gateway)
- 비즈니스 로직, 예외 처리, 로깅, 모니터링 구성
➡️ CSR 환경에서는 프론트엔드가 주로 UI를 렌더링하고, 자바 스프링 백엔드는 데이터 제공, 비즈니스 로직 처리, 보안, 데이터베이스 연동을 주로 담당합니다.
아키텍처 패턴 선택 가이드
- 프로젝트 규모:
- 작은 프로젝트: MVC, MVP
- 대규모 프로젝트: Microservices, Clean Architecture
- 프론트엔드 및 백엔드 협업:
- 단일 애플리케이션: MVVM, MVC
- 분리된 환경: RESTful API 기반 MC
- 확장성 요구:
- 높은 확장성: Microservices, Serverless
- 실시간 처리:
- 실시간 데이터: Event-Driven, CQRS
'공부 > CS' 카테고리의 다른 글
언어별 연산 속도 (0) | 2024.12.30 |
---|---|
Context Switching(문맥 교환) (0) | 2024.09.19 |
해시 - 솔트치기 (0) | 2024.08.25 |
CGI, FastCGI (1) | 2024.07.23 |
Web Server (0) | 2024.07.22 |