첫 설계 시 경계 잘못 나눈 뒤 리팩터링한 과정
마이크로서비스 아키텍처를 설계할 때 가장 중요하게 생각하는 요소는 경계 설정이라고 생각합니다. 졸업 프로젝트에서 처음으로 서비스를 여러 개로 나눠 설계해본 경험이 있습니다. 초반에 경계를 너무 잘게 나눠서 오히려 더 복잡해진 경험이 있었습니다.
처음에는 '기능마다 서비스를 따로 만들면 유연하겠다'는 생각으로 사용자, 인증, 알림, 파일 업로드를 각각 분리하였습니다. 그러나 막상 구현해보니 서비스 간 호출이 너무 많아지고, 4개 서비스가 동시에 떠 있어야 간단한 기능 하나가 구현되었습니다. 로컬에서 개발할 때도 불편하고, 오류가 발생하면 어디서 난 건지 추적하기가 어려웠습니다.
결국 인증을 사용자 서비스 안으로 합쳐서 3개로 줄였습니다. 이후 설계할 때는 '이 두 서비스가 항상 같이 배포되거나 같이 호출되면 하나로 합쳐야 한다'는 기준을 세우게 되었습니다. 완전히 맞는 방향은 아니었지만 처음보다 훨씬 관리가 편해졌습니다. 경계를 나누는 기준이 기술이 아니라 변경 주기와 책임이라는 것을 실제로 겪고 나서야 알게 되었습니다.