왜 모바일 앱 개발에서도 아키텍처가 중요한가 ?
최근 수년간 스마트폰 하드웨어 사양의 급격한 향상과 다양한 모바일 비즈니스의 출현으로 인해 과거와는 비교하기 어려울 정도로 모바일 앱의 복잡도가 높아지게 되었다. 이로 인해 자연스럽게 다양한 아키텍처가 개발자들 사이에서 중요한 관심사로 등장했는데 잘 생각해보면 아무리 모바일 개발이 복잡하다 한들, 백엔드 서버 시스템에 비해 엄청난 코드량을 쓰지는 않는다. 그렇다면 왜 이렇게 다양한 아키텍처에 대한 요구가 생기게 된걸까?
모바일 실행환경의 성능 향상과 동시에 웹 프론트엔드도 Angular를 시작으로 소위 Single Page Application(전체 웹사이트가 자바스크립트 프레임워크를 이용해서 하나의 앱처럼 동작하는 구조)의 형태가 일반화 되며 서버에서 프리젠테이션 로직을 처리 할 필요가 없어지는 것이 현 추세이다. 단순한 데이터 저장 및 가공 정도 이상의 역할이 필요없는 경우도 많아서 서버를 직접 구현하지 않는 서버리스 형태로 백엔드를 구성하는 일도 많아졌다.
보통 MVC구조에서는 바람직하고 구조를 만들었다면 보통 Model 및 도메인 계층에서 대부분의 구현이 이뤄지게 된다. 그리고 뷰의 경우 외부에 보여줄 부분에 대해서 단순하게 정의를 해주고 컨트롤러는 양측의 가교역할을 하게 된다. 모델측은 마치 레고 블럭처럼 비즈니스 로직의 부품을 제공하고 컨트롤러는 입력을 받으면 새로운 구현은 거의 없이 이 블럭들을 조립하는 방식으로 로직을 구성한다. 그리고 적절한 뷰를 선택해서 결과물을 조합하면 대규모의 백엔드 시스템도 깔끔하게 만들 수 있게 해준다. 하지만 모바일 환경의 경우 애초에 플랫폼 자체에서 MVC자체를 명확하게 구분해주지를 않는다면 문제가 있다.
모바일 환경 자체의 특성에서 오는 문제 또한 있을 것이다. 자원의 한계, 라이프사이클 처리의 복잡함 등 많은 문제가 있을 수 있으나 가장 큰 문제가 되는 부분은 프리젠테이션 로직 자체의 복잡도에 있다고 생각한다. 모바일 앱은 뷰 상태가 매우 복잡하고 비동기 처리가 많은 특성이 있는데 일련의 순차적인 시간 흐름으로 뷰 로직을 처리하는 것이 불가능한 경우가 많기에 심플하게 코드를 짜는 것이 쉽지 않다. 어느 순간 코드를 짠 본인 조차도 특정 이벤트에 대한 반응이 어떻게 되어있는지 바로 알아보기 힘든 경우가 흔하게 생긴다.그래서 앞으로 클린 아키텍처를 중심으로 나날히 비대해져가는 모바일 앱 개발을 보다 행복하게 할 수 있는 방법들을 나눠보려한다.
이 글의 마지막에는 좋은 아키텍처를 만들기 위한 기초에 대해 나눠보겠다고 하고 뒤이어 포스팅이 있다. 아키텍처라는 말이 생소해서 알아보니 시스템이나 소프트웨어가 어떻게 구성되고 동작하는지에 대한 설계구조라고 하는데, 정말 말 그대로 예를 들어 집을 짓기 전에 설계도를 먼저 만든 뒤 집을 짓는 것처럼 무언가를 만들기 전 필요한 설계도 같은 것이다. 앱을 만들 때 어떠한 기능을 넣을 경우 이 기능들이 서로 어떤 방법으로 소통하는지, 어떤 데이터를 주고 받는지 등 미리 설계도를 그려놓는 것처럼 정해주는 과정이 반드시 필요하다고 한다. 확실히 앱을 만들기 전 정리를 해둔다면 변경도 쉽게 할 수 있고 효율적으로 개발도 가능할 것 같고, 협업을 한다면 그것 또한 원활하게 만들어두는 중요한 요소가 될 것이다. 크고 작은 프로젝트 상관 없이 아키텍처를 좋은 습관으로 만들어 두어야겠다.