image 안녕하세요. 셀메이트 포스팀 장지은입니다.
이번 포스팅은 2026년도 상반기 셀메이트 개발자 컨퍼런스에서 연사한 내용입니다.
Flutter로 포스 모바일 프로젝트를 운영하면서 생각하고 있었던 내용을 공유드릴려고 합니다.

image

image 이번 연사는 단순히 포스팀, 모바일 직무자들에 국한된 이야기가 아닌,
모든 분들이 겪고 있는, 또는 겪을 수 있는 이야기입니다.

image 포스팀이 어떠한 일을 하고 있는지 잘 모르는 분들이 많으셨습니다.
우리가 만들고 있는 포스는 오프라인 매장에서 매출을 일으킬 수 있는 수단입니다.
고객 주문을 결제하고, 주문 내역을 관리 및 오프라인 매장을 관리할 수 있는 시스템입니다.

따라서 조금의 실수는 금전적 손실을 유발할 수 있어 굉장히 예민하고 안전해야하는 성격을 가집니다.
또한 매장에서 사용하는 디바이스, 주변 기기 등 환경이 다를 수 있으며, 이러한 제약을 코드로 극복해야합니다.

image

image 특히 “결제” 행위는 포스에서 매우 중요한 비즈니스이며,
장애 발생 시 혼돈의 카오스로 입장할 수 있습니다.

image 우리가 서비스를 운영하기 위해서는 여러 제약 조건이 존재합니다.
다만 여러 마리의 토끼를 완전히 잡을 수 없으니 환경에 따른 적절한 개발 환경이 필요합니다.

image 따라서 우리는 Cross-Platform인 Flutter로 모바일 앱 및 윈도우 프로그램을 개발하고 있습니다.

image 우리는 크로스 플랫폼의 대한 여러 환상을 가지고 있지만, 현실은 그렇지 않았습니다.

image 플랫폼별 이슈는 다양하고, 이에 대응할 수 있도록 모든 네이티브 코드를 학습해야합니다.

image 특히 포스에서 필수적인 하드웨어 연동은 디바이스 제조사 및 모델마다 플랫폼별로 각각 구현한다고 해도 과언이 아닙니다.

image 따라서 Platform Channel로 네이티브와 연결하는 작업은 “필수"입니다.

image 실제 포스 모바일앱의 네이티브 코드는 10%정도이며, 각 플랫폼마다 개발, 테스트도 진행하기 때문에 체감은 훨씬 큽니다.

image

image 포스에서는 비즈니스가 복잡한 만큼 상태 관리가 굉장히 중요합니다.

image 포스 모바일은 현재 Bloc 패턴으로 상태 관리를 하고 있으며, 복잡한 상태를 구조화 및 재사용성에 이점이 있습니다.

image image image image image image 시스템을 운영하고 개발한다는 것은 단순히 코드로 결과물을 만들어 내는 것이 아니라, 코드의 책임을 지는 것 입니다.

image image image image

크로스 플랫폼은 “만능"이 아닙니다. 내가 사용하고 있는 프레임워크가 어떠한 장/단점이 있는지, 어떻게 설계해야 안정성 있게 시스템을 운영할 수 있는지 충분히 고려해야합니다.

또한 개발자는 내가 생산해야 하는 코드의 설계자입니다. 실패 시나리오를 생각하며 어떻게 디버깅할 수 있는지, 고객에게 어떠한 대안을 줄 수 있는지 생각해야 합니다. 이러한 노력은 개인과 프로젝트가 더 발전할 수 있는 기회로 돌아올 것이라 생각합니다.

여기까지 제가 준비한 내용입니다. 끝까지 봐주셔서 감사합니다!