LINE Pay의 iOS 개발을 맡고 있습니다.
시작하기 전에 안녕하세요. LINE Pay의 iOS 개발을 맡고 있는 정지인입니다. LINE Pay iOS의 결제 기능을 리팩토링하는 데에 적용했던 템플릿 메서드 패턴을 이용한 계약 기반 프로그래밍 기법에 대해 소개하려고 합니다. 템플릿 메서드 패턴을 이용하면 복잡한 상태의 아이템을 모순적인 상태에 빠뜨리는 일 없이 구현할 수 있습니다. 템플릿 메서드 패턴에 대해 간단하게 소개하고, 템플릿 메서드 패턴을 상태 관리에 어떻게 활용할 수 있는지 코드 레벨에서 살펴보겠습니다. iOS 개발자뿐만 아니라 복잡한 상태 처리 때문에 유지 보수에 어려움을 겪는 모든 개발자에게 도움이 되었으면 하는 바람입니다. 이 글에서는 템플릿 메서드 패턴을 소개하고, 리팩토링의 대상이 되는 결제 기능에 관해 설명한 뒤, 리팩토링 전과 후의 구현 방식을 각각 자세히 설명하는 순서로 진행하겠습니다. 템플릿 메서드 패턴이란? 템플릿 메서드 패턴은 객체지향
최근 몇 년 동안 LINE 앱의 iOS 소스 트리는 지속적으로 성장해 수백 개의 모듈로 늘어났습니다. iOS 버전의 소스 코드는 2019년 말 기준으로 140만 줄을 넘어섰으며, 이러한 증가세는 멈출 기미가 보이지 않습니다. 그 결과 LINE iOS 버전의 빌드 시간이 크게 증가했습니다. 또한 프로젝트의 규모가 커지면서 로컬 환경에서는 문제 없이 실행되는 빌드가 CI에서는 실행되지 않거나 혹은 그 반대의 경우가 발생하는 것과 같은 재현 불가능한 문제점도 늘어났습니다. 그래서 저희는 잠시 한 발자국 뒤로 물러나 빌드 성능을 개선하고 문제의 재현 가능성을 높일 수 있는 방법에 대해 고민해 보았습니다. 의존성 관리 개선 저희 팀에서는 2012년 말에 의존성 관리 도구인 CocoaPods를 도입했습니다. CocoaPods는 프로젝트를 클린 빌드할 때마다 모든 pod 라이브러리를 다시 빌드해야 하므로 많은 시간이 소요되는 단점이 있지만(