기타

[기타]1인 개발 전향기(Unity -> Dart Fullstack)

Aostols 2026. 2. 6. 09:23
반응형

간만에 쓰는 포스트 입니다.

게임 개발자로 살아오다가 1인 개발로 완전히 전향하게 되어서 내용을 정리해 볼 필요가 있어서 정리합니다.

 

이전 커리어

Flash 개발자로 커리어를 시작해서 1년 반만에 Scaleform으로 게임개발로 전향하였습니다.

그 과정에서 다시 Unity클라이언트 개발자로 전향 하였습니다.

하지만 결국 회사 폐업으로 인한 실직과 때마침 터진 Unity의 요금제 개편으로 Unity 프로젝트의 대폭 축소 및 AI파동으로 일자리가 없더라구요.

 

Flutter의 시작

백수생활에서 외주로 Flutter 개발을 하게 되었습니다.

앱 개발 의뢰였고 언어선택이 자유로와서 Flutter를 선택하였고 이유는 크로스 플랫폼이기 때문에 모바일 앱 + 웹 까지 다 처리 할 수 있을거라 생각해서 선택 하였습니다.

그리고 Dart라는 언어가 생각보다 접근하기 부담이 안되어서도 그랬습니다.

백엔드도 혼자 개발 하게 되었는데 처음에는 Firebase Cloud Functions + TypeScript를 선택했습니다.

JavaScript의 자유로움은 견딜수 없었습니다.

그리고 이때까지는 혼자서 개발할수 있는 백엔드는 서버리스 펑션만 있는줄 알았습니다.

그래서 앱개발 + 백엔드 개발 + 간략한 웹사이트 까지 개발하였습니다.

 

백엔드의 전환

개발하는 과정에서 백엔드에 대한 2가지 이슈가 발생했습니다.

하나는 TypeScript가 콜드스타트가 생각보다는 좀 있다 였고 다른 하나는 CloudRun이라는 존재를 발견하였습니다.

CloudRun이라는 컨테이너가 있고 언어를 자유롭게 쓸수 있다는 것을 백엔드 구축이 다 끝나고 알았습니다.

그래서 CloudRun으로 전환하면 언어의 선택권도 넓어지고 서버의 유연성(동시성)도 높아지는 것을 알게 되었습니다.

그래서 어떤 언어를 선택할까 하다가 Dart와 GO를 두고 고민하였습니다.

그중에 일단 Dart를 먼저 생각해 봤고 Dart 백엔드 Shelf 와 DartFrog를 찾게 되어 일단 Shelf를 해보게 됩니다.

Dart는 개발빌드에서 JIT로, 릴리즈 빌드에서 AOT로 동작하는 멋진 녀석이라서 콜드 스타트가 굉장히 많이 줄어들었습니다.

2초대에서 0.5초대로 줄어들었고 이것은 당연히 여러가지 변수가 있는 수치라 그냥 아무튼 줄어든다 정도로 인지했습니다.(JIT->AOT가 굉장히 크다고 생각됨)

Shelf로 정말 껍데기만 구축하고 테스트 하는 과정에서 약간 부족함을 느끼고 엔드포인트가 많아질경우 관리비용이 조금 많이 나가겠구나 싶어서 DartFrog도 찾아보게 되었습니다.

결국 DartFrog로 최종적으로 선택하여 백엔드를 전환 예정중입니다.

- 신규 API는 DartFrog로 제작하고 구 API는 일단 두고 하나씩 전환 예정입니다.

 

성능은 매우 만족스럽지만 지원은 만족스럽지 않습니다.

Node는 모든 패키지가 다 있다고 말할정도로 지원이 광범위한데 Dart생태계는 부족하고 Firebase Admin SDK도 직접지원이 없어서 커뮤니티 패키지를 해야 합니다.

그 과정에서 최신 패키지는 저의 다른부분과 충돌나서 이전 패키지를 받아서 튜닝해서 쓰고 있습니다.

그래서 보안에 신경쓰고 있지만 Dart 백엔드에 대한 약간의 불안감은 남아있습니다.

 

Go를 선택하지 않았던 이유는 클라와 서버가 같은 DTO를 쓸수 있다는 장점 때문에 선택하지 않았습니다.

