1.1 마이크로 서비스란?


마이크로 서비스란 작고 자율적으로 협업하는 서비스를 의미한다.

1.1.1 작고, 한 가지 일을 잘하는데 주력


코드베이스는 새로운 기능을 추가하면서 성장한다. 하지만 시간이 지날 수록 매우 방대해져서 어디를 변경해야 할 지 파악하기 어려워진다. 명확하고 모듈화된 모놀리식 코드베이스를 추구하더라도 중간 경계 어딘가가 빈번이 무너지기 시작하고, 버그를 고치거나 어려운 구현을 하는 과정에서 유사한 기능과 연관된 코드가 곳곳으로 퍼져나간다.

모놀로식 시스템에서는 우리는 코드를 더 응집하고, 추상화 또는 모듈화하면서 앞에서 언급한 위험에 대항한다. 응직렵, 즉 관련된 코드들을 함께 그룹화하려는 힘은 마이크로서비스의 중요한 개념이다. 로버트 마틴은 단일책임원칙에서 다음과 같이 강조했다.

같은 이유로 변경되는 것들을 분리하라

마이크로서비스는 주어진 기능과 관련 코드들이 명확히 제자리에 있도록 하면서 서비스 경계를 비즈니스 경계에 일치시킨다. 그리고 이 서비스의 명확한 경계를 지키면서 서비스가 지나치게 커지는 것에 대한 유혹을 회피한다.

얼마나 작아야 하는 것인가?

코드 줄 수를 기준으로 제시하는 것은 문제가 있다. 또한 우리는 그 자체가 수 많은 코드로 구성된 복합적인 종속성에 대해서도 고려해야 한다. 게다가 우리 도메인 영역 중 일부는 합당한 이유로 복잡해진 만큼 더 많은 코드가 필요할 수 있다. 실제로 호주의 부동산 매매정보 사이트인 리얼Estate의 존 이비스는 이렇게 마이크로 서비스를 정의한다.

마이크로서비스란 2주 안에 재작성될 수 있는 것

다소 진부한 다른 답변은 충분히 작아서 더 이상 작아질 수 없는 크키 이다. 코드가 지나치게 크다고 느껴지지 않는 다면, 아직은 더 조각낼 필요 없을 만큼 충분히 작다고 주장 할 수 있다.

얼마나 작은지에 대한 답변을 하기 위해서는 서비스가 팀 구조와 서로 얼마나 적절하게 배치되어 있는지 아는게 중요하다.