인턴십 기간 동안 EmotiFlow(감정 일기 앱)와 Expressway Patrol(고속도로 순찰 앱) 두 개의 프로젝트를 통해 개인 프로젝트부터 실무 프로젝트까지 다양한 개발 경험을 쌓았습니다. 각각 다른 도메인과 요구사항을 가진 프로젝트를 통해 Flutter 생태계의 깊이와 실무 개발의 복잡성을 체감할 수 있었습니다.
기술 스택: Flutter(Dart), Firebase, Riverpod, Provider, GoRouter, Material3, Google Gemini API
프로젝트 특성: 개인 창작 프로젝트로 AI와의 협업을 통한 창의적 앱 개발
도메인: 감정 관리 및 일기 작성
개발 환경: 자율적이고 실험적인 환경, 빠른 프로토타이핑 중심
주요 도전과제:
핵심 성과:
학습 포인트: AI와의 협업, 창의적 문제 해결, 개인 프로젝트의 완성도 높이기
프로젝트 특성: 실무 산업용 앱으로 안정성과 신뢰성이 최우선
도메인: 고속도로 순찰차 운전자용 업무 앱 (B2B 전문 사용자 대상)
개발 환경: 체계적인 요구사항 분석, 단계적 개발, 품질 중심
주요 도전과제:
핵심 성과:
학습 포인트: 실무 개발 프로세스, 산업용 앱의 특성 이해, 체계적인 아키텍처 설계
| 구분 | EmotiFlow | Expressway Patrol |
|---|---|---|
| 개발 철학 | 창의성과 실험성 우선 | 안정성과 신뢰성 우선 |
| 사용자 | 일반 개인 사용자 | 전문 업무 사용자 |
| 개발 속도 | 빠른 프로토타이핑 | 체계적인 단계별 개발 |
| 기술 선택 | 최신 기술 실험 | 검증된 안정적 기술 |
| 문서화 | 핵심 기능 중심 | 상세한 요구사항 문서화 |
1단계 (EmotiFlow): 개인 프로젝트로 기술적 기반 다지기
2단계 (Expressway Patrol): 실무 프로젝트로 전문성 확장
EmotiFlow에서의 학습: Provider 패턴의 한계를 체감하고 Riverpod으로 전환하여 복잡한 상태 전이를 해결했습니다.
Expressway Patrol에서의 적용: Riverpod과 Provider를 하이브리드로 사용하여 전역 상태와 페이지 상태를 명확히 분리했습니다.
기술적 진화: EmotiFlow에서는 Riverpod 중심의 상태 관리를, Expressway Patrol에서는 Riverpod과 Provider를 하이브리드로 사용하여 프로젝트 특성에 맞는 최적의 상태 관리 전략을 선택했습니다.
학습: 프로젝트 특성에 맞는 상태 관리 전략 선택의 중요성을 체감했습니다.
EmotiFlow에서의 도전: Firestore 스트림과 로컬 상태(검색/필터/삭제 모드) 충돌로 사용자 경험이 불안정했습니다.
Expressway Patrol에서의 해결: 중앙화된 서비스와 Stream 기반 상태 동기화로 실시간 제어 시스템을 안정적으로 구현했습니다.
기술적 구현: EmotiFlow에서는 상태 분리 패턴으로 충돌을 해결했고, Expressway Patrol에서는 Stream 기반 중앙화된 서비스로 실시간 동기화를 구현했습니다.
학습: "빠르게 보이되, 헷갈리지 않게"가 실시간 인터페이스의 핵심 원칙이라는 것을 두 프로젝트를 통해 체감했습니다.
EmotiFlow에서의 경험: Gemini API 응답의 일관성 부족과 예외 상황 처리를 통해 AI 서비스 연동의 복잡성을 경험했습니다.
Expressway Patrol에서의 적용: 더미데이터 기반 완전한 인터페이스 설계로 API 연동 준비를 체계적으로 진행했습니다.
기술적 구현: EmotiFlow에서는 프롬프트 엔지니어링과 폴백 시스템으로 AI 서비스를 안정화했고, Expressway Patrol에서는 더미데이터 기반 완전한 인터페이스 설계로 API 연동 준비를 완료했습니다.
학습: 외부 서비스 연동 시 "폴백 시스템 우선"과 "단계적 구현"의 중요성을 두 프로젝트를 통해 체감했습니다.
EmotiFlow에서의 기반: Material3 디자인 시스템을 기반으로 다크/라이트 테마와 공통 컴포넌트 라이브러리를 구축했습니다.
Expressway Patrol에서의 확장: 기능별 색상 테마(경광등: 빨간색, 소리제어: 녹색)와 산업용 앱 특성을 고려한 접근성을 추가했습니다.
기술적 구현: EmotiFlow에서 구축한 Material3 기반 테마 시스템을 Expressway Patrol에서 기능별 색상 테마로 확장하여, 각 프로젝트의 특성에 맞는 일관된 디자인 시스템을 구축했습니다.
학습: 작은 일관성이 누적되면 학습 비용이 줄고, 새로운 화면을 만드는 속도가 빨라진다는 것을 두 프로젝트를 통해 체감했습니다.
상황: EmotiFlow에서 복잡한 상태 전이를 경험한 후, Expressway Patrol에서 더 복잡한 실시간 제어 시스템을 구현해야 했습니다.
원인 분석: 각 프로젝트마다 다른 상태 관리 요구사항과 복잡도가 있었습니다.
해결 과정:
1. EmotiFlow에서 Riverpod 전환 경험을 바탕으로 하이브리드 접근법 도입
2. Expressway Patrol에서 중앙화된 서비스 패턴으로 상태 동기화 문제 해결
3. 각 프로젝트 특성에 맞는 상태 관리 전략 수립
결과: 두 프로젝트 모두에서 안정적인 상태 관리가 가능해졌고, 코드 가독성과 유지보수성이 크게 향상되었습니다.
상황: EmotiFlow에서 Firestore 스트림 충돌을 해결한 경험을 바탕으로, Expressway Patrol에서 더 복잡한 실시간 제어를 구현해야 했습니다.
원인 분석: 실시간 데이터의 특성상 상태 동기화와 성능 최적화가 핵심 과제였습니다.
해결 과정:
1. EmotiFlow에서 학습한 상태 분리 패턴을 Expressway Patrol에 적용
2. Stream 기반 중앙화된 상태 관리로 실시간 동기화 구현
3. 불필요한 리빌드 방지와 메모리 최적화
결과: 두 프로젝트 모두에서 실시간 데이터 처리가 안정적으로 동작하며, 사용자 경험이 크게 개선되었습니다.
상황: 개인 프로젝트(EmotiFlow)와 실무 프로젝트(Expressway Patrol)의 요구사항과 제약사항이 달랐습니다.
원인 분석: 각 프로젝트의 도메인, 사용자, 환경이 다르므로 아키텍처 접근법도 달라야 했습니다.
해결 과정:
1. EmotiFlow: 빠른 프로토타이핑과 AI 협업에 최적화된 구조
2. Expressway Patrol: 안정성과 확장성을 고려한 산업용 앱 구조
3. 각 프로젝트의 특성을 반영한 기술 스택과 패턴 선택
결과: 각 프로젝트의 목표와 제약사항에 맞는 최적의 아키텍처를 구축할 수 있었습니다.
자율적인 환경에서 개인 프로젝트를 통해 창의성을 발휘하고, 실무 프로젝트를 통해 안정성과 품질을 중시하는 개발 문화에 적응했습니다. 두 프로젝트 모두에서 결과로 증명하려고 문서·커밋·데모를 자주 남겼고, 의사결정 배경을 명확히 기록했습니다. 혼자 진행했지만 혼자만 이해하는 코드를 만들지 않으려 했고, 이후 실무에 들어가면서도 같은 태도로 작업하고 있습니다.
작성자: 인턴 개발자
깃허브: 비공개로 진행됨
기간: 총 4주 (EmotiFlow 2주 + Expressway Patrol 프론트엔드 완료)