웹 서비스 초기에는 제공하는 서비스가 많지 않고, 이용자가 적기 때문에 프로젝트의 규모가 작다.
이때는 프로젝트를 하나로 관리하게 되는데 이러한 형태를 모놀리틱 아키텍쳐라 부른다.
하나의 웹 애플리케이션이기 때문에 서버에 문제가 생겨 중단되면 모든 서비스가 중단된다.
시간이 지날수록 제공하는 서비스가 많아지고, 이용자가 많아지면 자연스럽게 프로젝트의 규모도 커지게 된다.
마이크로 서비스 아키텍쳐는 이러한 큰 규모의 프로젝트를 마이크로 서비스로 나누어 프로젝트를 만들고 관리한다.
모놀리틱 아키텍쳐에 비해 좀 더 복잡한 구조를 가지지만, 각 프로젝트의 관점에서 보았을 땐 더 단순하다.
마이크로 서비스 아키텍쳐의 주목할만한 이점은 다음과 같다.
마이크로 서비스 아키텍쳐 도입을 위해서 다음과 같은 것을 고려할 필요가 있다.

각 서비스 API 호출을 위한 진입점 역할을 한다.
게이트웨이에 요청이 들어오면 조건에 따라 각 서비스로 라우팅한다.
디스커버리를 통해 각 서비스의 상태를 확인하고 로드밸런싱을 지원한다.
게이트웨이에 장애가 발생하면 SPOF 문제가 발생하므로,
게이트웨이는 고가용성 장비를 사용한다.
각 서비스의 주소와 상태를 관리한다.
서비스끼리 통신을 하기 위해서 사용되기도 한다.
인증 및 인가 서비스를 제공한다.
사용자를 인증하고, 사용자를 식별할 수 있는 정보와 인가 정보를 담아 토큰을 만들어 반환한다.
토큰은 추후 요청에 담겨 사용된다.
API 요청을 위해서 인가가 반드시 필요하다.
API 요청 시 인가를 확인할 필요가 있는데, 앞서 인증 서비스에서 토큰에 인가 정보를 담았다.
따라서 토큰에서 인가 정보를 꺼내어 사용하면 되지만, 그 전에 유효한 토큰인지 확인해야 한다.
토큰 유효성 검사를 수행할 후보는 다음과 같다.
게이트웨이는 각 서비스의 가장 앞단에 있다.
따라서 각 서비스의 공통 로직을 처리하기에 최적화되어 있다.
유효성 검사 또한 마찬가지이지만, 유효성 검사를 위해 비밀키가 필요하므로
인증서비스와 게이트웨이 두 곳에서 비밀키를 관리해야 한다.
인증 관련 서비스를 제공하므로 관련성 높은 코드를 모아둘 수 있다.
하지만 매 요청마다 인증서비스를 통해야므로 인증서비스의 부하가 집중될 수 있다.