소프트웨어 아키텍처의 정의
소프트웨어의 골격이 되는 기본구조. 건축학에서 건물의 구조를 건축학적으로 설계하듯 컴퓨터 공학에서는 소프트웨어의 구조(아키텍처)를 단계별로 설계하고 구축하게 됩니다.
- MSA
- 마이크로서비스란 작고 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크
- MSA의 특징
- 따라서 ***SOA(Service Oriented Architecture)**의 특징을 다수 공통으로 가진다.
- 👉🏻 MSA는 API를 통해서만 상호작용할 수 있다. 즉, 마이크로 서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화한다. 내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.
- 장점
- 확장성
- 배포의 용이성
- 독립적인 배포 - 시스템의 확장성과 다양한 기술을 적용할 수 있다. 서비스의 병렬 개발 작업이 가능하므로, 개발자들은 서로 방해받지 않고 각자 문제 해결에 몰입할 수 있다. 유연성을 제공한다.
- 장애 처리 용이
- 단점
- 테스트 / 트랜잭션 - 서비스가 분리되어 있기 때문에 테스트와 트랜잭션의 복잡도가 증가하고, 많은 자원을 필요로 합니다.
- 성능 - 서비스 간 호출 시 API를 사용하기 때문에, 통신 비용이나, Latency가 그만큼 늘어나게 됩니다.
- 네트워크 이슈 - 대기시간, 패킷 손실, 네트워크 케이블이 끊어지는 경우등 트랜잭션과 안정성 문제. 많은 기술을 고려해볼 수 있지만, 신기술에 대한 과실의 대가로 높은 비용을 치르게 된다.
- 데이터 관리 - 데이터가 여러 서비스에 걸쳐 분산되기 때문에 한번에 조회하기 어렵고, 데이터의 정합성 또한 관리하기 어렵습니다.
- MSA 서비스간 통신
- API Gateway 게이트웨이
- 프록시의 역할과 로드밸런싱
- 인증 서버로서의 기능
- 로깅 서버로서의 기능
- API Gateway의 고려사항
- 병목현상
- 네트워크 Latency
- API Gateway는 API 서버 앞단에서 모든 API 서버들의 엔드포인트를 단일화 해주는 또다른 서버입니다. API에 대한 인증과 인가 기능을 가지고 있으며, 메세지의 내용에 따라 어플리케이션 내부에 있는 마이크로 서비스로 라우팅하는 역할을 담당합니다.
- API Gateway 게이트웨이
- Monolithic Architecture
- Monolithic Architecture란, 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태
- 모놀리스라고 하면 주로 배포단위를 말하는것이다. 시스템의 모든 기능을 함께 배포해야 할 때, 이를 모놀리스로 간주한다
- 서비스/프로젝트가 커지면 커질수록, 영향도 파악 및 전체 시스템 구조의 파악에 어려움이 있습니다.
- 빌드 시간 및 테스트시간, 그리고 배포시간이 기하급수적으로 늘어나게 됩니다.
- 서비스를 부분적으로 scale-out하기가 힘듭니다.
- 부분의 장애가 전체 서비스의 장애로 이어지는 경우가 발생하게됩니다.
- 장점
- 간단한 배포, 분산 시스템과 관련된 많은 위험을 피할 수도 있다.
- 간단한 개발자 워크플로우를 만들어낸다. 모니터링, 문제 해결, 전 구간 테스트와 같은 활동도 크게 단순화 할 수 있다. 코드 재사용을 단순하게 만든다.
- 문제점
- 결함도, 특히 구현과 배포 결합도와 같은 결합도의 위험에 취약하다.
- 소유권에 대한 문제로 배포경합이 마이크로서비스보다 더 발생한다.
- 결합도는 한가지를 바꾸면 다른 것도 바꿀 필요가 있는 방식을 말한다.
- 응집력은 관련된 코드를 그룹으로 묶는 방식을 뜻한다.
- Monolithic Architecture란, 소프트웨어의 모든 구성요소가 한 프로젝트에 통합되어있는 형태
→ 구조는 응집력이 높고 결합도가 낮을때 안정적이다.
- MVC
- 모델-뷰-컨트롤러
- 1) 모델 - 핵심 기능과 데이터를 포함합니다.
- 2) 뷰 - 사용자에게 정보를 표시합니다(하나 이상의 뷰가 정의 될 수 있습니다)
- 3) 컨트롤러 - 사용자로부터 발생한 입력을 처리합니다.
- 이는 정보가 사용자에게 제공되는 방식과 받아들여지는 방식에서 정보의 내부적인 표현을 분리하기 위해 나뉘어 집니다.
이는 컴포넌트를 분리하며 코드의 효율적인 재사용을 가능하게 만들어줍니다.
(ex : 일반적인 웹 어플리케이션 설계 아키텍처, 웹 프레임워크)
참고:
https://resources.sei.cmu.edu/library/asset-view.cfm?assetID=513807
[마이크로서비스] MSA의 핵심 구성 요소 - API Gateway 패턴
MSA(Microservice Architecture)란, 개념 이해하기
goQuality-dev-contents/3. 백엔드 at master · Integerous/goQuality-dev-contents
'개발 > 개발지식' 카테고리의 다른 글
[생성 패턴] 싱글톤 패턴(Singleton pattern) (0) | 2023.02.22 |
---|---|
REST API (0) | 2023.02.21 |
디자인패턴 (0) | 2023.02.21 |
스웨거 Swagger (0) | 2023.02.21 |
트러블 슈팅 (0) | 2023.02.19 |