신입 개발자의 레거시 코드를 향한 관점 전환기
아키텍처
신입 개발자의 레거시 코드를 향한 관점 전환기
두줄요약
iOS 키보드의 메모리 제한과 뒤엉킨 레거시 구조를 개선한 기술부채 해결 과정을 다뤘습니다. MVVM, Combine, DIContainer 도입으로 메모리 사용량을 크게 줄이고 안정성을 높였습니다.
문제 상황
- iOS 커스텀 키보드의 약 80MB 메모리 제한으로 인한 기본 키보드 전환과 충돌 위험
- 여러 개발자의 코드와 서드파티 라이브러리로 뒤섞인 레거시 구조, 파악과 수정의 어려움
- 하나의 ViewController가 많은 기능의 View와 ViewModel을 한꺼번에 올리며 메모리 점유율이 높아지는 문제
원인 분석
- 아키텍처 부재와 기술 스택 미정립으로 코드 구조가 일관되지 않은 상태
- State 중심 설계에서 상태와 구독이 꼬이며 비동기 처리 안정성이 떨어지는 구조
- 사용하지 않는 기능까지 초기 로딩되는 인스턴스화 방식으로 인한 불필요한 메모리 사용
해결 방법
- 약 한 달 반 동안 기술부채 해결 기간을 두고 아키텍처 도입, 코드 구조 개선, 불필요한 라이브러리 제거 진행
- MVVM과 Combine 중심으로 데이터 바인딩을 통합하고 MainView/SubView 단위로 Stream을 분리
- DIContainer로 필요한 기능만 외부 주입하도록 바꿔 ViewController 의존성과 초기 메모리 사용량 감소
