Flutter 를 시작했다!

이지훈·2024년 4월 2일
0
post-thumbnail

갑자기 Flutter 는 왜?

사실 플러터를 처음 하는건 아니다. 2021년 즈음에, Android 도 이제 본격적으로 공부를 하고 있을 무렵, 에브리타임을 통해 사이드 프로젝트에 참여하였던 적이 있는데, 당시 PM 분 께서 Flutter 로 개발해보는 것을 제안하였고, 학습을 하면서 Flutter 로 프로젝트를 진행한적이 있었다. 하지만 모종의 이유로 프로젝트는 중단 되었고, Flutter 학습 또한 중단하였다.

그 당시부터 Flutter를 해서 지금까지 꾸준히 했었다면, 지금에 취업 시장에 있어서는 떡상 했었을 수 도 있겠다 싶어, 아쉬운 마음은 있지만, 당시엔 Android 도 제대로 하지 못하는 상태였기 때문에, 하나에만 집중할 필요가 있었기에 후회는 없다.

그래서 왜 갑자기 3년이 지나서, 하게 되었냐면은..

첫번째 이유로는,

왜들 그렇게 스타트업들에서 Android 와 같은 네이티브 말고 Flutter 를 뽑으려고 하는지에 대한 이유를 내가 직접 체험하고 느껴보고 싶기 때문이다. 직접 Flutter 를 통한 개발을 진행 해보면서, 기존 Android 개발과 어떻게 다른지 느껴보고, 서로간의 장단점을 비교해보려고 한다.

두번째 이유로는,

대세에 편승(?) 하기 위함이다.
현재 모바일 앱 개발 업계 상황상, 이제는 한 가지 플랫폼만 고집하기엔, 경쟁력에 있어서 다소 떨어질 수 있겠다는 불안감이 엄습해오고 있다. 물론 하나의 프레임워크의 스페셜리스트들은 어딜가도 훌륭한 대접을 받을 수 있다. 하지만 난 아직 응애 개발자이기 때문에, 스페셜리스트라고는 인정받을 수 없을 것이며, 나의 가치를 끌어올리기 위해선, 다른 프레임워크의 대한 학습 경험도 필요해보인다. 그렇지만 Flutter 개발자로서, 첫 커리어를 시작하고 싶진 않다.

마지막으로 세번째 이유는,

사이드 프로젝트에서의 효율성이다.
스타트업과 마찬가지로, 사이드를 구할 때, 개발자를 구하는 것은 쉽지않다. 경험상 IT 동아리가 아닌 곳에서는 iOS 개발자는 더더욱 구하기 쉽지 않았다. 그래서 Android 만 개발하게 되는 상황이 빈번히 만들어졌었는데, 요새 소위 말하는 MZ들은 아이폰을 많이 쓰는지라, 반쪽짜리 프로젝트가 되는 경우가 존재했다. Flutter 로 개발을 하게 된다면, 이러한 문제를 해결할 수 있을 것이라 생각이 든다.

네 이놈... Android 배신이냐? KMP나 해라

그건 아니다... 그치만 Android 개발에 살짝 슬럼프가 온 것은 사실이다. 그동안 사이드 프로젝트를 활발하게 해오면서 새로운 것들을 많이 적용해보았고, 이제는 뭔가 정형화된 틀 내에서 개발을 행하고 있는 느낌이 든다. 아직 다뤄보지 못한 흥미있는 새로운 기술들은 물론 많지만, 사이드 프로젝트 규모로는 다룰 수 있는 한계가 있는 것 같다.

예를 들자면, Media3 와 같은 영상이나 이미지 관련한 관련된 기술들인데, 혼자서는 깊게 다뤄보는데에는 한계가 있다고 생각이 들고, 사이드 프로젝트에서도 주제는 다 달랐으나, 결국엔 계속 비슷한 개발을 반복하는 것 같다는 생각도 들었다.

내가 관심있어하는 도메인에 웹툰이나 OTT와 같은 도메인도 포함 되어 있기 때문에, 위의 기술들도 빨리 더 깊게 다뤄보고 싶다.

계속 새로운 것을 추구하고, 학습해보고 싶은 성격상, Android 말고 다른 것도 공부해보고 싶다는 생각도 들고, 취업과 관련해서 별로 좋지 못한 잡생각이 들 때, 새롭게 무언가를 배우고 학습하고 있으면, 생산적이기도 하고, 잡념이 잠시 사라지는 것도 있어, Flutter 에 대해 조금씩 알아보고자 한다.

글의 주제에서는 벗어나지만, Kotlin Multiplatform 도 계속 공부하고 싶은 것도 사실이다.

최근에 굉장히 흥미로웠던 소식이 있었는데

바로 AAC ViewModel 이 KMP 를 지원한다는 것이었다.
AAC ViewModel 이 Android 플랫폼에 종속되어 있었기에, 기존의 Android 개발과는 다른 방식으로, 정확힌 뷰모델의 역할을 대체할 수 있는 라이브러리를 쓰는 식으로 개발을 해야했기에, 허들이 상당히 높았는데, 이제는 그럴 필요가 없어진 것 같다.

물론 Jetpack 의 모든 라이브러리들이 KMP 를 지원하는 것은 아니라, 대체제들을 찾아야 하지만, 최근엔 Voyager 같은 훌륭한 라이브러리들이 많이 존재하기에, SwiftUI 를 병행해야하는 KMP 가 아닌, 오직 Compose 만들 사용하여 UI 를 개발하는 Compose Multiplatform 을 개발하는데 있어, 많은 어려움이 해소될 것으로 보인다.

