결제 인프라 포트원이 10년 된 PHP 5 모노리스와 수동 관리 서버를 3년에 걸쳐 점진적으로 교체한 대규모 현대화 사례다. 레거시를 무조건 부정하지 않되 성장의 핵심 병목이 된 구조는 근본 개선한다는 원칙 아래, 서비스 분리부터 이벤트 소싱까지의 여정을 정리한다.
핵심 포인트- 런타임 오류·강한 결합·오래된 의존성으로 작은 변경도 전수 QA를 부르던 PHP 5·CakePHP·MySQL 모노리스와 재현 불가능한 스노우플레이크 서버를, 전면 재작성 대신 데이터 소유권 단위로 쪼개 AWS·Terraform·Kubernetes·Helm 기반 마이크로서비스로 단계 전환(서버 언어는 Kotlin 기본)
- 결제 실패가 빈번한 도메인에서 예외를 중앙 목록·주석으로 관리하던 방식을 버리고, 성공·실패를 Either 양쪽 타입으로 명시해 호출자가 모든 경우를 컴파일 타임에 처리하도록 강제, 도메인·저장소·외부 API를 계층 분리
- 내부 API는 구현 전 protobuf 스키마를 함께 리뷰하는 gRPC schema-first로 정하고 공용 저장소에서 서버·클라이언트 코드와 REST·SDK 문서를 자동 생성 — 새 서비스가 데이터 소유권을 인수하면 레거시가 DB 직접 접근 대신 서비스를 호출하도록 바꿔 호환성 유지
- 모든 결제 데이터를 참조하던 마지막 핵심 모듈은 Cassandra 기반 이벤트 소싱(추가 전용 기록·상태 재생성·샤드 관리)으로 재설계 — 3년 뒤 대규모 기능 출시가 4배 이상 늘고 2주 배포 주기와 높은 업타임 달성
왜 읽나오래된 모노리스를 무중단으로 마이크로서비스화하려는 팀에게 분리 기준·Kotlin 타입 안전·gRPC schema-first·이벤트 소싱을 아우르는 3년 치 실전 로드맵.