Micro Service Architecture의 약자로 아키텍처 스타일 중 하나이다.
Micro Service 라는 단어에서도 알 수 있듯이 하나의 어플리케이션을 여러개의 독립적인 서비스
로 분리한다는 점이 중요하다.
서비스가 독립적이기 때문에 서로 독립적으로 확장이 가능하다. (독립적으로 배포, 영향을 주지 않으며 업데이트 가능)
개발자말고도 회사입장에서도 장점이 있는데,
서비스가 독립적이기때문에 각 서비스를 작은단위의 팀으로 개발 및 관리 할 수 있다. 또한 각각의 팀들은 다른 서비스를 개발하는 것이기 때문에 팀별로 다른 기술스택을 사용해도 무방하다.
모놀리식 아키텍처
는 원래 많은 개발자들이 사용하던 개발 구조이다.
하나의 애플리케이션에 모든 서비스 기능들이 들어가 있고, 코드가 큰 하나의 덩어리로 존재하기 때문에 배포나 데이터의 일관성면에서 장점을 가진다.
하지만, 가령 A라는 기능을 확장 하고자할때, 큰 코드 덩어리 전체를 확장해야하는 불편함이있고, 작은변경사항에도 애플리케이션 전체를 재배포 해야한다는 단점이 존재한다.
하지만 MSA
의 경우 각각의 서비스를 따로 관리하며 복잡성이나 관리 비용이 증가하지만, 위에서 언급한 모놀리틱 설계의 거의 모든 단점을 커버하는 특징이 있다.
내가 생각하는 MSA 도입의 가장 큰 이유는
신뢰성
인 것 같다. 사업 규모가 커지고 해당 어플리케이션을 이용하는 사람이 많아지면 하나의 작은 서비스 장애가 어플리케이션 전체에 영향을 미칠 수 있기 때문에 서비스 간 독립적인 MSA를 사용하지 않을까 ?
위에서 먼저 언급한 MSA 개발을 위해 다양한 도구, 서비스를 제공해주는 확장된 프레임워크이다.
클라우드 서비스
자체를 요즘은 안쓰는 회사가 없다.
기존 서비스제공 방식인 온프레미스 방식
의 경우 기업이 서버를 자체적으로 들고 있는 형태로 초기 비용이 비싸고, 서버와 관련된 이슈를 회사가 책임져야 하는 경우가 많다.
이러한 이유로 최근 많은 회사가 온프레미스 방식
에서 클라우드 서비스
방식으로 전환을 하는 추세이다.
SpringCloud를 통해 자동화된 환경설정을 할 수 있어 개발자는 비개발적인 부분에 신경을 덜 쓰고 코드에 집중할 수 있는 환경이 된다.
SpringCloud에서 지원하는 주요 기능들을 알아보자.
Eureka, Ribbon, Hystix 같은 경우는 OTT 서비스로 유명한 넷플릭스에서 만든 오픈소스들이다.
각각의 모듈에 대한 설명은 다음 글에서 설명
MSA 에 대해서 잘 정리해주셨습니다👍🏻