마음이 맞는 분들과 KMP 로도 같이 협업하여 실사용할 수 있는 앱을 배포해보고 싶다.
언제든 불러주십쇼~ 블로그 상단에 깃허브 링크에서 저의 정보를 확인할 수 있습니다.

그래서 어떻게 공부할건데?

Android 를 입문할때도 신세를 졌던 개발자분께서, Flutter 입문 강의를 찍어주셔서, 해당 강의를 통해 Flutter 로 어떻게 개발하면 되는지, 그 감을 익혀보려고 한다.
강의 커리큘럼 내에서, 상당히 다양한 주제를 다루기 때문에, '기존에 Android 에선 해당 요구사항을 구현하기 위해, 이렇게 했었는데, Flutter 에서는 이런식으로 구현하는 구나~' 와 같은 비교를 해볼 것이다.

또한 해당 강의는 입문자들을 위한 강의이기에, Flutter 의 꽃이라 할 수 있는 상태관리 패턴들에 대해선, 다루지 않기 때문에, 공식문서나 기술 블로그, 깃허브 샘플 레포지토리 같은 곳들을 통해 상태관리들에 대한 지식을 습득하여, 위에 강의에서 다룬 프로젝트들에 상태관리를 적용해보려고 한다.

기존에 Android 개발을 공부할 때도, 위와 같은 공부 방식으로, 많은 것들을 얻을 수 있었고, Android 에서의 아키텍처 패턴들과 크게 다르다고 보지 않기 때문에, 학습에 있어선 큰 어려움은 없을 것 같다. 제발

상태 변화와, 이벤트를 처리하는 어떠한 철학들에 대해선, 선언형 UI를 다루는 프레임워크들이 비슷한 경향을 띄고 있고, 관심사를 분리하기 위한 Clean Architecture 나, MVVM 과 같은 아키텍처들의 경우 프레임워크에 종속되지 않는 것으로 알고있다. 애초에 MVVM 이 Android 만을 위한 아키텍처가 아니기도 하고 말이다.

뭐가 어찌되었든, 생초짜였던 시절, Android 에서 처음 MVVM 를 공부할 때 보단, 그 러닝 커브가 낮을 것 같다.

현재까지 후기와 앞으로의 계획

여태까지 대략 일주일이라는 플러터 개발의 대한 짧은 후기로는 다음과 같다.

너무 좋은데? 할만 한데?

여태 Dart 라는 언어가 Kotlin 에 비해 별로라는 선입견을 가지고 있었는데. 그 이유로는 자바와 비슷하게 코드를 작성하고, 세미 콜론을 귀찮게 맨 끝마다 붙여야 하며, 코루틴과 같이 비동기를 유려하게 처리할 수 있는 기술을 지원하지 않는다는 것이었다.

하지만, 자바와 비슷해서, 언어 자체를 위한 별도의 학습이 필요 없었고, 오히려 Android 에선 너무나도 어렵게 구현해야 했던 것들이, Flutter 에선 기본 컴포넌트 설정을 주어져서, 더 편하게 구현할 수 있구나 라는 생각이 들었다.
또한 Future<>, async await, Stream 등을 활용하여 나름 직관적으로 비동기 처리를 할 수 도 있었다.

Compose 는 1년을 넘게 학습해도, 익숙해지지 않았었는데, Flutter 는 벌써 익숙해진 것 같은 착각마저 든다. Compose 라는 선언형 UI에 대해 학습을 했기 때문에, 다른 선언형 UI에 대한 러닝 커브가 줄어든 것도 같다. SwiftUI는 왜.. 사실 우매봉에 위치해 있는거일지도...

현재 인강에서 필요한 부분들을 거의 다 수강하였기 때문에, 앞으로는 해당 강의에서 다뤘던 프로젝트 중 가장 인상 깊은 프로젝트에 Riverpod 을 적용해보려고 한다. StateFul, Stateless, setState 와 같은 상태관리 방식 만으로는, 좀 더 규모있는 프로젝트에서 상태를 관리하는데 어려움이 있기 때문에, 이를 개선해보려고 한다.

그 이후로는 현재 사이드로 진행하고 있던 팀에서 서비스 배포가 거의 완료되어, 다른 서비스를 시작해볼까 라는 제안이 나오고 있는데, 해당 팀에선 iOS 개발자가 없기 때문에, 새로운 프로젝트를 시작한다면 Android 가 아닌 Flutter 로 해볼 예정이다. 언제나 새로운 시작은 설레고 기대되는 것 같다.

더 나아가서는, 크로스 플랫폼들이 넘쳐나는, 춘추 전국 시대라고 할 수 있는 현재 모바일 앱 개발 생태계 속에서, 플랫폼에 구애받지 않는 경쟁력 있는 개발자가 되고 싶다.

https://github.com/easyhooon/food-pick
글에서 언급한 프로젝트의 레포지토리 링크인데 점점 더 발전시켜나갈 예정이다!

P.S 이번주 주말에 아래와 같은 컨퍼런스 행사를 하는데, 상당히 기대를 하고 있다.

아는 만큼, 보이는 것이기 때문에, 그 전까지 조금이나마 더 Flutter 에 대해 학습을 하여, 컨퍼런스를 통해 얻어갈 수 있는 것이 많았으면 좋겠다. 열띤 토론과 함께 서로간의 격렬한 디스를 주고받았으면 좋겠다.

profile
실력은 고통의 총합이다. Android Developer

0개의 댓글