최근 여러 채용 공고를 확인하면 MSA 기반 서비스를 개발한 경험을 우대 사항 또는 자격 요건에 걸어놓은 채용 기업이 많은데 그럼 여기서 말하는 MSA가 뭔지 알아보자
채용 공고를 통해서 원하는 바가 무엇인지 알아야 필요 역량을 정리하고 개발 할 수 있다.
나는 아직 도메인을 정하지 못해서 어떤 경험이 필요한지 잘 모름
다만 인프런 같은 교육 서비스를 제공하는 기업으로 가고싶고 해당 도메인에서 필요한 경험을 기반해서 하려고 한다. 📖
MSA는 Micro Service Architecture 의 줄임말이다.
마이크로 서비스 아키텍처라는 정의는 명확하게 존재하지 않는다고 한다.
현업에서 말하는 마이크로 서비스란 작고 독립적 배포가 가능한 기능을 수행하는 서비스로 구성된 구조
이렇게만 들으면 사실 감이 잘 안온다. 🙄
MSA 가 아닌 다른 서비스 구조를 확인해보자
모놀리식 아키텍처는 전통적인 개발 방식
하나의 프로젝트에 모든 기능이 포함되는걸 의미한다.
코드 베이스가 증가할 수 록 개발 및 배포에 복잡도가 상승하는 문제가 있음
위 그림을 살펴보면 회원, 상품, 주문에 대한 각 서비스가 모듈 단위가 아닌 프로젝트 하나에 모두 포함되고 있다.
여기서 예약 같은 다른 서비스가 추가됨에 따라 프로젝트 규모가 점점 증가하게 되는 것이다.
장점
- 초기 개발에 유리하여 프로토타입 개발 쉬움
- 필요한 기능을 한번만 호출하기 때문에 복잡한 통신 구조 X
단점
- 코드 베이스가 커질수록 복잡해지고 유지관리 및 확장이 어려움
- 일부 기능을 수정하거나 업데이트 하려면 전체 재배포
장점도 명확히 존재하나 서비스 규모가 점점 커지는 집단에서는 모놀리식 구조를 가져가기가 어려움
위 그림을 보면 모놀리식과 다르게 각 서비스는 모듈 또는 프로젝트로 나눠서 개발 관리된다.
즉 주문 기능이 변경되어도 다른 서비스를 재배포하지 않아도 가능하며
서비스가 독립적으로 운영되어 유지보수나 기능 추가가 쉬움
MSA를 통하면 API를 통해서 상호작용 할 수 있고 마이크로 서비스는 end-point를 API 형태로 외부에 노툴하고 실질적인 세부 사항은 모두 추상화된다.
내부의 로직, 프로그래밍 언어, 아키텍처, DB 와 같은 개발 기술 사항들은 모두 서비스 API에 의해서 가려지게 된다.
SOA(Service Oriented Architecture)의 특징을 다수 공통으로 가진다.
❓ SOA는 추후에 알아볼 예정이다.
장점
- 각 서비스가 모듈화 되어 있음 -> API 등을 이용하여 통신하여 서비스 개발 속도가 빠르며 유지보수도 쉬움
- 팀 단위로 적절한 기술 스택을 가져갈 수 있음
- 마이크로 서비스는 서비스별로 독립적 배포 가능
- 마이크로 서비스는 각각 서비스의 부항 ㅔ따라서 개발적으로 scale-up 가능
단점
- 모놀리식에 비해서 상대적으로 복잡함 -> 개발자가 내부 통신 시스템을 구현하고 어떻게 transaction 할지를 결저하고 구현해야함
- 모놀리식에서는 단일 트랙잭션을 유지하면 되지만 MSA는 각각의 비지니스의 트랜잭션을 다르게 가져가야함
- 통합 테스트가 어려움
- 하나의 서비스 재배포시 연동 테스트가 추가로 필요
이처럼 여러가지 장 단점이 있지만 대형 서비스에서 필요한 걸 장애 최소화이고 장애를 최소화 하기 위해서는 결국 유지 보수가 용이한 MSA를 대부분의 대형 서비스 기업에서 채택했을 것이라고 생각된다.