- 대규모 모놀리스 애플리케이션을 기술적 또는 조직적으로 확장하는 데 직면한 많은 난제에 대한 직접적인 대응
- 작고 느슨하게 결합된 분산 서비스
- 핵심 개념 : 분해(decomposing)와 분리(unbundling)
출처:https://s-core.co.kr/insight/view/%EB%8B%B9%EC%8B%A0%EC%9D%98-msa%EB%8A%94-%EC%95%88%EB%85%95%ED%95%98%EC%8B%A0%EA%B0%80%EC%9A%94-msa%EB%A5%BC-%EB%B3%B4%EC%99%84%ED%95%98%EB%8A%94-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98-edmevent-drive/
- 복잡성이 증가했다.
- 고객은 더 빠른 전달을 원한다.
- 고객 또한 안정적인 성능과 확장성을 요구한다.
- 고객은 애플리케이션을 언제든 사용할 수 있길 기대한다.
위 기대를 충족하기 위해 우리는 확장성과 중복성이 높은 애플리케이션을 구축하려면 애플리케이션을 독립적으로 빌드하고 배포할 수 있는 작은 서비스로 분해해야 하는 상황을 수용해야 한다.
애플리케이션을 더 작은 서비스로 분리(unbundle)하고 단일 모놀리식 산출물에서 서비스 산출물을 추출하면 우리는 다음 시스템을 구축할 수 있다.
- 유연성
- 회복성
- 확장성
정리하면
작고(small), 단순하고(simple), 분리된(decoupled) 서비스 = 확장 가능하고(scale), 회복적이며(resilient) 유연한(flexible) 애플리케이션!!
무조건 MSA가 좋다는 건 아니고 상황에 맞게 사용하면 모놀리식도 좋으니 잘 사용하길 바라면서..
스프링은 의존성 주입(dependency injection)이라는 핵심 개념에 기반을 둔다.
의존성 주입 프레임워크를 사용하면 애플리케이션 내 객체 관계를 서로 '알기' 위해 하드코딩하는 대신 관례(convention)와 애너테이션(annotations)으로 외부화할 수 있다.
스프링은 애플리케이션의 다양한 자바 클래스 사잉에서 중개자 역할을 하며 의존성을 관리한다.
스프링의 핵심 제품 기능
- 애플리케이션을 배포하는 데 복잡함을 줄여 주는 내장형 웹 서버: Tomcat(기본), Jetty or Undertow
- 프로젝트(Starter librarys)로 빠르게 시작할 수 있는 기본 구성(configuration)
- 가능하다면 스프링에 대한 기능적으로 자동화된 구성
- 운영 환경에 바로 사용 가능한 다양한 기능(지표, 보안, 상태 확인, 코드와 분리된 구성 등)
스프링 부트는 마이크로서비스에 다음 이점을 제공
- 개발 시간 단축, 효율성과 생산성 향상
- 웹 애플리케이션 실행을 위한 내장형 HTTP 서버 제공
- 많은 상용구 코드 작성 회피
- 스프링 데이터, 스프링 시큐리티, 스프링 클라우드 같은 스프링 생태계와 통합 용이
- 다양한 개발 플러그인 제공