[01] 모바일 개발자의 Scalability와 앱 아키텍처
수많은 트래픽이 발생하는 서비스는 많은 유저가 서버에 접속하기 때문에 병목이 서버에서 생기고 이는 사실상 백엔드 개발자의 몫이다.
앱의 병목은 사용자가 아니라 앱 개발자로부터 만들어진다.
서비스가 살아남는한 앱의 기능이 줄어들고 규모가 작아지는 경우는 절대 없다.
사업이 커지고 서비스가 발전함에 따라 확장성이 높은 아키텍처를 만드는게 모바일 개발자의 몫이다.
확장 가능한 앱 아키텍처의 특징
명확한 역할 구분이 가능한 앱
- 객체 모듈은 하나의 역할만 수행해야한다.
- 데이터의 흐름을 쉽게 따라갈 수 있어야한다.
- 영향 범위가 잘 보여서 사이드이펙트를 통제할 수 있어야한다.
- 각 객체의 경계선이 명확해야 프로젝트가 커져도 유지보수의 어려움이 기하급수적으로 늘어나는 것을 막을 수 있다.
변화에 유연한 앱
- 기획이 바뀌거나, 외부 프레임워크가 지원 중단 되거나 혹은 사용하던 로컬 DB를 바꾸고 싶을 때가 있을텐데 이럴 경우 의존성이 Decoupling 되어 있어야 유연한 대체가 가능하다.
- 과도한 추상화나 오버엔지니어링은 오히려 유지보수 비용을 증가시킨다. 구조가 단순해야 유연하다.
테스트가 용이한 앱
- 코드 추가 속도가 빨라질 수록 자동화 테스트는 필수이다. 코드 품질을 일관되게 유지하기 어려워진다.
- 품질관리를 위한 테스트 관리 단계가 배포에 심각한 병목이 될 수 있다.
- 유닛테스트가 어렵다면 앱 구조 개선이 필요하다는 신호이다.
코드 레벨 아키텍처. 재사용 가능한 코드를 만드는 스킬