내가 이해한 MSA(MicroService Architecture)
업무관리 협업툴로 Swit을 사용하고 있다. 이를 통해 내가 소속된 프로젝트에서 어떤 업무들이 진행되는 지 알 수 있다.
나같은 신입에게 업무관리 협업툴이 좋은 이유는 동료들이 올린 업무를 보며 모르는 부분이지만 프로젝트를 위해서 필요한 부분을 스스로 찾아서 공부할 수 있다!
최근 MSA에 관한 업무카드가 올라왔다. 관련자료들도 링크를 달아두셨는데 놓치지않고 모두 읽었다.
직접 찾아본 자료들과 함께 MSA에 대해 정리하고자한다.
MSA란
- MSA는 MicroService Architecture의 약어로 독립적으로 배포가 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크
- 서비스가 잘 정의된 API를 통해서만 상호작용 가능
- 마이크로 서비스는 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실질적인 세부 사항은 모두 추상화한다.
- 내부의 구현 로직, 아키텍처와 프로그래밍 언어, 데이터베이스, 품질 유지 체계와 같은 기술적인 사항들은 서비스 API에 의해 철저하게 가려진다.
기존의 하나의 어플리케이션형태를 모노리틱아키텍쳐라고 한다.
모노리틱아키텍쳐(Monolithic Architecture)는 배포 및 테스트도 하나의 애플리케이션에서 수행하면 된다.
따라서 성능 제약이 덜하고 운영관리가 용이하고 소규모 프로젝트에 적합하다.
문제는 규모가 커지면 발생한다.모노리틱아키텍쳐 문제점
- 빌드/테스트 시간이 길어짐: 작은 수정에도 시스템 전체를 빌드/테스트해야함
- 선택적 확장 불가능: 쇼핑몰인 경우 이벤트로 인해 서비스접속량이 폭증하는 경우 프로젝트 전체를 확장해야함
- 하나의 서비스가 모든 서비스에 영향 끼침: 이벤트서비스에 과부화가 걸리면 다른 모든 서비스도 마비됨
이를 해결할 수 있는 아키텍쳐가 바로 MSA이다.
MSA 장단점
장점
- 빠르고 간단한 배포: 서비스간의 의존성이 없기때문에 독립적인 배포 가능
- 시스템의 선택적 확장
단점
- 높은 기술 복잡도
- 느린 속도: 하나의 애플리케이션에서 자기 자신의 메서드를 호출하는 것보다 다른 에플리케이션의 메서드를 호출하는 것임으로 속도가 느리다.
MSA의 문제점 중 하나는 각 서비스가 분리 배포되어있기 때문에 서버 URL이 각기 다를 수 밖에 없다.
이때 API Gateway가 필요하다.
Spring Cloud
- Spring Cloud: 마이크로서비스의 개발, 배포, 운영에 필요한 아키텍처를 쉽게 구성할 수 있도록 지원하는 Spring Boot기반의 프레임워크
위의 이미지에서 동그라미로 표시된 컴포넌트만 Spring cloud framework 컴포넌트이다.
MSA가 되면 각 독립적인 서비스들은 API 게이트웨이 뒤로 숨겨지게 된다. 외부에서 보면 모놀리식 애플리케이션과 동일하다.
마이크로서비스는 점차 많아질 수 있고 이 서비스간 상호작용을 할 수 있어야한다.
이는 각 마이크로서비스가 상대방의 네트워크 주소 정보를 유지해야한다.
- 서비스 디스커버리: 컴퓨터 네트워크상의 디바이스가 제공하는 디바이스와 서비스를 자동으로 감지하는 서비스다.
스프링 클라우드(1) - 개요에 아주 정리가 잘 되어있으므로 꼭 읽어보길 바란다.
Spring Cloud Eureka
한 마이크로서비스가 다른 마이크로서비스를 호출하려면 해당 IP를 알아야한다. 이걸 Service Discovery 서비스의 발견이라고 한다.
kubernetes환경에서는 대상 IP가 언제라도 증감될 수 있다.
- https://bravenamme.github.io/2020/08/26/spring-cloud-eureka/
- https://elky84.github.io/2018/09/23/java_zuul_use_story/
API Gateway
API서버 앞 단에서 모든 API 서버들의 End-Point를 단일화하여 묶어주는 역할을 한다.
API Gateway는 종류가 다양한데 이 중에서 zuul이 있다.
참고
- http://clipsoft.co.kr/wp/blog/%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4-%EC%95%84%ED%82%A4%ED%85%8D%EC%B2%98msa-%EA%B0%9C%EB%85%90/
- https://www.redhat.com/ko/topics/microservices/what-are-microservices
- https://docs.microsoft.com/ko-kr/azure/architecture/guide/architecture-styles/microservices
- https://12bme.tistory.com/506