1인 개발이다 보니 각각 클래스 만드는게 비용이라면 비용일수 있고 그 과정에서 실수가 일어날 여지도 있기 때문이죠.

또한 Go를 다시 배워야 한다는 점도 부담입니다.

그래서 알고 있는 Dart 언어로 백엔드를 구성하고 성능도 충분하고 지원은 약간 모자르지만 대부분의 API들은 REST를 지원하기 때문에 극복해 나갈 수 있다고 생각하여 최종적으로 DartFrog를 선택하였습니다.

만일 서비스가 거대해진다면 그때가서 Go를 선택하고 서버 마이그레이션 진행하는 것도 늦지 않은 선택이라고 생각합니다.

그만큼 Dart서버가 어느정도 버텨 줄 수 있다고 생각됩니다.

 

Dart Fullstack의 만족

일단 저는 만족 합니다.

DTO전환은 json_annotation 패키지로 조금 더 구조화 할 수 있어서 클라 백엔드의 결합이 좀 더 타이트해지는 느낌입니다.

- json_annotation은 DTO패키지를 json으로 시리얼라이즈하게 도와주는 패키지라 fromJson, toJson을 직접 만들어주고 클래스 중첩도 간단히 해결해 줍니다.

클라 + 서버 성능도 모두 만족스럽습니다.

상시서버라면 Node가 더 좋은 성능을 낼수도 있지만 서버리스의 특성상 콜드스타트가 매우 중요한 부분이라 조건적으로 Dart백엔드가 좋은 성능을 낸다고 생각됩니다.

 

Jaspr의 추가

FlutterWeb의 가장 큰 문제는 초기 로딩이 느리다는 것이고 이는 IOS에서 안뜨는 경우도 있고 SEO에 취약하다는 점이 있었습니다.

일단 어찌저찌 FlutterWeb으로 앱의 사이트를 만들었고 어드민을 만들었지만 앱사이트는 초기에 IOS에서 뜨지 않아서 고생했었습니다.

하지만 Jaspr는  웹표준이고 html을 그대로 쓰기 때문에 이러한 문제가 전혀 없었죠.

초반에는 css개념때문에 고생을 좀 했는데 Jaspr는 생각보다 Flutter 친화적으로 설계되어 친숙한 개념이 있었습니다.

Flutter의 Stateless, Stateful 개념이 그대로 적용되어 있어서 setState()로 리빌드한다는 개념은 동일했습니다.

그리고 static으로 빌드해서 SSG로 쓴다면 호스팅에 그대로 올려서 쓸수 있어서 굉장히 간편했습니다.

여전히 어드민 사이트는 FlutterWeb으로 합니다.

이건 데스크톱에서 열고 SEO도 필요하지 않고 복잡한 웹앱에 가깝기 때문입니다.

그 외에 공개되는 사이트들은 Jaspr로 변환하였고 데스크톱버전과 모바일버전의 분리도 자연스럽고 좋은 결과를 얻게 되었습니다.

 

현재 상황

  • Flutter 클라이언트
  • Node + DartFrog 백엔드
  • Jaspr웹사이트
  • FlutterWeb 어드민

이렇게 구성되었습니다.

나름 험난한 길이었지만 DartFrog가 가장 큰 도전 같았네요.

지금 하고 있는것은 Maestro로 QA자동화를 구축중입니다.

Maestro는 오픈소스로 Flutter에서 조금 신경써주면 자동화를 구축할 수 있어서 기본 테스트는 끝난 상황이구요.

1인 개발 전환 과정에서 생각한건 최대한 유지보수를 줄여가는 것인데 Fullstack으로 오류 가능성을 줄이고 QA자동화로 상시 테스트 구축이 중요한 포인트가 됩니다.

혹시 다른 1인 개발 전향을 고민하시는 분에게 도움이 되었으면 하는 마음으로 적어봤습니다.

반응형

'기타' 카테고리의 다른 글

[Azure] AzureFunction + BlobStorage, 캐싱  (0) 2025.03.25
[기타] 뒤끝서버와 Playfab 비교  (1) 2025.01.24
[Playfab]PlayerData  (2) 2024.07.14
[PlayFab]CloudScript - AzureFunction  (0) 2024.07.07
[기타]뒤끝서버 사용기  (1) 2024.06.30