프론트엔드 개발자의 MVP 개발스택 추천
안녕하세요 드로우하타 개발자 이재일입니다.
혹시 이번 디콰 뉴스레터를 보셨나요?
저희 팀 주연님의 글이 디콰 뉴스레터 아티클 챕터 첫글로 올라왔더라구요. (오예)
스스로 내린 결정과 그 이유를 공유하는게 가장 좋다는 생각이 들었습니다.
그래서 이번 주제는 드로우하타의 개발스택 입니다.
드로우하타의 개발스택은 다음과 같습니다.
1. 앱 개발: React Native
2. API: NestJs
3. 관리자: NextJs
4. DB: supabase
5. 앱 관리: firebase
6. 배포: oracle cloud, docker
그 중에서도 가장 고민되었던 지점인 앱개발 스택 고르기와 서버 스택 고르기에 대해서 말씀을 드리고자 해요.
저에게 처음 개발을 가르쳐주었던 분이 하신 말씀이 있는데요.
"자바스크립트만 알아도 먹고 산다."
하지만 당시에 저는 비전공자에 모르는 것도 많고 욕심도 많아서 javascript 말고도 python, java 도 같이 찍먹해보면서 웹개발, 서버개발... 이것저것 잡다하게 시키면 하는 개발자1로 일하다가 백엔드와 프론트 중 결정의 갈림길에서 프론트를 골라서 여기까지 온 것이죠.
그렇게 저에게 익숙한 스택인 React와 Typescript를 기본적으로 염두해두고 스택을 쌓아나가기 시작했습니다.
1. React Native VS Flutter
보통 앱개발을 시작하시려는 분들은 두 가지 중에 고민을 많이 하게 되는데요.
저는 개발이 처음이다 하면 Flutter
이미 React, TS 개발을 해봤다 하면 React Native 라고 말씀드리고 싶습니다.
왜냐하면 개발문법을 어차피 익히면서 개발을 해야하기에 아예 처음 배워야하는 입장이라면 저는 Flutter를 추천드리고 싶어요. 하지만 Typescript를 안다면 React Native가 괜찮은 선택이라고 말할 수 있습니다.
저 또한 이미 React Native의 고통스러운 ios, android 설정을 이미 경험해보았기 때문에
처음에는 Flutter로 개발을 했었습니다.
하지만 Flutter에서도 동일하게 배워야하는 Dart 문법과 디자인패턴 등은 굳이? 라는 생각이 들었어요.
거기에 가장 힘들었던 건 계속해서 Nesting 으로 들여써야하는 문법 구조도 저에겐 힘들었죠...
그러다보니 Flutter의 강점인 ios, android 의 보다 쉬운 설정을 체감하기도 전에 코딩 단계에서 너무 힘들었습니다 ;
그래서 flutter로 개발하던 것을 멈추고 다시 React Native로 돌아왔습니다.
2. Node (NestJS) VS Django VS spring boot
대한민국에서 서버 라고 하면 거의 java의 spring 이죠.
또 강력한 관리자 사이트를 지원해주는 Django도 있구요.
하지만 저는 Node 진영의 NestJs 를 선택했습니다. 분명히 불안한 부분도 있었지만, 아무래도 이미 Node로 서비스를 운영하는 회사들이 많다는 생각이었습니다.
대표적으로 인프런 서비스도 NestJs로 개발되고 있고, 배민에서도 NestJs를 새로운 백엔드 표준으로 내세웠다는 글을 보고나서 나도 해도 되겠다는 생각을 했어요.
비록 현업에서 Node 서버를 운용하는 걸 경험하지 못했고, 단일쓰레드 등 불안한 부분도 있지만, 커뮤니티의 도움을 받아 어찌저찌 해결할 수 있지 않을까 하는 마음입니다.
거기에 아직 node 서버가 부하를 감당할 수 없을 만큼의 서비스가 아니기 때문이에요. 비록 스크립트 언어와 컴파일 언어 같은 언어별 특징에 의해서 성능차이가 존재하지만, 사용자가 아직 0명인 서비스는 뭘로 만든들 (...)
사실 React Native를 선택한 시점부터, 모노레포 를 이용해서 앱과 관리자, 서버까지 하나의 코드베이스에서 관리하고 싶기도 했구요. 만드는 사람이 쉽고 편하게 만들 수 있어야 합니다.
개발자 별 프로젝트 스택 추천
이번 프로젝트를 통해 깨달은 점은, 개발 스택 선택에 있어 가장 중요한 두 가지 요소는 '익숙함'과 '개발 편의성'이라는 것입니다.
이를 바탕으로 대상별 추천 스택을 정리해보았습니다:
대상 | 앱 | 서버 |
프론트엔드 개발자 | React Native | NestJS |
백엔드 개발자 | Flutter | Django or Spring boot |
첫 개발, 비 웹개발자 | Flutter | Django |
왜 이렇게 추천하냐면
가장 중요한 건 익숙한 기술이 있느냐 하는 것이었구요.
두 번째로 중요한 건 개발하기 편한가 였습니다.
React Native와 NestJs는 타입스크립트 진영으로 VScode 하나만 이용하면 되지만,
Django와 Spring boot는 아무래도 Intellij나 Pycharm을 이용해야 하죠.
거기에 Flutter도 ide를 사용해야 하니 Vscode를 같이 이용하는 것보다는
같은 회사에서 출시한 Android Studio를 이용해야 좀 더 편리한 것 같습니다.
추가로 첫 개발을 하시는 분들은 Flutter랑 Django를 추천 드리는데요.
아무래도 Spring과 그 영향을 받은 NestJs는 모두 견고하게 작성을 해야하다보니 코드량이 늘어나서 러닝커브가 꽤 높다고 생각하구요.
Django는 python의 쉬운 문법과 더불어 관리자도 어느정도 지원을 해주기 때문에 더 유리한 측면이 있다고 생각합니다.
React Native는 사실 Typescript와 ios, android의 언어를 모두 다루게 되다보니...
로직작성이 아니라 설정에 더 많은 시간을 소비하게 될 때가 많아요. 🥲
그래서 처음 개발하시는 분들에게는 flutter와 Django로 앱과 서버를 구성하는 편이 더 좋다고 생각합니다.
마치며
글에는 담지 않았지만, 모노레포 설정도 NX로 해보려고 하다가 안되서 turbo로 변경하고,
supabase edge 이용해서 서버리스로 구축하려다가 코드 구성 등이 어려워서 다시 백엔드로 구축했어요.
또 supabase의 auth 부분을 이용해서 oauth를 설정해야하다보니 그에 맞게 orm 세팅하는 부분도 있었고,
번역키를 자동화 하고 싶어서 데이터 저장을 구글시트에 할지 데이터베이스에 할지 고민하다 리팩토링과 롤백을 반복했던 시기도 있었습니다.
그렇지만 결국 돌고 돌아서 무사히 정착한 것 같은 기분이 듭니다.
그래도 아직 반영하지 못한 모니터링과 로깅, 언젠가 벗어나야할 oracle cloud 프리티어 환경,
개발 및 스테이징 서버 구축 등의 미션도 남아있어요.
깨달은 것은 다음으로 걸어가기 위해선 현실에 한발자국 딛고 있어야 한다는 것이에요.
예전에 부동산 유튜버 하시는 렘군님 영상을 봤던게 기억에 남는데요.
본업에 80%의 시간, 노력을 쏟고, 자신이 목표로 하는 것에 20의 시간, 노력을 쏟으라고 했어요.
이게 맞는지 정확히 기억이 안나는데 80 20 법칙을 활용해서 하나씩 넘어가는 방법을 사용해야 한다고 하더라구요. (파레토 법칙)
저는 점프점프 하면서 가야 빨리 간다고 생각을 했는데요. 언젠가부터 제자리 점프를 하고 있는게 아닌지 했던 생각이 들었어요. 그래서 본인이 제자리 쳇바퀴를 돌고 있다고 느끼시는 분이 있다면 이 방법을 적용해보는 것을 추천합니다!
이제는 한걸음 한걸음 나아가고 싶어요.
인생도 길게 보려고 하구요.
읽어주셔서 감사합니다 :)
댓글
로그인 후 댓글을 남길 수 있습니다.
저도 프론트 개발자지만 아직 앱 개발 경험이 없어서 늘 RN과 플러터 사이에서 무엇으로 시작하면 좋을지 갈등 중이었습니다. 후자가 최근 인기가 좋아서 고민이 들더라구요. 그런데 이렇게 보니 빠르게 일단 빌드하기엔 RN이 좋아보이네요! 저도 참고해보겠습니다! 혼자서 관리하시기에 굉장히 많은 것을 다루고 계신 거 같아서 대단하다는 말밖에는 안 나오네요! 기대하겠습니다!! 😆
지금 시작하시는 거면 expo로 도전해보시는 것도 좋은 것 같습니다. 레딧에서는 이미 Expo 가 더 좋다고 결론이 내린 느낌이었어요. 하지만 expo 환경이 주는 커스텀이 불가능한 부분이 언젠간 발생할 것 같기도 해서 cli로 결정한 것도 있었습니다 !
잼플과 비슷한 스택을 사용하고 계시네요!! 저희도 최근에 React Native 기반의 앱을 Expo로 출시했어요. 마지막으로 RN 개발을 했던 게 3년 전이었는데, 그때와 비교하면 개발 환경이 정말 많이 좋아졌더라고요. 특히 Expo가 크게 발전한 것 같아요
앱스토어에 출시한 건가요?? 검색을 해도 안 보이네요
아직 QA 단계라서 배포는 하지 않았습니다 !! 9월 30일을 목표로 하고 진행 중이에요 ! 그쯤 배포 또는 심사단계에 올 것 같습니다 :)
저도 CLI가 좋은지 Expo가 좋은지 계속해서 서칭을 했는데, 확실히 레딧에서는 이미 Expo 를 사용하지 않으면 바보다? 이렇게 까지 말하더라구요 ㅋㅋㅋ 기본적인 라이브러리들을 이미 래핑했다고 알고 있습니다
전에는 CLI 사용했었는데(그때는 Expo 쓰면 고생한다 였어요) 지금 Expo는 신세계 입니다 ㅎㅎ 너무 편해요
리팩토링과 롤백....🥹 플러터에서 RN으로 바꿀때 셋업 다시한다 했던 기억이 새록하네용...쉽지 않을 것 같다는 예상은 했는데, 이렇게 글로보니 감사하단 생각밖에 안들어요 ㅠㅠ 재일님이 뒤에서 많은 것들을 뒷받침해주고 처리해주고 있다는것을 압니다!!
막상 해보니 저도 부족한게 많아서 ㅠㅠㅠ 저도 팀원분들 도움을 많이 받고 있습니다 ! 저도 이번 PMC로 팀원분들의 몰랐던 부분도 알게 되어서 즐거워요 :)
플러터는 들여쓰기 저도 처음엔 짜증났었는데, 컴포넌트화를 많이 시켜놓으면 그래도 좀 덜 해지더라구요.. 요즘에는 Expo이용해서 개발해보는데 확실히 MVP쪽은 Expo가 나은것 같다가도... 추후에 잘 될때 생각하면 플루터로 할껄 그랬나 싶기도 하네요....
맞아요 플러터는 들여쓰기가 참,,, 너무 답답하죠 ㅋㅋ 그래서 저도 그만둔것도 있구요 ... 전 잘 될 때를 생각해서 CLI 로 개발한거긴 한데, Expo도 생각보다 빠르고 꾸준하게 발전하더라구요. 개인적으로는 이미 RN 으로 서비스를 잘 하고 있는 회사가 너무 많아서 괜찮지 않을까 하는 생각입니다
요건 얼마전에 발견한 RN, 플러터 개발 목록입니다. https://github.com/crossplatformkorea/koreanapps.md 요런걸 참고해보셔도 좋을 것 같아요. https://github.com/jondot/awesome-react-native?tab=readme-ov-file#open-source-apps
공유 감사드립니다!
잘 읽었습니다 마지막 리소스 배분에 대한 깨달음 (8:2)도 공감이 되네요 :D
본업에 80%의 시간, 노력을 쏟고, 자신이 목표로 하는 것에 20의 시간, 노력을 쏟으라고 했어요. 이게 맞는지 정확히 기억이 안나는데 80 20 법칙을 활용해서 하나씩 넘어가는 방법을 사용해야 한다고 하더라구요. (파레토 법칙) T.T 제자리 걸음이 아니라 이제는 나아가고 싶습니다.. 언제나 감사해요 재일님 🥹🦋