MSA란
요약
- 모놀리스 아키텍처와 마이크로서비스 아키텍처 비교
- 마이크로서비스 아키텍처 장단점 및 구조 설명
- 구현 요소
- 패턴
키워드
- 아키텍처 선택의 기준
- 프로젝트 규모, 기간, 요구사항, 고도화 여부
- 모놀리식 아키텍처
- 장점
- 간단한 개발: 단일 애플리케이션 구축
- 애플리케이션 변경 용이: 코드나 DB 스키마 변경이 쉬움
- 테스트 용이: 애플리케이션 종단 테스트가 쉬움
- 배포 용이: 단순히 톰캣 설치 경로에 WAS 복사
- 확장 용이: 애플리케이션 인스턴스 여러 개 실행
- 단점
- 장점이 많아보이지만 시간이 흐름에 따라 개발/테스트/배포/확장은 어려워짐
- 프로젝트 규모가 커지면서 개발자도 이해하기 힘든 기능 증가
- 애플리케이션도 커지며 실행 속도, 빌드 시간이 지연
- 동일 코드 베이스를 수정하며 소스 병합 어려움
- 하나의 애플리케이션에 수정이 발생했으므로 전 기능에 대해 테스트하지 않으면 신뢰 저하
- 하나의 모듈에만 버그가 있어도 인스턴스 다운될 가능성 증가
- 신 기술을 적용하고 싶어도 모든 애플리케이션이 묶여있어 과거 기술 스택을 벗어날 수 없음
- 요약
애플리케이션 규모가 커질수록 유지보수성, 확장성, 테스트성에 영향을 받음
- 장점
- 마이크로서비스 아키텍처
- 장점
- 크고 복잡한 애플리케이션 지속적 전달/배포
- 작은 단위의 서비스 관리 용이
- 서비스 독립 배포/확장
- 결함 격리 용이
- 신기술 도입 용이
- 단점
- 강결합된 서비스의 분리가 쉽지 않음
- 분산 시스템이 복잡해지면 개발/테스트/배포가 어려움
- 여러 서비스에 걸친 공통 기능 배포
- 도입 시점 결정 어려움
- 아키텍처
- 클라이언트 - 요청 시작
- API 게이트웨이 - 호출됨
- 인증서버 - 권한 인증 및 토큰 획득
- 유레카 - 서비스 위치 조회 후 서비스(API) 호출
- 서비스(API) - 호출됨
- 인증서버 - 권한 인가
- DB 접속 및 조회(비즈니스 로직)
- HTTP 응답
- 마이크로서비스 작성 지침
- 적정 규모
- 하나의 서비스가 너무 많은 책임을 지지 않도록 구현
- 위치 투명성
- 서비스 호출에 대한 물리적 정보를 관리
- 회복성
빠른 실패
를 통해 실패한 서비스를 우회하고 애플리케이션 전반의 무결성을 보호하도록 구현
- 반복성
- 서비스의 모든 인스턴스가 새로 시작될 때 운영 환경의 타 서비스와 동일한 구성 및 코드베이스 보장
- 확장성
- 서비스 간 직접적인 종속 관계 최소화
- 적정 규모
- 장점
- 확장 큐브
- 확장성을 위한 3가지 측면
- 기능에 따른 애플리케이션 분리
- 요청자에 따른 애플리케이션으로의 요청 분산
- 애플리케이션 인스턴스 복제 확장
- 확장성을 위한 3가지 측면
- 클라우드 컴퓨팅
- 물리 머신에 구축하고 배포하는 것은 스케일 업이나 회복성이 떨어질 수 있음
- 클라우드 기반의 마이크로서비스는 탄력성(회복성)과 요청량에 따른 축소로 비용절감도 가능
- CaaS, IaaS
- PaaS 기반의 마이크로서비스는 컨테이너 추상화는 가능하다 제공업체의 솔루션 고유 특성이 있음
- 패턴
- 패턴 및 패턴 언어
- 패턴이란 특정 상황에서 발생한 문제에 대해 재사용 가능한 해법이나 이미 검증된 아이디어
- 패턴 언어란 특정 영역 내에서 문제 해결과 연관된 패턴 집합
- 패턴 구조
- 강제 조항
- 결과 맥락
- 연관 패턴
- 애플리케이션 아키텍처의 문제 해결을 위한 패턴들
- 아키텍처 패턴
- 분해: 시스템을 여러 서비스로 분해하는 패턴(비즈니스, DDD)
- DB
- 쿼리
- 데이터 일관성
- 테스트
- 애플리케이션 인프라 패턴
- 횡단 관심사
- 보안
- *통신(트랜잭셔널 메시징,통신 유형,신뢰성)
- 인프라 패턴
- 배포
- *통신(디스커버리,외부 API)
*통신 패턴
통신 유형: IPC(pipe, message queue, memory, socket), TCP/UDP
디스커버리
신뢰성
트랜잭셔널 메시징
외부 API
- 아키텍처 패턴
- 마이크로서비스 주요 패턴 종류
구현까지는 쉬워도 실제 환경에서의 운영은 다음과 같은 패턴들을 모두 고려해야 함
- 핵심 개발 패턴
- 라우팅 패턴 API 게이트웨이 사용을 통해 모든 서비스에 대한 단일 진입점 제공을 하며 일관된 보안 정책과 라우팅 규칙 적용
- 서비스 디스커버리
- 서비스 레지스트리
- 클라이언트 탄력성 패턴
- 보안 패턴
- 인증
- 인가
- 자격증명 관리
- OAuth 2.0
- 로깅 및 추적 패턴 마이크로서비스 아키텍처는 단점인 한 동작으로 인한 수많은 호출 발생에 대한 추적과 모니터링을 필요로 함
- 분산 추적(슬루스, 집킨, ELK 스택)
- 애플리케이션 지표 패턴
- 빌드 및 배포 패턴 서버 변경 사항으로 발생되는 구성 불일치를 최소화해야 함
- 패턴 및 패턴 언어
- 참고하면 좋을 패턴
- BFF(Backend For Frontend)
참고
BFF 설명 포스트
- BFF(Backend For Frontend)