MA vs MSA
- 소프트웨어 애플리케이션을 설계하고 구축하는 두 가지 주요한 접근 방식
- 각 프로젝트의 요구사항과 팀, 개발/배포 프로세스에 따라 아키텍쳐를 고려해야함. → 때로는 하이브리드 방식도 적용될 수 있음.
- MA → MSA로 전환하는 시점 등을 고려해보기
MA (Monolithic Architecture)
**간단한 어플리케이션을 빠르게 개발하고 배포할 때 유용**
- 단일 모듈 구조 : 모든 구성요소를 하나의 서버에 때려박은 구조
- 어플리케이션은 단일 모듈 or 단일 코드베이스로 구성됨. = 하나의 프로젝트 내에서 모든 기능과 컴포넌트가 통합되어 있음.
- 단일 데이터베이스
- 모든 기능이 하나의 DB에 접근 = 데이터베이스 스키마는 어플리케이션 전체에 공유
- 모듈 간 강한 결합
- 스케일링이 어렵다 (=수평 스케일링)
- 특정 기능만 확장하거나 업데이트하기 어려움
- 수직 스케일링 vs 수평 스케일링 EX) RAM 업그레이드 → 수직 : 8GB → 16GB로 새로 갈아 끼우기 → 수평 : 8GB를 2개 끼우기
- 일부의 도메인을 수정해도 빌드 시에 전체를 빌드해야하기 때문에 시간이 오래 걸린다.
MSA (Micro Service Architecture)
**복잡한 어플리케이션, 대규모 팀이 작업하는 경우 유용**
**서비스 간의 독립성과 확장성이 필요한 경우 적합**
**서비스 간 데이터 공유를 위해 API나 이벤트 기반의 통신을 사용함.**
- 분리된 작은 서비스
- 어플리케이션은 특정한 업무를 수행하는 독립적인 서비스로 나뉨
- 독립적인 데이터 베이스
- 독립적으로 존재하는 서비스의 필요에 따라 자체 데이터베이스를 가짐
- 느슨한 결합
- 배포 용이성 ( 빠르고 안전한 업데이트 제공 )
- 일부 도메인만 수정해서 따로 빌드 가능
- 병렬 방식으로 빌드를 하기 때문에 시간이 단축된다.
- 기술 다양성
- 서비스 간에 다양한 기술 사용 가능 → 각 서비스가 자체적으로 선택한 언어나 프레임워크를 사용할 수 있다. → JSON으로 데이터를 통신하니까 가능하다. ex) A서버-스프링부트(JAVA), B서버-node(JS), C서버-Jango(파이썬) 등으로 나눌 수 있다. ⇒ 각 서비스에 강점이 있는 언어로 도메인을 구축할 수 있다.
대규모 서비스를 지탱하기 위한 부하분산