[01] 모바일 개발자의 Scalability와 앱 아키텍처

Untitled

수많은 트래픽이 발생하는 서비스는 많은 유저가 서버에 접속하기 때문에 병목이 서버에서 생기고 이는 사실상 백엔드 개발자의 몫이다.

앱의 병목은 사용자가 아니라 앱 개발자로부터 만들어진다.

서비스가 살아남는한 앱의 기능이 줄어들고 규모가 작아지는 경우는 절대 없다.

사업이 커지고 서비스가 발전함에 따라 확장성이 높은 아키텍처를 만드는게 모바일 개발자의 몫이다.

확장 가능한 앱 아키텍처의 특징

명확한 역할 구분이 가능한 앱

  1. 객체 모듈은 하나의 역할만 수행해야한다.
  2. 데이터의 흐름을 쉽게 따라갈 수 있어야한다.
  3. 영향 범위가 잘 보여서 사이드이펙트를 통제할 수 있어야한다.
  4. 각 객체의 경계선이 명확해야 프로젝트가 커져도 유지보수의 어려움이 기하급수적으로 늘어나는 것을 막을 수 있다.

변화에 유연한 앱

  1. 기획이 바뀌거나, 외부 프레임워크가 지원 중단 되거나 혹은 사용하던 로컬 DB를 바꾸고 싶을 때가 있을텐데 이럴 경우 의존성이 Decoupling 되어 있어야 유연한 대체가 가능하다.
  2. 과도한 추상화나 오버엔지니어링은 오히려 유지보수 비용을 증가시킨다. 구조가 단순해야 유연하다.

테스트가 용이한 앱

  1. 코드 추가 속도가 빨라질 수록 자동화 테스트는 필수이다. 코드 품질을 일관되게 유지하기 어려워진다.
  2. 품질관리를 위한 테스트 관리 단계가 배포에 심각한 병목이 될 수 있다.
  3. 유닛테스트가 어렵다면 앱 구조 개선이 필요하다는 신호이다.

코드 레벨 아키텍처. 재사용 가능한 코드를 만드는 스킬