소프트웨어 마에스트로 연수생으로 참여하여 활동 중입니다. 저희 팀은 노인 요양업에 종사하시는 분들을 위한 채용 플랫폼을 모바일 애플리케이션으로 만들고 있습니다. 저는 해당 팀에서 iOS 애플리케이션 개발자로 역할을 수행하고 있습니다. 해당 프로젝트는 구직자와 구인자가 하나의 애플리케이션을 사용합니다. 사용자 타입에 따라 각기 다른 서비스를 제공해야 했습니다. 따라서 사용자별로 혹은 기능별로 모듈을 구성할 필요가 있었습니다. 하지만 정적/동적 라이브러리/프레임워크 타입을 가지는 모듈들을 임베딩 여부에 따라 의존 방식을 직접 설정하는 것은 모듈들의 링킹 실패를 유발하기 쉬웠습니다. 그리고 프로젝트의 모듈들의 의존 구조를 가시적으로 파악하기 어려웠습니다. 이러한 문제를 극복하고자 Tuist 툴을 사용하여 프로젝트의 모듈 관리 시스템을 구축했습니다. Tuist를 사용하여 임베딩 여부 대한 판단 없이 모듈 간 의존성을 설정할 수 있었습니다. 그리고 'tuist graph'와 같은 명령어를 통해 전체적인 모듈 구조를 가시적으로 파악할 수 있어, 새로운 모듈을 추가할 때 어떤 모듈을 의존해야 하는지 빠르게 판단할 수 있었습니다. 모듈화를 통해 개발 중인 기능만을 빌드 할 수 있어 빌드 시간을 단축할 수 있었고, 특정 모듈에만 집중하여 개발할 수 있었습니다. 결과적으로 프로젝트 개발 속도를 향상할 수 있었습니다.
재사용 가능한 UI 개발을 전담하였습니다. 앞서 언급한 프로젝트는 두 타입의 유저가 같은 UI를 공유하지만 처리해야 하는 로직은 다른 경우가 많았습니다. UI를 최대한 비즈니스 로직에서 분리할 필요가 있었습니다. 따라서 MVVM 아키텍처를 프로젝트에 도입하였습니다. UI로부터 전달받은 액션을 비즈니스 로직을 소유하고 있는 ViewModel이 처리하도록 구현하였습니다. 그리고 프로토콜로 추상화된 ViewModel을 UI에 주입함으로써 ViewModel만 변경해가며 UI를 재사용할 수 있었습니다.
여러 ViewModel들이 서로 공통적으로 사용하는 비즈니스 로직이 존재하였습니다. 해당 비즈니스 로직을 각각의 ViewModel이 독립적으로 보유하니, 시스템을 일관성 있게 관리하기 어려웠습니다. 따라서 공통적으로 사용할 수 있는 비즈니스 로직을 보유한 객체를 의존성 주입을 통해 필요한 공간에 공급하는 시스템을 구축했습니다. 기능 단위로 객체를 공급하기 위해 객체가 수행해야 할 역할 및 책임을 명확하게 구분 지을 필요가 있었습니다. 이를 위해 프로젝트에 클린 아키텍처를 도입하였습니다. 특정 기능을 보유한 객체의 프로토콜 타입에 동일한 구체 타입을 주입함으로써 일관성 있는 프로그래밍이 가능했습니다. 프로젝트의 후반부에는 프로토콜화된 객체들을 조합하여 빠르게 새로운 기능을 만들어낼 수 있었습니다. 결과적으로 중복 코드를 방지하고 비즈니스로 직을 일관되게 관리함으로써 개발 속도를 크게 향상하였습니다.