[Architecture] Intro
Intro
모바일 개발자의 scalability 와 앱 아키텍쳐
서버개발의 병목
- 수많은 사용자가 서버에 요청을 보내 병목을 방생시킴
앱개발에서의 병목
- 앱개발은 사용자가 1명이든 1000만명이든 개발자가 작성한 코드들이 바이너리 형태로 사용자의 기기에 다운로드 되어 실행되므로 사용자가 병목을 일으키는 현상은 없음
- 앱이 확장되고 개발자가 많아짐에 따라 병목이 발생함
- merge request를 보내고 하루가 지나면 메인브랜치에 커밋이 수백개가 쌓일수 있음
Scale과 연관된 다양한 문제들
개발자가 겪는 문제
- 빌드 시간 증가
- 코드 충돌 증가
- QA, 디버깅 시간 증가
- 끊이지 않는 회귀 버그
- 개발소요 시간 증가
사용자가 겪는 문제
- 앱 Start up 시간 증가
- 과도한 자원 사용(배터리, 네트워크)
- 앱 용량 증가
- 버그 증가
- 앱 안정성 하락
앱 → 슈퍼앱
앱이 커지면 커질수록, 개발자가 많아지면 많아질수록 확장성이 좋은 아키텍쳐의 중요성이 커진다
확장 가능한 앱 아키텍처의 특징
- 명확한 역할 구분
- 객체 / 모듈은 하나의 역할만 수행하며, 데이터의 흐름을 쉽게 따라갈 수 있다
- 변화에 유연
- 의존성은 decoupling되어있고, 구조가 단순하기 때문에 유연하다
- 과도한 추상화나 over-engeneering은 피해야한다
- 테스트가 용이
- 유닛 테스트가 어렵다면 구조개선이 필요하다는 신호이며, 테스트는 품질 관리에 유용하다
코드 레벨 아키텍처
- 로직을 분산시키고 객체를 조립해 재사용 가능한 코드를 만드는 방법
모듈 아키텍처
- 유지보수를 고려한 코드 구조, 여러 개발자가 동시에 효율적으로 일할 수 있는 방법
자동화된 테스트
- 유닛테스트, 스냅샷 테스트, 통합 테스트, E2E 테스트