플러터로 모바일·웹·데스크톱 앱 한 번에 만드는 법
단일 코드베이스로 iOS·안드로이드·웹·데스크톱까지 커버해야 하는데 네이티브별로 따로 짜려니 인력과 시간이 두세 배 듭니다. 구글이 만든 플러터는 다트 언어와 스키아 렌더러로 플랫폼 차이를 흡수해 네이티브급 성능을 단일 프로젝트에서 냅니다. 이 자료는 플러터 저장소(17.9만 스타, 11년 7개월 유지)의 설치부터 첫 실행·배포 파이프라인까지 실무 단위로 정리합니다.
한 번 짜서 모바일·웹·데스크톱까지 돌리는 크로스플랫폼 프레임워크를 찾는다면 플러터가 정답입니다. 17.9만 개 스타와 11년 7개월간 쌓인 생태계가 검증한 안정성으로, 이번 달에도 활발히 업데이트되는 현역 SDK입니다.
플러터는 무엇인가요
플러터(Flutter)는 구글이 만든 단일 코드베이스 UI 툴킷으로, 모바일·웹·데스크톱을 한 번에 개발하게 해줘요. 저장소 flutter/flutter는 17.9만 개 스타를 받았고, 11년 7개월 전(2015년 3월) 처음 만들어져 지금까지 활발히 업데이트되고 있어요(마지막 업데이트: 이번 달(2026년 10월)). 주 언어는 다트(Dart)이며, 라이선스는 BSD-3-Clause로 자유롭게 쓸 수 있어요.
왜 네이티브에 가까운 성능이 나올까요?
flutter create my_app
cd my_app
flutter runSDK 설치
공식 문서에서 플러터 SDK를 내려받고 PATH에 추가해요.
프로젝트 생성
flutter create명령으로 새 앱 뼈대를 만드세요.실행·확인
flutter run으로 기기·브라우저·데스크톱에서 바로 확인해요.
| 구성 요소 | 역할 |
|---|---|
| 다트(Dart) | AOT/JIT 컴파일, 타입 안전, 비동기(async/await) |
| 스키아(Skia) | 크로스 플랫폼 2D 그래픽 엔진, GPU 가속 렌더링 |
| 임베더(Embedder) | 플랫폼별 창·입력·이벤트 루프 연결 |
| 플러터 프레임워크 | 위젯 트리, 레이아웃, 제스처, 애니메이션, 머티리얼/쿠퍼티노 |
자주 묻는 질문
Q. 웹에서도 같은 성능인가요? A. 웹은 WASM/JS로 컴파일되고 CanvasKit(스키아 WASM) 또는 HTML 렌더러를 써요. 데스크톱/모바일과 거의 같은 위젯 트리를 공유하지만, 브라우저 샌드박스 제약으로 일부 네이티브 플러그인은 별도 구현이 필요해요.
Q. 기존 네이티브 코드와 섞어 쓸 수 있나요? A. 네. 플랫폼 채널(MethodChannel, Pigeon)로 안드로이드(Kotlin/Java)·iOS(Swift/Obj-C)·데스크톱(C++) 네이티브 코드를 호출해요.
왜 플러터를 쓰나요
플러터를 실무에서 선택하는 가장 큰 이유는 단일 코드베이스로 iOS·안드로이드·웹·데스크톱까지 한 번에 배포할 수 있기 때문이에요. 저장소 flutter/flutter 는 17.9만 개 스타를 모으며 11년 7개월 전(2015년 3월) 시작해 이번 달(2026년 10월)까지 꾸준히 업데이트되고 있어요. 덕분에 플랫폼별 네이티브 프로젝트를 따로 관리할 필요 없이 비즈니스 로직과 UI를 한곳에서 작성·테스트·릴리스할 수 있어 팀 전체의 개발·운영 비용이 크게 줄어들어요.
개발 속도를 높여주는 핫 리로드(Hot Reload) 는 코드 수정 후 앱을 재시작하지 않고도 화면 변화를 바로 반영해 줘요. UI 미세 조정이나 상태 로직 검증 시 빌드·설치 대기 시간이 거의 없어져 반복 주기가 초 단위로 단축돼요. 또 머티리얼 디자인(Material) 과 쿠퍼티노(Cupertino) 위젯 세트가 기본 탑재돼 있어 안드로이드·iOS 네이티브 룩앤필을 별도 라이브러리 없이 바로 구현할 수 있어요.
기존 네이티브 모듈 불러오기
MethodChannel·Pigeon·FFI 로 자바·코틀린·스위프트·오브젝티브-C·C++ 코드를 플러터에서 호출
플랫폼별 채널 구현
안드로이드(MainActivity), iOS(AppDelegate) 에 채널 핸들러 추가 후 플러터 측에서 invokeMethod 호출
점진적 마이그레이션
전체 화면을 한 번에 교체하지 않고, 화면 단위·기능 단위로 플러터 위젯을 끼워 넣으며 검증
| 플랫폼 | 빌드 산출물 | 배포 채널 예시 |
|---|---|---|
| 안드로이드 | APK / AAB / App Bundle | Play Store, 사설 스토어 |
| iOS | IPA / Xcode Archive | App Store, TestFlight, Enterprise |
| 웹 | JS + WASM 번들 | Firebase Hosting, Netlify, CDN |
| 데스크톱 | Windows: .exe / .msi macOS: .dmg / .pkg Linux: .deb / .rpm / AppImage / Snap | Microsoft Store, Mac App Store, Flathub, Snapcraft |
- 단일 저장소·단일 CI 파이프라인으로 릴리스 자동화
- 디자이너·개발자 공통 언어(위젯 트리)로 핸드오프 비용 감소
- 오픈소스(BSD-3-Clause)라 벤더 종속성 없음
한눈에 보는 플러터 생태계
플러터 생태계는 공식 문서부터 실시간 커뮤니티까지 한눈에 찾아볼 수 있게 정리돼 있어요. 저장소 flutter/flutter는 17.9만 개 스타와 33,584개 포크를 기록 중이며, 11년 7개월 전(2015년 3월) 시작해 이번 달(2026년 10월)까지 활발히 업데이트되고 있어요. 주 언어는 Dart이고 안드로이드·iOS·웹·데스크톱·임베디드까지 아우르는 크로스 플랫폼 태그가 달려 있어요.
| 분류 | 주요 진입점 | 용도 |
|---|---|---|
| 공식 문서 | https://docs.flutter.dev | 설치·위젯·API·쿡북·릴리스 노트 |
| 시작 가이드 | https://docs.flutter.dev/get-started | 첫 프로젝트 생성·에디터 설정·실행 |
| 개발 위키 | 저장소 ./docs/README.md | 엔진·프레임워크 내부 설계·빌드 스크립트 |
| 기여 가이드 | CONTRIBUTING.md | PR 규칙·코드 스타일·테스트 작성법 |
| 브레이킹 체인지 | https://docs.flutter.dev/release/breaking-changes | 버전별 호환성 깨짐 내역·마이그레이션 팁 |
| 발표 메일링 | flutter-announce (Google Groups) | 안정·베타·채널 릴리스 공지 수신 |
| 실시간 채팅 | Discord (README 배지 링크) | 질문·버그 논의·컨트리뷰터 모임 |
| 소식 채널 | Twitter / Bluesky (README 배지 링크) | 공식 블로그 요약·이벤트·팁 공유 |
라이선스는 BSD-3-Clause라 상업·비상업 구분 없이 자유롭게 쓸 수 있고, 도구 설치 시 Dart SDK를 구글 서버에서 내려받으며 이때 Google 서비스 약관에 동의하게 돼요. 리눅스 재단 모범 사례 뱃지·SLSA 인증도 통과해 공급망 보안 기준을 충족해요.
주의할 점·함정 피하기
깃허브에서 flutter/flutter 저장소를 클론하면 첫 실행 때 다트 SDK가 구글 서버에서 자동으로 내려받아집니다. 이때 구글 서비스 약관(https://policies.google.com/terms)에 동의한 것으로 간주되니, 사내 보안 정책이나 오프라인 환경에서는 미리 확인하세요.
| 플랫폼 | 릴리스 바이너리 크기(대략) |
|---|---|
| macOS (app 번들) | 20~35 MB |
| Linux (tar.gz) | 20~35 MB |
| Web (WASM/CanvasKit) | 1~3 MB (gz) |
플랫폼별 빌드 캐시 관리
flutter build는 플랫폼마다 별도 캐시 디렉터리를 씁니다. 안드로이드는 ~/.gradle/caches, iOS는 ~/Library/Developer/Xcode/DerivedData, 데스크톱은 build/ 폴더 아래 네이티브 아티팩트가 쌓여요. 디스크가 부족하면 `flutter clean` → 각 플랫폼 네이티브 폴더(`android/`, `ios/`, `windows/`, `macos/`, `linux/`, `web/`)에서 `gradle clean`, `xcodebuild clean`, `make clean` 등을 추가로 돌려야 완전히 비워집니다.
flutter clean
cd android && ./gradlew clean && cd ..
cd ios && xcodebuild clean && cd ..
rm -rf build/ linux/build/ macos/build/ windows/build/ web/build/채널(stable / beta / master) 선택 기준
- stable: 프로덕션 배포·장기 유지보수. 3개월 주기 릴리스, 핫픽스만 백포트. 가장 안전.
- beta: 다음 stable 후보. 새 위젯·API를 미리 써보되, 브레이킹 체인지가 가끔 들어옵니다.
- master: 매일 빌드. 최신 픽스·실험 기능 즉시 확인 가능하지만 불안정·문서 불일치·툴체인 오류가 빈번.
정리: 다음 단계로 나아가기
첫 앱을 스토어에 올린 뒤에는 지속 가능한 개발 파이프라인을 갖춰야 다음 릴리스가 두렵지 않아요. 플러터 저장소(flutter/flutter)는 17.9만 개 스타와 11년 7개월 동안 쌓인 히스토리를 가진 검증된 크로스플랫폼 SDK이므로, 공식 도구만 잘 엮어도 CI/CD·테스트·패키지 퍼블리싱·웹·데스크톱 확장을 무리 없이 이어갈 수 있어요.
이 로드맵을 팀 위키에 체크리스트로 옮겨 두고, 매 스프린트 회고 때 한 항목씩 완료 표시를 해보세요. 플러터 생태계가 11년 7개월 동안 쌓아온 안정성과 17.9만 개 스타가 증명하는 커뮤니티 지원이 다음 확장을 든든하게 받쳐줄 거예요.