Microservice Architecture
왜 마이크로서비스를 선택하는가
마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 여러 개의 작은 서비스로 나누는 방식이다. 각 서비스는 독립적으로 배포되고, 자신의 데이터와 책임을 가진다.
이 구조를 쓰는 이유는 보통 다음과 같다.
- 팀 단위로 소유권을 나누기 쉽다.
- 특정 기능만 독립적으로 배포할 수 있다.
- 트래픽 특성에 맞춰 서비스별로 확장할 수 있다.
- 장애 범위를 한 서비스 안으로 제한하기 쉽다.
반대로 시스템이 단순한 초기 단계라면 운영 복잡도만 늘어날 수 있다.
핵심 구성 요소
마이크로서비스를 설계할 때 자주 등장하는 구성 요소는 다음과 같다.
API Gateway: 외부 요청의 진입점Service Discovery: 서비스 위치 관리Message Broker: 비동기 이벤트 전달Observability: 로그, 메트릭, 트레이싱Per-service Database: 서비스별 데이터 소유권
핵심은 기능을 나누는 것보다 경계와 소유권을 명확히 나누는 것이다.
데이터베이스를 어떻게 나눌 것인가
마이크로서비스에서 가장 자주 부딪히는 문제는 데이터 분리다.
- 서비스마다 DB를 따로 가지면 결합도는 낮아진다.
- 하지만 조인, 트랜잭션, 일관성 처리가 어려워진다.
- 반대로 공유 DB를 쓰면 서비스 경계가 무너지기 쉽다.
실무에서는 다음 질문이 중요하다.
- 이 데이터의 진짜 소유 서비스는 어디인가
- 다른 서비스는 조회만 필요한가, 직접 수정도 필요한가
- 동기 호출이 필요한가, 이벤트 전파로 충분한가
마이크로서비스의 어려움은 대부분 여기서 시작된다.
장점보다 먼저 봐야 할 비용
마이크로서비스는 기술적으로 세련돼 보이지만 운영 비용이 크다.
- 배포 파이프라인이 여러 개로 늘어난다.
- 로컬 개발과 테스트가 어려워진다.
- 장애 원인 추적이 네트워크 구간까지 넓어진다.
- 데이터 정합성을 코드와 이벤트 설계로 보완해야 한다.
그래서 서비스 분해는 “코드를 나누고 싶다”가 아니라 “팀 구조와 변경 빈도, 확장 패턴이 정말 다르다”일 때 설득력이 있다.
언제 적합한가
다음 조건이 많을수록 마이크로서비스가 맞을 가능성이 높다.
- 기능별 팀이 이미 분리돼 있다.
- 서비스별 트래픽 패턴이 많이 다르다.
- 배포 주기와 장애 허용 범위가 서로 다르다.
- 특정 기능만 독립적으로 빠르게 진화해야 한다.
반대로 작은 팀, 단일 제품, 강한 데이터 결합 구조라면 모놀리식이 더 좋은 선택일 수 있다.
정리
마이크로서비스 아키텍처의 핵심은 “작게 나눈다”가 아니라 경계를 잘 나누고, 그 경계를 운영 가능한 수준으로 유지하는 것이다. 서비스 분해 자체보다 데이터 소유권, 호출 방식, 장애 격리, 운영 도구가 더 중요하다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
댓글
아직 댓글이 없습니다