MSA 배경
- 비즈니스 Agility(민첩성): 비즈니스의 경쟁력을 위해서 끊임없고 빠른 비즈니스 변화를 IT기술을 활용해서 추구.
예전에는 IT기술이 비즈니스를 후방에서 지원하는 서비스였지만 이제는 비즈니스의 근본적인 혁신을 위해 비즈니스의 주체를 IT에 맡긴다(DX) - 기술적으로는 결국 배포 빈도가 빠르다(ex. 아마존: 2014년, 초단 1.5회 배포를 한다)
⇒ 그만큼 서비스가 계속 개선하고 변화하고 있다는 의미다 - IT선진회사들은 안정적이고 빈번하게 배포를 하기 위한 방법이 무엇일까?? 를 고민하기 시작했고, 기술적인 변화를 주도하기 시작.
- 클라우드 인프라: 원하는 시점에 필요한 만큼 빠르게 인프라 제공, 사용한만큼 비용 지불, 사용빈도에 따라 자동 Scale Out/In 처리
- 클라우드 인프라에 적합한 어플리케이션(CloudNative): Scale Out에 어떤 구조가 더 효율적인가?? 어플리케이션 전체가 확장되는 구조(모노리스) → 필요한 영역만 확장하는것이 효율적!! ⇒ 마이크로 서비스 = CloudNative 어플리케이션
MSA 개념
일반적인 레거시 시스템(모놀리식 아키텍처)
- 어플리케이션이 한 덩어리로 단일 프로세스로 실행
- 한 덩어리로 수정되고 한 덩어리로 배포 됨 => 하나가 실패하면 전체 어플리케이션의 실패
- 객체간의 의존 관계 파악이 어려움, 시스템 전체 구조 파악 어려움
- 의존 관계가 큼으로 팀간 커뮤니케이션 측면의 비효율 발생
- 특정 부분 버그 발견 시 전체 릴리즈 중지 됨 ⇒ 배포에 부담, 개발자의 배포 자산감 떨어짐
- 규모 커질 수록 전체 빌드 및 결합에 많은 시간 걸림
- 사이즈가 큰 아티팩트로 이식성에 문제 될 수 있음(컨테이너 및 서버리스 등 적용 불가)
MSA(마이크로 서비스 아키텍처)
- 어플리케이션이 여러 개의 서비스로 분리되고 각자 독립적인 기능 제공
- 각 서비스가 사용하는 저장소의 분리로 완전한 격리
- 독립적으로 수정, 배포, 확장 가능
MSA의 장점과 고려사항
장점 | 고려 사항 |
책임이 명확한 작은 서비스 단위로 빠른 어플리케이션 릴리즈 가능 | 서비스 간의 통신 지연 |
빠르고 유연한 어플리케이션 변경 및 유지/관리 (비즈니스 변경 및 신기술 적용 용이) |
분산 배치된 데이터 동기화 |
작은 단위의 Scale Out 가능 |
분산 컴퓨팅 환경의 운영 및 감시 비용 (서비스 단위로는 단순하지만 전체 시스템적으로는 복잡성 증가) |
서비스 분리에 따른 장애 영향 최소화 | 시스템 전체 설계의 일관성 및 통일성 |
DDD 설계 활용으로 책임 범위, 서비스 간 의존관계가 명시적 임 | 서비스 모델링 기법의 학습 난이도 |
MSA 성공을 위한 조건
- MSA를 통해 비즈니스 Agility를 높이기 위해서는 여러 영역의 기술 뿐만 아니라 조직, 개발문화, 프로세스 등의 변화도 필요
변화 영역 | 내용 |
인프라 | - 안정적이고 유연하고 빠른 인프라 구성, 온 디맨드 확장, 탄력성 등 지원 - Public Cloud, IaC, 컨테이너 등 |
자동화 | - 개발 도구 자동화, 테스트 자동화, CI/CD 자동화 등 |
어플리케이션 설계 방식 | - MSA, DDD, 데이터 중복 허용, Eventual Consistency(결과적 일관성), 비동기 통신 등 - 기존 데이터베이스 중심의 설계방식(정규화, 트랜잭션, 프로시저)에서 벗어나야 함 |
조직 | - 기능 및 업무 단위 자율적인 권한과 책임 부여, DevOps 조직 - 조직간 커뮤니케이션 구조(신속하고 신뢰를 기반으로한 협업) |
개발 문화 | - 공유, 협업, 학습, 자율, 책임을 통한 지속적인 성장과 진화 - 실패에 대한 개인의 잘못이 아닌 프로세스의 문제를 파악하는 기회로 활용 |
개발 프로세스 | - 점진적, 반복적, 빠른 피드백과 반영의 개발 프로세스, Agile 프로세스 |
- MSA만 적용한다고 해서 선진 기술 조직이 되는 것은 아니다. 조직/문화/프로세스를 함께 변경했기 때문에 MSA가 가능한 것이다.
- 빅뱅 방식으로 한번에 모든 것을 바꾸기는 리스크가 많이 크고 점진적인 적용이 필요(스트랭글러 패턴)
점진적인 적용으로 기술적 성숙도 뿐만 아니라 조직의 성숙도도 함께 향상되어야 함
- 모든 시스템이 MSA가 필요한 것은 아님(= 모든 비즈니스가 Agility, 신기술, 탄력성, 확장성 등이 필요한 것은 아님)
백오피스 시스템 같은 경우 성능, 내고장성, 비용, 안정성 등이 더 중요할 수 있음
MSA 성숙도
- 모놀리식 -> 매크로(Macro) 서비스 -> 미니(Mini) 서비스 -> 마이크로(Micro) 서비스
'개발 > MSA' 카테고리의 다른 글
[MSA] 서비스의 데이터 오너십(소유) 종류와 처리 방법 (0) | 2024.08.10 |
---|---|
[MSA] 코드 재사용 및 공유 패턴 종류 및 장단점 (0) | 2024.08.05 |
[Spring Cloud] Spring Cloud Config 개념 및 구현 (2) | 2024.06.15 |
[MSA] MSA 마이크로서비스 아키텍처 패턴 이해 (0) | 2024.05.26 |
[API Gateway - KrakenD] KrakenD 소개 및 구성해보기 (0) | 2024.05.19 |
댓글