1장 : 아마존 비즈니스 민첩성의 비밀

2023. 5. 16. 14:40북리뷰/도메인 주도로 설계하는 마이크로서비스 개발

728x90

성공한 기업들의 공통점은 이미 익숙한 비즈니스에 새로운 비즈니스 개념과 기술을 융합하여 자신만의 서비스를 제공한다는 점이다.

아마존은 11초 마다 배포함 : 비즈니스가 변경될 때 마다 시스템이 개선되고 진화됨

클라우드 인프라가 등장해서 서비스 개발에 필요한 시스템 인프라를 쉽게 마련 가능 - 사용량에 따라 비용 유연하게 조정

스케일 업 : 기존 시스템 자체의 물리적 용량을 증가

스케일 아웃 : 기존 시스템과 용량이 같은 다수 장비를 병행 추가하여 가용성을 높임 - 시스템을 작은 단위의 독립적인 서비스 연계로 구성

클라우드 프렌들리 어플리케이션 : 큰 덩어리로 클라우드 환경에 올라갈 수 있도록 하는 클라우드 친화 어플리케이션

클라우드 네이티브 어플리케이션 : 독립적으로 분리되어 배포될 수 있는 조각으로 구성된 어플리케이션

 

## 모노리스

하나의 단위로 개발되는 일체식 어플리케이션 보통 3티어(Controller, Service, DB)로 이루어짐

논리적인 단일체로서 작은 변화에도 새로운 버전으로 전체를 빌드해서 배포해야

확장시 로드벨런서를 앞에 두고 여러 인스턴스 위에 큰 덩어리를 복제해 수평으로 확장

즉, 변경시 여러 개의 모노리스 시스템 전부를 다시 빌드하고 배포해야

사전에 성능을 감당하기 위해 스케일 업을 통해 용량을 증설

 

## 마이크로 서비스

서버 측이 여러 개의 조각으로 구성

각 서비스가 별개의 인스턴스로 로딩

여러 서비스 인스턴스가 모여 하나의 비즈니스 애플리케이션을 구성

각 저장소가 다르므로 업무 단위로 모듈 경계가 명확히 구분 -> 확장시 특정 기능 별로 독립적으로 확장

 

## SOA(Service Oriented Architecture)

컴포넌트를 모아 비즈니스적으로 의미 있고 완결적인 서비스 단위로 모듈화

SOA의 MSA 차이 : SOA는 구체적이지 않고 이론적임, 실제 비즈니스 성공 사례가 많지 않음

 

## MSA를 위한 조건 

 

### 1. 조직의 변화: 업무 기능 중심 팀

기술 별로 팀을 분할하는 것이 아닌 업무 기능 중심의 팀이어야. 업무 기능을 중심으로 기술이 다양한 사람들이 하나의 팀이 되어 서비스를 만들어야

 

### 2. 관리 체계의 변화: 자율적인 분권 거버넌스, 폴리글랏

우리가 직접 만들고 우리가 직접 운영한다. 빠르게 서비스를 만드는 것을 최우선 목적으로 두고 스스로 효율적인 방법론과 도구, 기술을 찾아 적용

플리글랏 프로그래밍 : 각 팀에 맞는 개발 언어를 선택하는 것

 

### 3. 개발 생명주기의 변화 : 프로젝트가 아닌 제품 중심으로

기존에는 프로젝트 단위로 개발함. 개발 조직과 운영 조직이 분리,

MSA팀은 개발 뒤에 반응 보고 개선하는 방식으로 점진적으로 반복, 애자일 개발 방식을 채용

 

### 4. 개발 환경의 변화: 인프라 자동화

빌드, 테스트, 배포 등 개발 지원 과정을 자동화 : DevOps

빌드/배포 파이프라인 : 빌드 -> 개발 환경 배포 -> 스테이징 환경 배포 -> 운영 환경 배포

 

### 5. 저장소의 변화 : 통합 저장소가 아닌 분권 데이터 관리 

각 저장소가 서비스 별로 분산되어 있어야. 다른 서비스의 저장소를 직접 호출할 수 없고, API를 통해서만 접근

비즈니스 처리를 위해 일부 데이터의 복제와 중복 허용이 필요 : 데이터 정합성을 맞춰야

데이터 일관성 처리를 위해 보통 2단계 커밋 같은 분산 트랜젝션 이용 하지 않고,

비동기 이벤트 처리를 통한 협업 강조 : 결과적 일관성 : 두 서비스의 데이터가 일시적으로 불일치/비일관성 한 상태이나, 결국에는 같아진다는 개념

롤백 같은 경우는 보상 트랜잭션을 활용

 

### 6. 위기 대응 방식의 변화 : 실패를 고려한 설계 

시스템은 언제든 시패할 수 있으며, 더는 진행할 수 없을 때도 자연스럽게 대응하게 설계해야

다양한 실패를 대피해 완벽히 테스트할 수 있는 환경을 마련하고, 모니터링 체계도 갖춰야

서킷 브레이커 패턴 : 모니터링 중 한 서비스가 실패하면 연계 서비스를 차단하여 대응하는 것

카오스 몽키 : 장애를 일부로 발생시키는 도구, 아키텍처 점검용으로 사용

 

728x90