Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 국가공은자격증
- Oracle
- 프로그래머스 위장
- 베트스앨범
- SQL
- Row-Source Generation
- 깃랩 젠킨슨 연동
- FTP
- AWS
- 코딩테스트
- SQL Optimizer
- 윈도우 kill -9
- 스프링 실행 에러
- 알고리즘
- 인바운드규칙
- jenkins gitlab 연동
- Java
- db
- EC2
- jenkins
- SQL Parser
- 프로그래머스
- 윈도우 프로세스 죽이기
- 리액트 돔
- Soft Parsing
- Hard Parsing
- 프로그래머스 전호번호 목록
- SQL파싱
- Clooection
- SFTP
Archives
- Today
- Total
알파돈
MSA란 무엇인가? 왜 사용하는가 본문
MSA란
Microservice Architecture란 소프트웨어 개발하는 아키텍처의 하나로 하나의 큰 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 운영까지 하는 설계 방법론이다.
모놀리식(Monolithic)처럼 하나로 통합된 큰 시스템과는 다르게 서비스들이 독립적으로 실행하며 다른 서비스들과 느슨한 결합을 이뤄 복잡성을 관리하고, 개발과 배포의 민첩성을 높이는 접근 방식이다.
MSA의 주요 특징
- 작고 독립적인 서비스 - 각 서비스는 특정 비즈니스 기능을 담당하며 독립적으로 개발, 배포, 확장가능
- 분산 데이터 관리 - 각 서비스는 자신만의 데이터베이스를 가질 수 있으며, 서비스 간에는 API를 통해 통신
- 유연한 확장성 - 필요한 서비스만 선택적으로 확장할 수 있어 리소스를 효율적으로 사용
- 독립적인 배포 - 각 서비스를 독립적으로 배포할 수 있어 개발 및 출시 주기가 빠르다
- 기술 다양성 - 각 서비스마다 다른 프로그래밍 언어나 프레임워크를 사용
- 장애 격리 - 한 서비스의 장애가 전체 시스템에 미치는 영향을 최소화
MSA의 핵심 구성 요소
- API 게이트웨이 - 클라이언트와 마이크로서비스 사이의 중간 계층으로 라우팅, 인증, 로드 밸런싱 등을 담당
- 서비스 디스커버리 - 각 서비스의 위치(IP, 포트)를 동적으로 관리하고 검색하는 메커니즘
- 메시지 큐 - 서비스 간 비동기 통신을 위한 이벤트 브로커 시스템
해당 특징들로 많은 프로젝트들이 모놀리식(Monolithic)방식에서 MSA방식으로 전환중이며, 운영하고 있다.
이해를 위해 MSA의 핵심 개념을 잘 보여주는 구체적인 예를 보자.
e-커머스 애플리케이션을 MSA로 구현할 때:
주문 서비스
- 언어: 파이썬
- 데이터베이스: MySQL
- 기능: 주문 생성, 주문 상태 관리, 주문 이력 조회
결제 서비스
- 언어: C
- 데이터베이스: PostgreSQL
- 기능: 결제 처리, 환불 처리, 결제 이력 관리
회원 서비스
- 언어: 자바
- 데이터베이스: Oracle
- 기능: 회원 가입, 인증, 프로필 관리
상품 서비스
- 언어: 파이썬
- 데이터베이스: Oracle
- 기능: 상품 정보 관리, 재고 관리, 카테고리 관리
애플리케이션을 예시처럼 MSA로 구축하였을때 얻는 이점은 무엇인가?
- 기술적 다양성 - 각 서비스마다 비즈니스 요구사항이나 팀의 전문성에 따라 다른 프로그래밍 언어와 데이터베이스를 선택
- 독립적인 개발 및 배포 - 각 서비스에 새 기능을 추가할 때 다른 서비스에 영향을 주지 않습니다.
- 도메인 중심 설계 - 각 서비스는 특정 비즈니스 도메인에 집중합니다.
- 탄력적 확장 - 예를 들어, 블랙 프라이데이 세일 기간에는 상품 서비스와 주문 서비스만 집중적으로 확장
그렇다면, MSA의 단점은 무엇인가?
- 분산 시스템 복잡성 - 여러 서비스로 나누면서 시스템 전체의 복잡성이 증가합니다. 서비스 간 통신, 장애 처리, 모니터링, 디버깅 어려움
- 트랜잭션 관리의 어려움 - 여러 서비스에 걸친 데이터 일관성을 유지하기 어렵습니다. 분산 트랜잭션을 구현하거나 보상 트랜잭션 패턴을 사용해야 합니다.
- 네트워크 지연과 오버헤드 - 서비스 간 통신이 네트워크를 통해 이루어지면서 지연이 발생하고 성능에 영향을 줄 수 있습니다.
- 테스트 복잡성 - 다수의 서비스가 상호작용하는 환경에서 통합 테스트가 매우 복잡해집니다.
- 배포 및 운영 복잡성 - 여러 서비스를 독립적으로 배포하고 관리하는 데 더 많은 DevOps 지식과 도구가 필요
- 인프라 비용 증가 - 각 서비스마다 독립적인 인프라가 필요하므로 자원 사용량과 운영 비용이 증가
- 데이터 중복과 일관성 문제 - 각 서비스가 자체 데이터베이스를 가지면서 데이터 중복이 발생하고 일관성 유지가 어려움
- 서비스 경계 설정의 어려움 - 서비스 간 책임과 경계를 명확히 정의하는 것이 쉽지 않으며, 잘못된 설계는 강한 결합이 발생
- 버전 관리의 복잡성 - 서비스 간 API 버전 관리가 더 복잡
- 학습 곡선과 조직적 도전 - 팀이 분산 시스템, 도메인 주도 설계, 컨테이너화 등 새로운 기술과 개념을 학습필요
MSA는 많은 이점을 제공하지만, 소규모 애플리케이션, 또는 잘못된 방법으로 단점이 이점을 상쇄할 수 있다.
'WEB > BACK' 카테고리의 다른 글
[Spring Boot] Port 8080 was already in use Error (0) | 2021.11.08 |
---|
Comments