티스토리 뷰

지금의 회사로 들어오고 나서 잠시 플러터 프로젝트에 투입이 되었었다. 네이티브 앱 개발 경험밖에 없던 나로서는 조금 당황스러웠다. Dart라는 언어와 플러터 프레임워크를 배워야함은 물론, 플러터로 경력을 쌓게 되었을 때의 불확실성 때문이었다. 당시에는 정말 고민이 많았다. 다시 구직을 해야되는 걸까 이런 고민을 포함해서 플러터를 하면 뭐가 좋을까에 대해서도 많이 고민하고 알아보았다. 결과적으로는 한 달 정도의 기간 동안 스터디와 간단한 기능 구현을 진행하다가 휴직중이었던 팀장님이 복직을 하시면서 네이티브 개발에 재배치가 되었다. 플러터에 대해 알아보면서 '이거 재미있겠는데?'라고 생각하게 된건 플러터로 만든 여러 앱들을 다운받아보면서였다. 그 때 느낀 인상은 아래와 같다.

 

1. 성능이 우수하다. (빠르다. 네이티브와 별 차이가 없다.)

2. 네이티브앱과 비교해 디자인이 새롭다.

3. 멋진 애니메이션을 적용한 앱이 많다.

 

플러터 공식 사이트에서 소개하고 있는 쇼케이스를 통해 서비스 중인 앱을 확인할 수 있다. 그리고 앱스토어에서 flutter로 검색하면 여러 개발자들이 만든 데모앱과 소스코드도 확인할 수 있었다.

 

플러터 프로젝트에 처음 투입이 되었을때 관심이 있던 다른 동료분과 플러터 스터디를 시작했다. Udemy의 강의를 같이 듣기 시작해서 지금도 계속 배워가고 있다. 플러터를 배우면서 의외로 상당히 재미있다고 생각했다. 우선 개발이 훨씬 쉽고 빠르다는 점 때문이었다. 그리고 뭐니뭐니해도 최대 장점은 크로스 플랫폼이라는 점. iOS와 안드로이드 개발을 동시해 진행할 수 있다. 물론 아직 한계도 많다. 그럼에도 불구하고 개인적으로는 장점이 더 많다고 느껴졌고, 앞으로 구글에서 플러터를 계속 발전시켜나간다고 가정할 때 플러터가 지닌 여러 문제도 지속적으로 보완되어갈 것이다. 

 

네이티브를 완전히 대체할 수 있을까?

아직은 아니다. 그러나 알 수 없다. 아직은 그 커뮤니티도 네이티브에 비하면 매우 작고 레퍼런스도 많지 않지만 플러터가 지닌 장점 때문에 급속히 성장할 것이라고 예상한다. 국내에서는 아직 플러터 개발자 채용도 드물고 그 경우도 많지 않지만 미국의 경우는 이미 꽤 많은 것 같다. 어떤 개발자는 플러터를 경험한 이후로 다시는 네이티브로 돌아가고 싶지 않다고까지 말한다. 나도 한달간 플러터를 해보다가 네이티브를 해보니 상당히 불편하고 답답하다고 느껴졌다. 

 

낮은 진입장벽

이 부분은 구글에서도 의도적으로 많이 고민한 결과가 아닐까 생각한다. 더 많은 개발자를 유입시킬 수 있기 때문이다. 그 결과 네이티브 개발과 비교해 플러터 개발이 훨씬 배우기 쉽다. 특히나 웹개발 경험이 있는 사람이라면 더욱 쉽게 느껴질 것이다. 반면에 네이티브 개발 환경은 처음에 익숙히지려면 상당히 많은 학습이 필요하다. 그리고 익숙해진 후에도 신경써야할 부분이 상당히 많다. 다양한 OS버전이 그 중 하나이다. 네이티브 앱 개발자로서 숙명이라고 할 수 있다. 그러나 플러터에서는 여기서 많은 부분이 자유로워진다. 그리고 레이아웃을 구현하는 방식 또한 네이티브에 비해 훨씬 간단하다. 

 

레이아웃과 애니메이션을 구현하는 방식

네이티브에서는 xml을 통해 레이아웃을 그린다. ConstraintLayout이 나오면서 좀 쉬워진 편이지만 그 전에는 여러 다양한 레이아웃의 기능들을 익혀야 했다. 그리고 앱이 커지고 복잡해질 수록 xml파일도 늘어난다. xml파일을 많이 열어두면 컴퓨터의 메모리 소모도 많아지고 점점 안드로이드스튜디오가 느려지기까지 한다. 그러나 플러터에서는 모든 레이아웃도 dart로 작성한다. (안드로이드에서도 최근에 Jetpack Compose가 발표되면서 비슷한 방식으로 개발이 가능해진 것 같다)  그리고 hot reload를 통해 변경한 레이아웃을 빠르게 확인할 수 있다. 애니메이션도 마찬가지다. 네이티브에 비해 훨씬 간단하고 빠르게 애니메이션을 구현할 수 있다. 플러터로 만든 앱에서 더욱 다양하고 멋진 애니메이션이 많이 보이는 이유다.

 

