Flutter meetup 참석 후기
2019년 09월 05일

  • 일시 / 장소
    • 구글캠퍼스 / 2019년 9월 4일 18시 30분 ~ 20시 40분
  • 참석자
    • 김종범, 최우석
  • Flutter overview
    • 전반적인 플러터 소개
    • flutter for web 소개
      • dart2js를 통해 dart를 js로 컴파일한다.
    • 기본 예제 데모 시연
    • FFI ( Foreign Function Interfaces )
      • 직접 네이티브를 핸들링
        • dart 아래단 코드에도 접근해서 커스터마이징이 가능하다는 정도로 이해했다.
  • 지식in 앱 Flutter 개발기
    • Apollo라는 네이버 사내 벤처(라고 하기에는 조금 큰) 팀에서 도입을 시도함
    • 크로스플랫폼을 사용한 이유
      • 개발자 수가 부족해서 그런건 아니다.
      • 조직 자체가 실험적인 도전을 많이 하는 조직이며 "고퀄리티"의 앱을 "빠르게" 만들어 시장에 내놓는다(?) 가 지향점이다.
      • 즉 일정이 매우 빠듯하다. 그리고 심지어 만들어도 시장에 못 내는 경우도 많다.
      • 프로젝트에 사람이 많아지면 프로세스 당 커뮤니케이션 비용이 배로 증가한다. ( Android / iOS )
    • 그러면 왜 Flutter?
      • React Native
        • 특징 정리
          • 자바스크립트, 웹개발, 복잡한 사용법, 컴포넌트구조
        • 웹 개발자 한테는 친숙할 수 있다만 ...
      • Flutter
        • 특징 정리
          • Dart, 크로스플랫폼, 간단한사용법, 위젯구조
        • 일단 기존 앱 개발자, 특히 Android 개발자 러닝커브가 적다.
    • 어떻게 개발하셨나요?
      • 레퍼런스 없는 삶의 연속
        • "Bloc 쓸까? 하다보니 파일갯수가 늘어나고 이런이런 것까지 Bloc으로해야되나? 이게맞나? 검색해도 아무것도 안나오네"
        • "공식문서를 보다보면 React 컴포넌트 처럼 위젯분리를 했던거 같은데 그렇게 구현해볼까.. 해봤는데 flutter는 절대 React스럽게 할 수 없네"
      • 플러그인 이슈
        • 대부분이 1.x가 아닌 0.x라 의도대로 동작하지 않는 경우도 종종있음
          • 개발 안정성과 직결됨, 어느날 출근해보니 API가 바뀌어있음, 빌드는 Fail
      • 일단 최선의 길을 가보자
        • 해보고 부수고 다시 해보고 부수고의 반복 ...
    • 간단한 수준의 샘플 앱
      • 간단한 수준의 샘플 앱을 만들어보자
        • 점검사항
          • API 네트워킹 + List 출력 + 엔드
          • 언어 및 개발환경 점검
            • 다트 언어는 괜찮은 언어인가? "생각보다는" 꽤 괜찮다. 배우지 말아야할 언어 1위 치고는 ...
          • UI 구현 방식 점검
            • 선언형 UI, 편하게 개발했다.
      • 사내에서 빠르게 만들던 신규 앱을 플러터로 만들어보자
        • 커스텀 UI에 대한 Needs가 많았던 제품
        • debug 모드에서도 대부분의 애니메이션이 정상적으로 동작
        • 네이티브로 구현 시 고생했을 애니메이션 부분을 3주만에 만듬, 대부분이 60프레임으로 동작
      • 실전, 지식in 앱을 구현
        • 지식인 안드로이드 앱을 개편해보자
          • 자체적인 웹뷰 지원이 미흡함
          • 다른 Native View와 연동되면 고통받기 좋다.. (하지만 사용은 가능함)
        • Native + Flutter
          • 네이티브 U와 Flutter UI를 적절히 조합할 수 있다.
          • 기존의 산재해 있는 레거시, 다른 조직에서 만든 것들과 연계하는 등 100% 컨트롤 할 수 없었기에 어쩔수 없이 섞어서 구현했다.
          • 성능이 중요한 부분은 Native, 나머지를 Flutter로 나눠 구현했다.
        • 우리에겐 어땠는가? 고려한 것들
          • 초기 학습 비용
          • 커뮤니티 활성도
          • 디버거
          • UI 개발
          • 안정성
          • 가독성 ( ui 구조가 깊어질수록 떨어진다. 살짝 아쉬움 )
        • 성능
        • 앱 사이즈
        • 재미
      • 만족도는 어땠는가?
        • 개발자 만족도가 높다.
          • ui 구현하는 형태도 재미있고 .. state 관리하는 것도 재미있다.
        • 선구자로서 자부심 생김
          • 레퍼런스가 없어서 사막 위를 달리는 기분이긴 함
          • 새로운 발견을 했구나 등 만족을 하면서 개발했음
    • Tips
      • "안드로이드 스튜디오 사용하는 것이 편합니다."
      • "아직 안될 거 같으면 빠르게 Native로 구현하세요."
      • "StackOverflow 보단 공식 문서가 좋습니다."
      • 'Flutter 공식 레포에 숨어있는 정보가 참 많습니다."
      • "Widget 카탈로그를 주기적으로 보세요. 어떻게 할지 고민하던게 단숨에 해결될 수도 있습니다."
    • 도입 여부는?
      • 극한의 네이티브를 요구할 때는 NO! 콘텐츠 뷰잉 목적으로는 GOOOOOOD!
      • 프로젝트 환경 및 인원에 따라 달라진다.
      • 프로토타입 중심의 빠른 검증이 필요하면 매우 좋음
      • 모바일 웹도 고려하는가에 따라서 달라짐
        • 이럴 경우 React Native가 나을수도 있다.
      • ios 개발자보단 android 개발자가 적응하기 좋음
      • 재미, UI개발, 생산성
    • 여담
      • 베스트 프랙티스 질문 많이 들어올듯 한데...
      • 한국에서 벌써 flutter로 런칭까지 한 사례가 드문드문 있다고는 하는데, 우리가 제대로 된 성공 사례가 됬으면 좋곘다.
      • 현재 스토어에 올라간 버전은 네이티브이고 조만간 런칭할 예정이라고 한다. 자세한 일정은 사내 보안 상 알려줄 수 없다고 한다.
  • Q & A ( 네이버 개발자 1명, 구글 플러터 팀원 2명 )
    • 네이티브 대비 개발이 어려웠거나 불가능했던 것들이 있었는가?
      • 스마트 에디터 같은 경우 sdk를 통해 구현하게 됬는데, 포맷팅, 컴포넌트 등을 완벽히 구현하기는 불가능이다. 다른 조직에서 구현한 것이기도 하고.. 결국 네이티브를 사용함
    • 총 개발기간? 인원이 궁금하다. 디자인은 디자이너가 가이드 해주는건지 UI개발자가 한건지도 궁금하다.
      • 디자인은 디자이너가 함. 6 - 8명(팀 내 사정상 유동적임), 기간은 3개월 정도, 기존 앱 과 사용성 비슷하게까지 구현하는데 성공함
    • 결국 네이티브를 쓰게 되는데 플러터 입문자 기준으로 어느 선까지 네이티브를 공부하면 좋을지?
      • 몰라도 기본적인 부분은 구현하기에 충분하지만 결국 플러그인 쓸줄 알아야함, 네이티브와 통신할 줄 알아야함
    • TextField에서 cjk언어 같은 IME 방식으로 조합되는 언어에서 안드로이드 삼성 천지인 키보드로 입력시 글자가 반복되서 입력되는 버그가 다음 버전에는 고쳐지는가?
      • 우리는 큰 개발 베이스가 있다. 오픈소스니까 이슈 넣으면 언젠가는 해결됨
    • 기존 안드로이드, 아이폰 빌드/배포 시와 비교했을때 특별히 다른점이 있는가?
      • 없다.
    • 유용한 툴, 개발도구
      • 안드로이드 스튜디오 쓰세요.
    • 모바일 말고 OS Application에 대해 로드맵이 있는가?
      • 있다. 맥/윈도우/리눅스 등도 지원 예정
    • Flutter를 사용하기 위해 Dart를 어느정도 기간 동안 학습?
      • 같은 팀 개발자(안드로이드 5년) : 코틀린 쓰다가 넘어갔는데 공식 문서가면 마이그레이션 가이드 등 잘 되있어서 1:1맵핑해서 사용 가능
      • 본인 같은 경우 추가 공부 기간 없이 바로진행 함, 따로 학습하면 좋긴한데 바로 시도해도 무리 없다.
    • 웹도 핫리로드를 지원할 예정인가요?
      • 그렇다.
    • 웹의 경우 위젯을 렌더링 하는 방식이 궁금합니다. 만약 Canvas로 다 그린다면 검색엔진에 노출되기 위한 Dom Tree구조는 어떻게 되는가?
      • 우리도 SEO를 고려하고 있다. 절대 플래시처럼은 되지 않게 할거고 true web을 만들거다. 나중에 보면 알게 될거다.
    • 웹 같은 경우 다양한 브라우저에서 전부 테스트 중인지? 현재 사용가능한 수준인지?
      • 그렇다. 현재 99% 정도 됬다.
    • 텍스트 드래그 이슈는 손쉽게 해결이 되는지?
      • 정확히 어떤 점이 이슈인지 모르겠다. 이슈에 등록하면 해결해 주겠다.
    • 만약 안드로이드만, ios만 개발한다고 할때 플러터가 가지는 장, 단점이 있는가?
      • 이럴 경우 특정 플랫폼만 구현하는게 나을듯
      • 어쨌든 Flutter로 해도 생산성은 나쁘지 않다, 핫리로드 기능 같은게 별거 아닌거 같아도 좋음
        • (여담) xcode 안써서 좋다.
  • 후기
    • 공간에 비해 참가 인원이 많아 추가 여석까지 만들었다고 한다. 커뮤니티 등에도 언급이 느는 것을 보아 Flutter에 대한 관심이 꾸준히 증가하고 있다는 것을 반증하는 것으로 보인다.
    • 네이티브 통신, 플러그인 관리, 플랫폼 개별 처리 이슈 등은 Flutter가 아닌 크로스플랫폼 자체의 이슈이므로 결국 어쩔수 없는듯 하다.
    • 데이터 관리 방법에 대해선 당연히 언급할 줄 알았는데 안했다. 발표자도 분명히 베스트 프랙티스 관련해서 질문나올 것 같다는 식으로 얘기했는데 질문도 없었다.
    • 기존 레드데이즈 앱 같은 경우 일정 때문에 애니메이션 부분은 신경쓰지 못했는데 Flutter에서 잘 처리해준다고 하니 여유 있으면 적극적으로 도입해보면 좋을 것 같다.
    • 팀 내 개발자들이 안드로이드 진영에서 넘어온 케이스가 많아서 그런지 vscode보다 안드로이드 스튜디오를 선호하는 듯 보였다.