🍎 iOS/📱 iOS

    BDD로 테스트하기(feat. Quick)

    도입 계기 아래와 같은 이유를 통해서 BDD(Behavior-Driven Development)를 도입하기로 결정하였다. 명확한 요구 사항 이해: 개발과 기획에서 모두가 이해하기 쉬운 플로우로 요구사항을 명확히 할 수 있다. 이를 통해 높은 수준의 통일성과 명확성을 유지할 수 있다. 문서화와 테스팅의 통합: BDD는 자연어 스타일의 표현을 사용하여 테스트 케이스를 작성한다. 테스트 케이스는 동시에 문서 역할도 하므로, 코드의 기능이 어떻게 동작해야 하는지 명확하게 알려주는 동시에, 추후에 변경이나 확장이 이루어질 때 문서의 역할도 할 수 있다. 코드 품질 향상: BDD는 TDD(Test-Driven Development)의 원칙을 기반으로 하기 때문에, 테스팅이 중요한 부분을 차지한다. 따라서 코드 품질..

    Custom Network Module에서 토큰 관리하기(RequestInterceptor)

    공간감 앱을 만들면서 네트워크 모듈을 만들어서 사용할지, Alamofire나 Moya를 사용할 지에 대해서 팀원들과 토의를 했습니다. 이전에 네트워크 모듈을 직접 만들어서 사용한 경험이 있어서 써드파티의 필요성을 잘 느끼지 못했습니다. 다만 이번 서비스에서 jwt로 인증을 구현하여서 토큰 관리에 대한 필요성이 생겼습니다. Alamofire에서는 토큰 관리를 어떻게 하는지에 대해서 알아보았고, RequestInterceptor를 사용한다는 것을 알게 되었습니다. RequestInterceptor는 말 그대로 Request를 중도에 빼았는 아이인데요, /// request를 보내기 전 처리를 해주는 메소드 func adapt(_ urlRequest: URLRequest, for session: Alamofi..

    Queenfisher 이미지 캐시 개선기

    Trinap 앱을 만들며 우리 팀이 생각한 도전들 중 하나는 라이브러리 만들어서 써보기였습니다. 그중 Kingfisher를 Queenfisher(ㅋㅋ)라는 이름으로 만들어서 사용했는데요, 이 Queenfisher를 개선한 경험을 남겨보도록 하겠습니다. 이전에 적용된 이미지 캐시 로직과 정책 memoryCache와 diskCache 중 하나를 선택해서 사용을 할 수 있도록 해두었습니다. 캐싱 정책에 대해서 고민하지 않고 무제한으로 캐싱하도록 했습니다. 문제는? memoryCache와 diskCache 중 하나만 사용을 하면서 캐싱의 효율을 극대화할 수 없었습니다. memoryCache의 리밋이 없어서 imageData들을 모두 NSCache에 넣게 되었고, 이미지가 많이 로드되고 나서 지워지지 않고 계속 ..

    MVVM-C + Clean Architecture 도입기

    MVC의 문제점 iOS 개발을 하시는 분들은 아마 MVC를 가장 먼저 사용해볼 것입니다. apple이 설명하는 Cocoa MVC는 위의 그림과 같습니다. Controller가 View의 life cycle, 비즈니스 로직, 화면 전환 로직 등 대부분의 기능을 하게 됩니다. 간단한 로직이 들어간 뷰에서는 별 문제가 없고 오히려 빠르게 구현할 수 있어서 괜찮지만, 뷰와 비즈니스 로직이 복잡해질수록 뷰, 비즈니스 로직, 화면 전환 로직 등이 얽혀 이해하기 쉽지 않아지는 경험을 했습니다. 또한 View와 Controller의 결합도(Coupling)이 높아서 Controller만 독립적으로 테스트를 하기에도 무리가 생깁니다. ViewController가 20개가 넘어가는 Trinap을 개발을 진행하면서 View..