Hot Reload

네이티브를 경험해봤다면 Hot reload는 생각보다 상당히 편리한 특성이다. 안드로이드 네이티브에도 Hot reload가 있기는 하지만 그다지 잘 작동하지 않는다. 많은 경우 그냥 빌드하는 것과 다르지 않다. 그래서 개인적으로는 잘 사용하지 않았다. 그러나 플러터의 hot reload는 매우 유용하다. 레이아웃의 요소를 변경하고 적용하면 거의 즉각적으로 디바이스에 반영된다. 아직 불안정한 요소도 없지는 않지만 매우 편리한 기능인 것은 확실하다. 그리고 덩치가 큰 네이티브를 빌드할 때 많은 경우 노트북 혹은 맥북이 매우 힘겨워하는 것을 쉽게 경험할 수 있다(시끄럽고 뜨거워진다). 그러나 플러터 앱을 빌드할 때는 아직 그런 적이 없다. 체감상 컴퓨터의 자원을 더 적게 사용하는 것 같다. (이건 어쩌면 프로젝트의 크기가 충분히 크지 않아서 그럴 수도 있으니 확실하지 않다)

 

Dart의 장래성

Dart로 안드로이드 앱과 iOS앱을 동시에 작성할 수 있다. 그러나 그 뿐만이 아니다. 웹앱도 개발이 가능하다. 데스크톱 앱도 개발이 가능하다고 하는데 이 부분에 대한 레퍼런스는 잘 안나와서 얼마나 유용할지는 잘 모르겠다. 서버사이드 앱도 가능하다고 한다. 우연히 어떤 개발자의 글을 봤는데 자신들의 서비스(링크)의 프론트와 백엔드를 모두Dart로 개발했다고 한다. 흥미로운 일이다. 게다가 구글에서 Dart를 상당히 밀고 있는 것으로 보인다. 

 

한계

장점을 많이 나열했지만 아직은 단점도 확실한 것이 사실이다. 우선 네이티브에서 구현할 수 있는 모든 기능을 플러터로도 동일하게 구현할 수 있지는 않다. 많은 패키지들이 오픈소스형태로 계속 업데이트 되고 있지만 아직 제공되고 있지 않은 기능들은 어쩔 수 없이 네이티브로 구현을 해야한다. 그래서 아직은 앱이 커지고 복잡해질수록 이런 문제와 많이 마주치게 될 수밖에 없고, 그렇게 되면 플러터가 지닌 장점이 퇴색된다. 이런 이유로 플러터 개발을 보류하는 경우도 많을 것이다. 그리고 무엇보다 커뮤니티가 아직은 매우 작다는 것이 가장 큰 단점이자 한계이다. 어떤 문제와 마주쳤는데 그 문제를 처음 발견한 사람이 자신이 될 수도 있다면, 해결하기가 결코 만만하지 않을 것이다. 또한 그 외에도 네이티브에서 제공하는 여러 편리한 기능들이 플러터에는 아직 제공되지 않는 것들이 많다고 알려져있다. 

 

맺음말

개인적으로 플러터를 배우면서 참 재미있고 장점이 많다고 느꼈고, 앞으로 어떻게 발전해갈지 매우 궁금하다. 장점이 많다고 해도 아직은 네이티브와 비교해서 아쉬운 점들이 존재하기 때문에 회사의 입장에서는 섣불리 새로운 서비스를 플러터로 진행하는 것은 모험일 것이다. 그래서 보통 규모가 있는 회사들이 플러터를 시도하는 경우는 드문 것 같고, 일부 스타트업들 가운데 시도를 하는 것이 보인다. 자원이 한정적인 까닭에 플러터를 선택할 때의 장점도 분명히 클 것이다. 지금의 회사에서 진행하던 플러터 프로젝트에 잠깐 발을 담그게 된 것이 운이 좋았다. 조만간 개인 프로젝트로 플러터 앱을 만들어볼 생각이다. 

 

참고

- Flutter 공식 홈페이지

- Dart 공식 홈페이지

- Flutter Showcase: 플러터로 개발되어 서비스되고 있는 앱들을 확인할 수 있다.

- Android Jetpack Compose: Jetpack에 새로 추가된 compose, 레이아웃 구현을 더욱 간편하게 할 수 있다. 

- 개인 깃허브 저장소: 플러터 데모 앱과 공부 기록을 저장하고 있다.

댓글