본문 바로가기

모놀로식과 마이크로 서비스

모놀로식 아키텍처라 하면 모든 서비스가 하나의 커다란 프로그램으로 동작하는 구조를 말한다. 이는 하나의 프로그램으로 되어있다는 점 때문에, 개발이 간단하고, 배포가 쉽고 확장이 쉽다는 장점이 있었다. 하지만 프로그램의 크기가 커질수록 이러한 장점은 단점이 되어갔다.

 

모놀로식 아키텍쳐로 설계된 프로그램의 경우 기능들끼리 복잡하게 의존관계가 엮여있는 경우가 많다. 그러다 보니 한 기능을 바꾸기 위해선 다른 기능도 같이 변화가 되는등 시간과 비용이 많이 들어가게 된다. 또한 확장 하기는 쉽지만, 효율적인 확장이 어려워 지게 된다. 모든 서비스가 하나의 어플리케이션으로 제공되기 때문에, 특정 서비스에 부하가 몰려 확장을 하게되면 그 외 불필요한 서비스까지 같이 확장이 되게 된다. 이러한 모놀로식 아키텍쳐는 규모가 커질수록 관리성(maintainability), 확장성(extensibility) 등이 떨어지게 된다.

 

마이크로 서비스는 이러한 단점을 어느정도 해결해준다. 마이크로 서비스는 서비스를 모듈 단위로 나누고 각 서비스만이 사용하는 DB를 따로 가지고 있게 된다. 그러다 보니 서비스간 연결성이 약해지게 되고 의존 관계가 약해져 별도의 개발 및 운영이 가능해진다. 서비스가 나눠진탓에 거대한 어플리케이션이더라도 각 서비스마다의 개발 및 배포를 빠르게 진행할 수 있게 된다. 또한 나눠진 서비스의 규모가 상대적으로 작기 때문에 관리하기에도 용이해진다는 장점이 있다. 게다가 나눠진 서비스 덕분에 특정 서비스의 확장이 필요한 경우 해당 서비스만의 확장이 가능해져 효율적인 확장이 가능해진다.

 

하지만 이러한 마이크로 서비스에도 장점만 있는것은 아니다. 우선 배포 하기가 어렵다는 단점이 있다. 잘게 나눠진 서비스들을 분산시켜 배포해야하는 마이크로 서비스의 특성 상 서비스 구축 및 운영이 많이 까다로워질 수 있다. 이러한 점은 운영 복잡도를 크게 가중시키게 된다. 다행히 이러한 점을 개선시켜주는 쿠버네티스와 같은 플랫폼들이 많이 나오고 사용되어 어느정도 해결해 줄 수는 있지만 운영이 까다로운것은 단점이긴 하다.