728x90
반응형
모놀리식 아키텍처
- 단일 대규모 애플리케이션
- 모놀리식 아키테거는 애플리케이션의 모든 기능이 하나의 큰 시스템으로 구축되는 방식
- 통합된 개발 접근
- 애플리케이션의 모든 구성요소가 하나의 코드베이스에 포함되어 있으며, 이로 인해 소스코드가 서로 영향을 받아 배포 및 테스트가 복잡하고 어려워짐
- 관리 및 유지보수의 복잡성
- 상호 영향도
- 하나의 모듈을 수정할 때, 이를 참조하거나 영향을 받는 모든 모듈들도 영향을 받을 수 밖에 없는 구조
- SW아키텍처의 복잡도와 배포의 어려움
- 소스코드의 영향도로 인해, 배포도 팀마다 불가능하고 전체 배포 시간을 정하여 모든 소스코드를 한꺼번에 반영.
- 일반적으로 새벽시간이나 DB작업 등 복잡한 작업의 경우엔 새벽에 진행. 심지어 변경의 규모가 큰 작업일 경우 명절 등 공휴일을 정해 배포
- 시스템 구성의 복잡성
- 시스템이 복잡해 개발의 영향도 파악이 어려움
- 상호 영향도
MSA 아키텍처 (=컨테이너 화)
- 폭포수 개발바어본에서 나오는 아키텍처가 모놀리식이라면, 애자일하게 일하는 조직에서 취할수있는 아키텍처는 MSA(Micro Service Architecture)
- 독립적이고 작은 서비스들로 구성된 시스템을 의미
- 서비스 마다 최적의 기술을 선택 가능 - 언어가 달라도 가능
- 로직이 복잡하면 자바가 효율적
- 로직이 단순하면 노드가 효율적
- 모놀리식에서 문제의 원인이었던 서비스들간의 의존성이 약화되거나 제거돼 느슨한 결합 상태로 구성
- 서비스는 저마다 데이터베이스를 가지며, 각 서비스마다 더 적합한 기술이 사용
- 서비스의 수정이 발생하여도 다른 서비스로의 영향이 없거나 적기 때문에, 독립적 인 개발 및 배포가 가능하기 때문에 빈번한 배포 가능
- 장애가 발생하더라도 장애 범위가 서비스에만 국한
- 특정 이벤트로 대량의 트래픽이 몰릴 경우, 해당 서비스에만 컴퓨팅 리소스를 더 투입하는 스케일 아웃 전략(컴퓨터 하나 늘림)을 적용 - 스케일업은 컴퓨터 한대의 성능을 높임
MSA 통신 방식
- API 기반 통신 - 동기
- Application Programming Interface
- 소프트웨어나 시스템 간의 상호작용을 가능하게 하는 규약 또는 인터페이스
- 즉, 소프트웨어 컴포넌트 간의 ‘연결고리 역할을 하며, 사용자들이 복잡한 코드를 직접 작성하지 않고도 특정 기능에 대한 정보를 받거나 구현하는데 도움
- ex) 한국거래소 API를 통해 주식시세 받기, 두나무 API를 통해 코인 시세 받기, 윈도우 API를 통해 쉽게 폴더 생성 및 파일생성, java API를 통해 쉽게 문자열처리 등
- API 기반 통신은 주로 동기적 처리를 위한 용도
- ex) 주문서비스에서 회원정보가 필요할 때, 회원 ID를 가지고 회원 서비스를 호출하여 정보를 조회
- 이벤트 기반 통신 - 비동기(큐)
- 비동기 또는 독립적 처리를 위한 용도
- 큐엔 PUBLISHER와 SUBSCRIBER가 있음
- 주문이 발생하면(신규 주문 이벤트가 발생하면) 주문 정보를 가진 메시지를 발행하고, 재고 서비스나 앱 푸시 서비스에서 해당 메시지를 구독하여 후속 처리
- 주문, 재고서비스에 큐를 연결하여 주문 요청 발생 시 큐에 저장됨.
- 순차적으로 큐에서 저장된 요청이 재고 서비스로 이동
- 이때 주문 서비스는 발행하는 PUBLISHER, 재고 서비스는 소비하는 SUBSCRIBER가 됨
- 큐를 이용해서 요청을 던지고 빠르게 회전 - 성능
- SUBSCRIBER인 B 서버가 죽었을 때 동기는 응답받을 때 까지 계속 기다려야해서 성능이 느리고, B가 죽어서 요청이 들어왔느지도 몰라서 구동이 안된다. 큐를 사용하면 큐에 저장되어 있기 때문에 B가 죽어있는 동안에도 큐에는 쌓이면서 B가 살아나면 다시 요청을 받아 응답할 수 있따.- 안정성 높아짐
msa와 컨테이너 환경구성
- msa는 경량화된 아키텍처로서 분산 아키텍처로 구성
- 경량화된 서버인 docker container와 같은 컨테이너 기반 아키텍처에 적합
- 확장가능성에 염두를 둔 msa 설계사상과 확장에 유연하고 용이한 이미지 기반의 컨테이너 서버구성은 상호 적합한 기술 선택지
- 쿠버네티스(k8s)와 같은 컨테이너 오케스트레이션 기술 덕분에 대규모 컨테이너 시스템을 기존의 legacy보다 효율적으로 관리할 수 있는 점이 큰 장점
- k8s의 활용과 msa
- AWS에 쿠버네티스 - EKS (대규모)
- ECS 는 소규모
- 자동화된 배포와 롤아웃 관리를 통해 msa 환경에서의 빈번한 수정과 배포 가능
- 자동 확장과 로드밸런싱
- 특정 서비스의 고 트래픽 상황 시 빠른 자동확장 서비스와 로드밸런싱
- 서비스 검색과 네트워킹을 통한 내부 통신 용이 - 인터넷까지 안가고 api 게이트웨이를 통해 내부적 통신 가능
- 내부 서비스간의 통신 용이와 확장성이 용이하게 함으로서 msa 컨테이너간의 통신에 최적화
- 자원 관리 및 최적화
- 서비스 health check 자동관리
- 특정 컨테이너가 down 된 상황을 자동으로 인지하고 컨테이너 재생성 또는 서비스 자동 재시작 기능
- 단점
- learning curve(배우기 어려움)
728x90
반응형
'SW공학' 카테고리의 다른 글
[SW공학] JIRA 활용 (1) | 2023.12.06 |
---|---|
[SW공학] 소프트웨어 개발 방법론 (2) | 2023.12.06 |