위 이미지 처럼 모든 기능을 하나의 프로젝트로 묶여 있는 방식을
모놀리식 아키텍처(Monolithic Architecture)라고 부릅니다.
이렇게 하면, 하나의 프로젝트를 개발하고 테스트하고 빌드하기 때문에 단순합니다. 하지만, 여러 모듈들이 함께 있기 때문에 작은 부분에 문제가 생겨도 다른 부분에 영향을 줍니다. 예를 들어 파일 업로드 기능 때문에 서버에 문제가 생겼는데, 이로 인해 로그인도 안되고, 모든 기능이 엉켜버리는 문제가 발생할 수 있습니다.
서비스가 점점 커질경우 하나의 프로젝트로 함께 묶는것이 점점 버거워지고 복잡해지게 됩니다. 이를 해결하기 위해 나온 것이 마이크로서비스 아키텍처(Microservice Architecture)입니다.
이름에서 알 수 있듯이 한 프로젝트를 여러 작은 서비스로 분리하여 개발하고 운영, 배포하는 방법입니다. 여러 모듈로 분리했기 때문에 팀별로 독립적으로 개발할 수 있게 됩니다.
또한 서비스 운영시, 만나게 되는 장애로부터 조금은 더 자유로워 질 수 있습니다. 기존 모놀리식 구조에서는 장애 발생시 서버가 죽게 되면 모든 API가 사용 불가능했지만, 마이크로서비스로 분리하게 되면 어떠한 기능에 장애가 생겨도 해당 API만 사용이 불가능하고, 다른 기능에는 문제없이 서비스를 운영할 수 있게 됩니다.
그럼 과연 모든 서비스에 적용하는 것이 좋을까요? 이러한 마이크로서비스 아키텍쳐를 적용했을 때에는 전체적인 기술 복잡도가 증가 할 수 있으므로 이를 잘 판단하여 서비스의 구조를 결정해야 합니다.