Intro

모바일 개발자의 scalability 와 앱 아키텍쳐

서버개발의 병목

  • 수많은 사용자가 서버에 요청을 보내 병목을 방생시킴

앱개발에서의 병목

  • 앱개발은 사용자가 1명이든 1000만명이든 개발자가 작성한 코드들이 바이너리 형태로 사용자의 기기에 다운로드 되어 실행되므로 사용자가 병목을 일으키는 현상은 없음
  • 앱이 확장되고 개발자가 많아짐에 따라 병목이 발생함
  • merge request를 보내고 하루가 지나면 메인브랜치에 커밋이 수백개가 쌓일수 있음

Scale과 연관된 다양한 문제들

개발자가 겪는 문제

  • 빌드 시간 증가
  • 코드 충돌 증가
  • QA, 디버깅 시간 증가
  • 끊이지 않는 회귀 버그
  • 개발소요 시간 증가

사용자가 겪는 문제

  • 앱 Start up 시간 증가
  • 과도한 자원 사용(배터리, 네트워크)
  • 앱 용량 증가
  • 버그 증가
  • 앱 안정성 하락

앱 → 슈퍼앱

앱이 커지면 커질수록, 개발자가 많아지면 많아질수록 확장성이 좋은 아키텍쳐의 중요성이 커진다

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

  • 명확한 역할 구분
    • 객체 / 모듈은 하나의 역할만 수행하며, 데이터의 흐름을 쉽게 따라갈 수 있다
  • 변화에 유연
    • 의존성은 decoupling되어있고, 구조가 단순하기 때문에 유연하다
    • 과도한 추상화나 over-engeneering은 피해야한다
  • 테스트가 용이
    • 유닛 테스트가 어렵다면 구조개선이 필요하다는 신호이며, 테스트는 품질 관리에 유용하다

코드 레벨 아키텍처

  • 로직을 분산시키고 객체를 조립해 재사용 가능한 코드를 만드는 방법

모듈 아키텍처

  • 유지보수를 고려한 코드 구조, 여러 개발자가 동시에 효율적으로 일할 수 있는 방법

자동화된 테스트

  • 유닛테스트, 스냅샷 테스트, 통합 테스트, E2E 테스트

References

슈퍼앱 운영을 위한 확정성 높은 앱 아키텍처 구축