왜 필요한가
가족이 행사 안내를 저장하고 참가비를 내는 학교 앱을 만든다고 가정해 봅시다. 자원봉사 태그는 급하지만 결제는 기존 배포 일정을 지켜야 합니다. 한 팀이 태그를 독립 배포하려고 네트워크 조율을 감수합니다. 내부 모듈만 나누면 배포는 여전히 함께입니다.
어떻게 해결하는가
- 한 팀이 카탈로그·보관함·결제를 각각 v1으로 운영합니다. 저장한 학교 행사 안내에는 태그가 없습니다.
- 호환되는 태그 기능을 보관함 v2로만 배포합니다. 카탈로그·결제는 v1 유지.
- 보관함이 네트워크로 카탈로그를 조회한 뒤 자체 저장소에
자원봉사를 기록합니다. 쓰기 전 조회 시간 초과 시 태그 없음 유지. 실패를 알리고 복구 후 재시도합니다.
설명을 위한 가상 예시
기능 하나만 독립 배포
학교 행사 앱 · 한 팀 · 학교 행사에 자원봉사 태그 없음
변경: 보관함 태그 추가. 결제 동작은 그대로.
호환 계약 유지: 보관함만 새 배포 필요.
배포 단위 · 1
카탈로그
v1 → v1동작 유지
자체 저장소카탈로그배포 단위 · 2
보관함
v1 → v2태그 기능 추가
자체 저장소보관함배포 단위 · 3
결제
v1 → v1동작 유지
자체 저장소결제
네트워크 조회 · 태그 쓰기 이전
보관함 → 카탈로그 API
원격 응답은 보장되지 않습니다. 결제는 이 조회 경로에 참여하지 않습니다.
1 · 성공
조회 성공 → 자원봉사 기록 → 학교 행사 태그는 자원봉사.
2 · 카탈로그 조회 시간 초과
쓰기 전 조회 실패 → 태그 없음. 실패 안내, 복구 후 재시도.
각 서비스가 데이터를 소유하며 다른 서비스 테이블을 직접 읽지 않습니다. 독립 배포에도 관측·장애 처리가 필요하며 의존 서비스의 장애가 전파될 수 있습니다.
소유권 상자는 접근 규칙을 뜻하며 데이터베이스 서버 수를 뜻하지 않습니다.
독립 배포가 자동 장애 격리는 아닙니다. 동기 카탈로그 의존성은 보관함을 막을 수 있습니다. 시간 제한·재시도를 정하세요.
무엇이라 부르는가
마이크로서비스는 명시적 계약과 데이터 소유권을 갖고 독립 배포하는 업무 기능별 서비스입니다. 프로세스를 나누기만 해서는 독립성이 생기지 않습니다. Lewis·Fowler
네트워크 장애와 서비스 간 데이터는 조율해야 합니다. 나머지 기능은 모듈러 모놀리스로 유지할 수 있습니다.
이 선택에 관한 이야기
세 언어가 댓글을 공유합니다. 작성하려면 GitHub 로그인이 필요합니다.