마이크로서비스로 설계하기 위한 적합하지 않은 시스템이 존재하기 때문에 설계 전 과연 마이크로서비스로 설계하는 것이 맞나부터 검토해야한다.
- 비즈니스 문제의 분해
- 서비스 세분화의 확정
- 서비스 인터페이스의 정의
제일 먼저 해야할 일은 문제를 기술하는 것! 기술하지 않고 나눌생각부터 하면 시작하지도 못한다.
- 데이터 영역이 서로 어울리지 않는다면 서비스의 경계를 나누자
- 비즈니스 문제를 기술하고 그 문제를 기술하는데 사용된 명사에 주목하라
- 동사에 주목하라(조회해야되고...업데이트해야되고....)
- 데이터 응집성을 찾아라(데이터의 성향을 확인)
분해를 통해 데이터 모델을 단순화하고, 그 모델을 근거로 서비스를 정의한다.
적절한 서비스의 크기를 찾아서 설계한다. 처음부터 올바르게 설계하기 어렵기 때문에 점차 리팩토링하면서 발전해 나간다는 생각으로 해야한다.
- 너무 크거나, 잘게 쪼개면 안된다.
- 큰 마이크로서비스에서 시작해 작게 리팩토링하는게 더 낫다.
- 서비스간 교류하는 방식(인터페이스)부터 접근한다.
- 테이블은 3~5개이내만 소유하도록 설계한다.(너무 적어도, 너무 많아도 문제가 생긴다.)
서비스-서비스나 클라이언트-서비스 간 인터페이스를 정의할 때 직관적이고 서비스간의 동작이 통일성이 있어야 한다.
- REST 철학을 수용하라
- URI를 사용해 의도를 전달하라
- 요청과 응답에 JSON을 사용하라
- HTTP 상태 코드로 결과를 전달하라.