이 글은 플러터플로우로 앱을 만드는데 필요한 개발 관련 기본적인 이해를 돕기 위해 작성합니다. flutter, flutterflow, firebase, supabase, SQL과 NoSQL의 차이점을 다룹니다.

 

 

Flutter (플러터)

Flutter는 Google에서 만든 오픈 소스 모바일 애플리케이션 개발 프레임워크입니다. 플러터의 탄생은, 기존 앱 개발의 비효율성에서 시작됩니다. iOS, 안드로이드, 웹 등 서로 다른 환경에 대해 모두 따로 개발을 해야했거든요. 각 운영체제별로 개발자를 고용해야하고, 게다가 각 환경에서 일관성있는 사용자 경험을 제공하기 힘들기 때문입니다. 하나의 코드베이스로 다양한 환경에서 돌아가게 하는 바람, 이른바 크로스 플랫폼 개발 트렌드가 등장하게 됩니다. 그 중심에는 Flutter, React Native 등이 있구요. 둘의 차이점을 자세히 다루지 않겠지만 장단점이 존재하고, 둘 중 하나가 절대적인 우위를 점하고 있지는 않습니다. 

 

 

 


FlutterFlow (플러터플로우)

플러터는 Dart라는 (생소한) 언어로 코드를 작성해야합니다. Flutterflow는 코딩 없이 Flutter 앱을 만들 수 있게 지원하는 노코드 툴입니다. 플러터 코드로 export할 수도 있고, 깃허브와 연동할 수도 있다는 측면에서 아주 많이 알려지진 않았지만 유망하고 앞으로 더 각광받을 노코드 툴이라고 생각해요. UI와 데이터베이스 등을 모두 드래그 앤 드롭으로 간단하게 편집할 수 있고, 템플릿과 작업 중 실시간 디버깅 툴이 특별한 장점입니다. 노코드 툴이면 모두 드래그 앤 드롭 개발을 강조하는데, 그래서 하고 많은 노코드 중에서 왜 플러터플로우냐면 사실 그 특별함은 플러터 베이스에서 나온다고 생각합니다. 또 특별한 점은 Flutterflow가 Firestore와 Supabase를 정식으로 통합 지원하고 있다는 점이 있습니다.

 

 

 


Firestore (NoSQL), Supabase (SQL)

FlutterFlow에서는 데이터베이스를 플랫폼 안에서 확인하고, 수정하거나 사용할 수 있게 지원합니다. 사용 방법은 영상 튜토리얼을 따라하면 누구나 쉽게 할 수 있어 자세히 다루지 않겠습니다. 대신 노코드 툴임에도 NoSQL 데이터베이스 옵션과 SQL 데이터베이스 옵션을 선택해서 사용할 수 있다는 것을 이해하는 것이 좋습니다.

 

Flutterflow를 가장 쉽게 사용하는 방법이자, 과거에는 유일한 옵션이었던 것은 Firebase입니다. 일단 Flutter, Firebase가 모두 구글 소유의 것이다보니, 지금도 두 개의 조합은 아주 매끄럽고 참고할 정보도 많습니다. Firebase는 서버리스 솔루션입니다. 서버리스는 서버가 없는 것이 아니라, 개발자가 서버를 신경쓰지 않고 서비스를 개발할 수 있게 한다는 뜻입니다. 예컨데 아직 이용자가 많지도 않은데 24시간 켜두고 신경써야하는 컴퓨터를 구비해야하고, 혹여 트래픽이 갑자기 늘어서 서버를 증설해야할 수 있고, 인증 같은 것을 매번 구현하는 것도 귀찮은 그런 것들을 해소해주는 솔루션입니다. Firebase를 사용하면 24시간 컴퓨터를 빌리기보다 사용자의 이용 시간에 따라 비용을 지출하고, 트래픽이 늘어도 알아서 대응해주고, Fireauth 등 로그인에 필요한 인증 기능을 제공합니다. 여기서 제공하는 NoSQL 데이터베이스가 Firestore이고, 플러터플로우에서 가장 쉽게 사용할 수 있는 데이터베이스이기도 합니다. SQL 데이터베이스 (관계형 데이터베이스)인 Supabase를 지원한 것은 오래되지 않았습니다.

 

장단점을 이해하고, 사용할 데이터베이스를 올바르게 선택해야합니다. NoSQL은 고정된 스키마(데이터베이스의 속성 정보 등)가 없고 언제든 수정할 수 있으며 같은 테이블 안에도 서로 다른 형태의 데이터를 담을 수 있습니다. 구현 중에 새로운 기능을 추가로 만들어야할 일이 많이 있다면 유연한 NoSQL이 작업하기에 편할 수 있습니다. 또한 분산 저장을 기반으로 하기 때문에, 서버리스에 적합할 수 있게 확장성에 대한 대비가 잘 된다는 장점이 있습니다. 단점으로는 유연한 구조로 인해 redunduncy가 쉽게 높아질 수 있고 이는 고스란히 개발자의 역량에 의존하게 되며, 분산 저장으로 인해 consistency가 약화되는 점도 일부 서비스에서는 치명적일 수 있습니다. SQL의 경우 redunduncy가 적고, ACID 트랜잭션으로 높은 수준의 consistency를 얻을 수 있습니다. 초기 구현 단계에서 NoSQL로 유연하게 작업하다가 SQL로 일부 migration하는 경우가 더러 존재하고, 반대로 SQL에서 비즈니스의 특성에 알맞은 NoSQL로 migration하는 케이스도 존재합니다.

 

 

 

 

 

flutterflow라는 노코드 툴 안에서 (하나의 통합된 환경에서) 플러터를 드래그앤 드롭 및 실시간 디버거와 함께 작업하고, SQL과 NoSQL을 선택해서 사용할 수 있으며, 코드를 다운로드받거나 github와 연동할 수 있습니다. 궁금한 점은 댓글 달아주시면 답변드리겠습니다. 감사합니다.

BELATED ARTICLES

more