발표자
박준우
개발자로는 8년차, flutter 는 4년차 개발자이다.
동물병원 관련 회사에 소속되어있다.
개요
무엇을, 어떻게, 왜?
우리는 늘 각자가 배운 새로운 개선 포인트들, 새로운 아키텍처, 새로운 기술 등을 구식 기술들이 넘치는 회사 프로젝트에 적용하고 싶어한다.
하지만 시간, 비용 등 주어진 자원은 한정적이기 때문에 현재의 상황에서 최소한의 비용으로 문제들을 해결해야 한다. 다만, 여기서 또 현재만을 고려한다면 미래의 자원을 끌어다 쓰는 꼴이 되기 때문에 적절히 미래 자원을 고려한 시스템을 설계해야 한다.
그러면 도대체 왜?
왜 주어진 환경에 맞춰서 설계를 해야 하고 구식 기술, 프레임워크를 사용할 수밖에 없는가?
물론 돈과 시간이 무한히 주어진다면 초기부터 아주 완벽한 시스템을 설계하고 서비스를 구현할 수 있겠지만,
우리는 이익집단인 회사에 소속된 소속원이기 때문에 그러한 자원을 내가 원하는만큼 지원받을 수 없다.
물론, 개인 프로젝트라면 회사보다는 조금 더 시간적으로 자유롭겠지만 우리는 한 회사의 구성원이기 때문에 주어진 환경에서 최적의 솔루션을 도출해내야 한다.
시간적 자원을 줄이기 위한 방법들
(package) monorepo 도입
발표자의 회사에선 GraphQL 을 사용 중이다.
GraphQL 전체를 앱에 넣기엔 크기가 너무 컸기에 패키지화 하여 관리했다.
하지만, 작은 변경점 하나가 생길 때마다 반복되는 작업(PR 생성, merge, 변경점 적용, …)들이 너무 많았고 이를 쉽고 빠르게 통합 관리하고자 monorepo 구조를 택하게 되었다고 했다.
도입 후에 가장 크게 느낀 변화 중 하나는,
패키지 내의 코드를 일부 수정해도 패키지 버전을 올릴 필요 없이 앱에 바로 반영된다는 점이 좋았다고 했다.
그것을 간편하게 해주는 패키지가 바로 pub.dev 의 melos 라는 패키지다.
(architecture) 레이어드 아키텍처 + MVVM
클린 아키텍처 기반 레이어드 아키텍처를 채택했고, feature first 로 구성하기로 했다.
그리고 presentation 은 MVVM 을 채택하게 되었다고 했다.
예시
/features
/login // 로그인 기능 전체
/presentation // 화면 관련 (MVVM ViewModel, View, Controller, Service)
/view // 로그인 화면을 그리는 Widget (ex. 로그인 폼, 스크린)
- login_screen.dart
- login_form.dart
/viewmodel // 로그인 화면 상태 및 이벤트 관리
- login_view_model.dart
/controller // 로그인 Feature 내 데이터 흐름/제어 담당
- login_controller.dart
/service // 로그인 관련 전역/공유 서비스
- login_service.dart
/application // 로그인 UseCase 정의 (비즈니스 로직)
- login_use_case.dart
/domain // 로그인 핵심 도메인 객체 및 Repository Interface
- login_entity.dart
- login_repository.dart
/infrastructure // 로그인 실제 통신, DB 저장 구현
- login_repository_impl.dart
/user_profile // 사용자 프로필 기능 전체
/presentation // 화면 관련 (MVVM ViewModel, View, Controller, Service)
/view // 프로필 화면을 그리는 Widget
- user_profile_screen.dart
/viewmodel // 프로필 화면 상태 및 이벤트 관리
- user_profile_view_model.dart
/controller // 프로필 Feature 내 데이터 흐름/제어 담당
- user_profile_controller.dart
/service // 프로필 관련 전역/공유 서비스
- user_profile_service.dart
/application // 프로필 UseCase 정의 (비즈니스 로직)
- user_profile_use_case.dart
/domain // 프로필 핵심 도메인 객체 및 Repository Interface
- user_profile_entity.dart
- user_profile_repository.dart
/infrastructure // 프로필 실제 통신, DB 저장 구현
- user_profile_repository_impl.dart
기타 자동화
- gihub action dispatch workflow
- MCP
- AI code review
'취미 > 컨퍼런스' 카테고리의 다른 글
| [후기] Flutter Seoul 오픈스테이지 (대구편) (0) | 2026.01.25 |
|---|---|
| [후기] Flutter Seoul 2025 컨퍼런스 (0) | 2025.10.26 |
| Remote Config를 이용하여 효율적이고 탄력적인 배너 제공하기 (남상혁 - LINE+ ABC Studio) - Flutter In Production Extended Seoul (0) | 2025.01.20 |
| 그 서비스가 운영되는 법 (가애KAAE) - Flutter In Production Extended Seoul (0) | 2025.01.16 |
| Flutter 개발에서 DevTools를 활용하는 이유 (천정환 - Flutter Seoul) - Flutter In Production Extended Seoul (2) | 2025.01.16 |