편의점에서 음료를 사거나, 라면을 살 때, 내지는 과자를 사고 싶을 때.
편의점 할인행사를 알고 싶지만, 일일이 편의점 사이트를 찾아 알아보기 귀찮을 때.
한 눈에 여러 편의점의 행사 정보를 확인할 수 있는 앱입니다.
코드를 각 기능에 맞게 분리하면서 효율성과 확장성을 높이고자 Swift Package로 모듈화를 진행했습니다.
실제 개발 과정에서 디자인 시스템의 컴포넌트를 확인하고자 새로운 App Target을 생성해야 하는 과정이 있었습니다. 모듈화가 되지 않았다면, 기존 코드를 복사하여 붙여넣는 작업을 반복해야 했을 것입니다. 하지만 모듈화된 아키텍처 덕분에 해당 모듈을 라이브러리로 참조하는 방식으로 손쉽게 구현할 수 있었습니다.
큰 프로젝트가 아니어서 별도의 아키텍처를 고려하지 않았고, 단순 View와 ViewModel을 활용하였습니다.
State
값을 Output으로 사용하고, trigger(_:)
로 Input을 전달하는 단방향 흐름으로 구성된 아키텍처라고 볼 수 있습니다.
특히 ViewModel을 protocol로 처리하여 View가 구체 타입을 알지 못하도록 하였고, 덕분에 DIP 원칙을 지킴과 동시에 테스트 용이성을 보장했습니다.
View, ViewModel 그리고 네트워킹을 다루는 Service를 통해 레이어를 분리했습니다.
덕분에 각 기능의 역할을 명확히 할 수 있었고, 버그 발생 시 관련 레이어에 집중함으로써 디버깅을 효율적으로 할 수 있었습니다.
특히 백엔드의 API가 구현되지 않을 경우를 대비하여 URLProtocol과 가상의 Mock JSON을 파싱해 뷰를 그릴 수 있도록 구현하였습니다.
🧑🏻💻홍승현 | 🧑🏻💻김응철 | 🧑🏻💻방현석 |
---|---|---|