🙊 잘못 작성한 부분은 댓글로 남겨주세요~!
말 그대로 작은 서비스라는 뜻이며, 한 프로젝트를 여러 개의 작은 서비스로 분해하여 개발, 운영, 배포하는 소프트웨어 개발 기법을 말한다. 즉 작은 서비스의 집합으로 하나의 애플리케이션을 구현하는 것이다. 이때, 각각의 작은 서비스들은 자신만의 독립적인 프로세스를 가지는 가벼운 구조로 구성되어 있고, HTTP기반의 API를 사용해서 서로 연동한다는 것이 일반적인 마이크로서비스의 개념이다.
마이크로서비스 아키텍쳐 방식으로 개발을 하기 이전에는 모놀리틱 아키텍쳐(Monolitic Architecture) 방식으로 서비스를 배포했다고 한다.
모놀리틱 아키텍쳐가 뭐냐면? 하나의 패키지에 비즈니스 로직과 DB, UI 등을 담아서 배포하는 방식이다. 하나의 패키지로 애플리케이션을 운영하기 때문에 빠르고 쉽게 서비스를 구성할 수 있고 적은 비용으로 출시가 가능하다는 단점이 있지만 개발에 있어서 문제점을 가지고 있다. 모놀리틱 아키텍쳐의 문제점이라 함은...
- 코드가 많아지고 복잡해질 수록 소스 코드의 수정이 어려워진다. 그에 따라 애플리케이션 빌드, 배포 시간도 길어진다!
- 장애 발생 시 부분 장애가 전체 서비스의 장애로 확대된다.
- 언어와 framework에 종속적이므로 새로운 기술의 적용이 어렵다.
그래서 이러한 위험을 잘개 쪼개기 위해서 새로운 아키텍쳐의 필요성이 늘었고, 그 결과 탄생한 개념이 마이크로서비스 이다!
우선모놀리틱 아키텍쳐를 사용할 경우 야기될 수 있는 문제들을 해결할 수 있다! 서비스 자체와 서비스에 필요한 데이터를 캡슐화했기 때문에 전체 서비스를 하나의 덩어리로 고려하지 않아도 되어서, 장애 처리나 코드의 수정 등에서 시간과 비용이 절감되는 효과를 가져온다.
참고로 본 영상에서는 마이크로서비스를 우리 신체의 장기로 비유했는데 정말 재미있는 아이디어인 것 같다. 각자 독립적으로 존재해서 일을 하고 그러면서 의존성도 있고 장기 하나에 문제가 발생한다고 해도 신체 활동에 문제가 없을 수 있으니 딱 붙는 비유라고 생각했다. 왜냐면 마이크로서비스가 얼핏 보면 효율적인 것 같지만 단점을 생각하면 꼭 그렇지도 않기 때문인데...
전체적인 기술 복잡도가 증가하기 때문에 일반적을오 작은 서비스 보다는 큰 서비스에서 많이 권장되는 편이다.
또한 마이크로서비스 아키텍쳐의 서비스들도 마찬가지로 다른 서비스와 의존성이 있기 때문에 하나의 서비스에 장애가 있는 경우 의존성이 있는 다른 서비스의 장애를 야기하여 연속장애를 일으킬 수 있다.
또한, 다른 서비스를 호출할 때 네트워크 지연이나 트래픽으로 인한 라우팅 문제 등 때문에 요청에 대한 응답속도가 늦어질 수 있으며 이로 인해 혼잡성이 증가하고 에러가 발생할 가능성이 높은 점을 단점으로 꼽을 수 있다.
따라서 마이크로서비스로 개발을 진행할 경우 서비스 간의 통신에 대한 처리를 하는 등 추가적인 조치를 취해야할 것이다.
📌 참고 사이트
Mastering Chaos A Netflix Guide to Microservices
4/27 TIL
What are microservices?
마이크로서비스 아키텍처(MSA) 개념 소개