개요
아키텍처란?
- 아키텍처의 개념
- 아키텍처 특성(가용성, 신뢰성, 확장성, 보안, 민첩성 등)에 따라 설계 원칙이 결정된다.
- 소프트웨어 공학은 경험기반의 학문이다.
- 아키텍처 스타일은 기술의 변화 흐름을 반영함
- 레이어드 아키텍처
- 엔터프라이즈 업계에서 표준
- 관심사의 분리 SoC
![](https://velog.velcdn.com/images/dobecom/post/4627e758-8e4b-4ccf-8e30-c26fd8b18d0f/image.png)
- 프레젠테이션 = UI
- 비즈니스 = 비즈니스 로직
- 퍼시스턴스 = 데이터 저장처리
- 프론트/백엔드 각각 레이어드 아키텍처를 정할 수 있다
- 백엔드에서 아키텍처 설명한다고 할 때, MVC라고 하는 경우 Model이 데이터베이스 레이어라고 하는 케이스가 있지만 사실은 프레젠테이션레이어에 포함되는 의미로 데이터를 던져주는 개념이 맞다. 그리고 사실 요즘 백엔드 아키텍처로 MVC라 설명하지는 않음. 지금 기준으로는 컨트롤러/비즈니스/퍼시스턴스/데이터베이스가 맞음
- 서비스 기반 아키텍처
- 재사용성을 극대화 한 방법
- 여러가지 서비스를 만들어놓고 조합해서 사용하는 방법
- 유저 서비스, 주문 서비스, 공통 서비스, …
![](https://velog.velcdn.com/images/dobecom/post/2af1f5cd-2d45-4834-9787-0c21f2d4f46a/image.png)
- 일반적으로 모놀리식 데이터베이스 공유하며, 데이터베이스 커플링 문제, 스키마 변경 시 변경 영향도 문제 발생
- MSA도 서비스 기반 아키텍처의 하나다
- 흔히 SoA가 실패했다고 하는 것은 벤더사가 제공하는 인프라 시스템의 엔터프라이즈 서비스 버스(오케스트레이션 엔진)에 부하가 생길 수 밖에 없는 구조로 갔기 때문에(서비스기반의 재사용성은 의존성이 높다는 의미이고 영향도 때문에 변경이 어려움) 실패했다는 것임
- 이벤트 기반 아키텍처 스타일 등
- 확장성이 뛰어난 고성능 애플리케이션 개발에 널리 쓰이는 비동기 분산 아키텍처
- 확장성 측면에서 효율적이지만 트랜잭션 통제가 어렵고 데이터 비일관성, 에러 처리가 어려움
- 공간 기반 아키텍처
- 대규모 트래픽이 몰리는 주문이나 티켓팅 시스템에서 사용
![](https://velog.velcdn.com/images/dobecom/post/8e07d0f2-e9a5-4be8-a0ca-2a7b4c848c77/image.png)
- 사용자가 몰리는 부분만 확장을 쉽게 할 수 있음
- 여러 처리장치를 두어 캐싱처리를 하며 서로간의 데이터 펌프 파이프라인을 구축하여 성능을 올림. 대규모 트래픽이기 때문에 데이터 일관성이 안맞을 수 있어서 그부분은 감안하여 나중에 처리할 수 밖에 없다. (예: 아마존에서 상품 주문했으나 재고가 소진되어 소정의 보상포인트와 함께 다른 상품 추천하는 안내메일을 보내는 시스템, 주문 결제 완료했을때 구매 확정 메일이 좀 나중에 오는 것)
- 마이크로서비스 아키텍처
- 고도의 디커플링을 추구(의존성을 낮춤)
![](https://velog.velcdn.com/images/dobecom/post/3a57eccf-1c57-4867-afc7-28e4563dbbb6/image.png)