"Frontend development is just showing json data in a pretty way"
"프론트엔드 개발은 단지 json 데이터를 예쁘게 보여주는 일이다"
유명한 개발자 유머입니다. 이 유머는 프론트엔드(모바일 앱)을 단지 백엔드에서 생산한 데이터의 뷰어(단말기) 정도로 격하시키는 거죠.
물론 현존하는 많은 서비스에서 위 유머를 반박하기 힘든 경우가 꽤 있을 겁니다. 백엔드는 비즈니스 로직과 데이터 처리/저장을 담당하고, 프론트엔드는 사용자의 입력을 백엔드에 전달하고 백엔드에서 처리된 데이터를 단순히 사용자에게 보여주는 거죠.
이런 단순한 설계로 인해, 백엔드는 복잡해지고, 백엔드 API 콜의 횟수가 늘어나며, 백엔드가 처리할 데이터 양이 증가함에 따라 서버 성능이 저하됩니다. 이는 곧 서비스 비용의 증가로 이어지게 되죠.
모바일 앱이 동작하는 환경이 예전 2G 폰 정도라면 위 구조를 바꾸기 힘들 수도 있습니다. 하지만 스마트폰의 컴퓨팅 파워가 나날이 증가하고 있는 요즘이라면, 위 구조에 대한 다음과 같은 근본적인 재검토가 필요할 수 있습니다.
1. 프론트엔드가 비즈니스 로직의 많은 부분을 처리할 수 있어야 합니다. 프론트엔드가 비즈니스 로직을 전처리하고 최종 결과만 백엔드에 전달하는 방식을 도입함으로써 백엔드의 부하를 최소화하는 것입니다.
2. 단순 조회성 데이터는 백엔드 API 콜을 통하지 않고 프론트엔드 내부에서 직접 쿼리해서 사용할 수 있어야 합니다. 이는 백엔드에서 관리하는 조회성 데이터베이스를 프론트엔드로 이동시킨다는 것을 의미합니다. 이를 통해 벡엔드 API 콜 횟수를 줄일 수 있습니다.
3. 다른 사용자들과 공유되지 않는 데이터는 프론트엔드 내부에서 관리할 수 있어야 합니다. 벡엔드는 사용자 데이터의 저장 스토리지만을 제공하는 방식으로 멀티 디바이스 호환을 유지하도록 합니다. 벡엔드는 사용자 데이터의 형식을 알 필요없이 단순한 파일 호스팅만을 담당하면 됩니다.
위의 3가지 목표를 달성하기 위해 프론트엔드에 필요한 것이 로컬 데이터베이스입니다. 이를 위한 적절한 데이터베이스가 sqlite입니다. 현재 sqlite는 안드로이드와 iOS에서 모두 사용할 수 있고, 웬만한 SQL 문은 높은 성능으로 처리할 수 있습니다.
컴퓨팅 자원의 활용을 백엔드에서 프론트엔드로 옮기게 될 때의 성능 상의 이점은 상당하다고 생각합니다. 요즘의 트렌드인 클라우드 컴퓨팅에서 에지 컴퓨팅으로의 이동과도 유사하다고 볼 수 있죠.
프론트엔드에 sqlite를 도입하여 간단한 방식의 처리부터 시작해본다면, 더욱 정교한 시스템 설계를 위한 감을 잡을 수 있을 것 같습니다.