2012년에 구축된 TalentLMS는 DevOps 사일로, 모놀리식 개발팀, 방대한 레거시 코드, 문서 부족으로 인해 기능 추가 및 확장에 어려움을 겪었습니다. 🚧
인프라 현대화를 위해 스토리지를 애플리케이션에서 분리(S3 활용), 인프라를 코드로 관리(IaC), IP 주소를 DNS 레코드로 대체하여 유연성을 확보했습니다. ☁️
팀 구조 개선을 위해 초기 DDD 교육 후 Spotify 모델을 도입했으나, 이후 확장성을 고려하여 팀 토폴로지(Team Topologies) 모델로 전환하여 스트림 정렬 팀, 아키텍처 현대화 지원 팀(AMET), 이벤트 기반 아키텍처 팀 등으로 재편했습니다. 🗺️
레거시 코드 현대화는 기존 애플리케이션 위에 REST API와 ACL(Anticorruption Layer)을 구축하고, Docker, 정적 분석, 통합 테스트 등의 기반을 마련하여 점진적으로 진행되었습니다. 🛡️
복사-붙여넣기 코드와 불분명한 요구사항으로 인한 혼란을 해결하기 위해 REST API를 철저히 문서화하고 BDD(Behavior-Driven Development)를 도입하여 '진실의 원천'을 확립했습니다. 📜
배포 자동화를 위해 rsync 방식에서 벗어나 IaC를 통해 GitHub Actions로 오케스트레이션되는 임시(Ephemeral) 환경을 구축하고 AWS CodeDeploy를 활용했습니다. ⚙️
7만 개의 MySQL 5.7 데이터베이스를 MySQL 8.0으로 마이그레이션하는 대규모 프로젝트에서 AWS 관리형 서비스의 한계를 극복하고, Percona XtraBackup, 슬레이브, 바이너리 로그, DNS 레코드 전환을 통해 단 5초의 다운타임으로 성공했습니다. 🚀
지속적인 문서화 문화를 정착시키기 위해 PRD, ADR(Architecture Decision Records), C4 모델 등을 활용하여 의사결정 과정과 시스템 구조를 명확히 기록하고 공유했습니다. 💡
DDD 원칙을 심화 적용하여 사용자 클래스를 사용자 프로필, 사용자 설정 등 더 작은 도메인으로 분할하고, 폴더 구조를 도메인 중심으로 재편하여 코드의 응집도를 높였습니다. 🧩
모든 현대화 노력은 코드가 비즈니스를 제약하는 것이 아니라, 비즈니스가 코드를 주도하도록 하여 궁극적으로 비즈니스 가치를 창출하는 데 집중되었습니다. 📈
모놀리스의 비즈니스 로직 통합이라는 장점을 인정하고, PHP의 비동기 처리 한계를 NodeJS로 보완하는 등 기존 시스템의 강점을 활용하면서도 현대화를 진행하는 실용적인 접근 방식을 취했습니다. ❤️