EMBA E-Members
성균관대 EMBA 원우들을 위한 커뮤니티 앱 - 원우수첩(인명부), 명함 QR 공유, 멘토링, 일정·게시판·식단을 하나로.
- Flutter
- Firebase
- iOS
- Android
마이페이지 - 학업·동호회·직장 정보를 한 곳에서 관리하고, QR 명함과 프로필을 편집한다
명함 공유 - 내 QR을 상대가 스캔하면 EMBA 앱이 열리고, 미설치 시 모바일 브라우저에 명함이 표시된다
식단 - 주차별로 학교 식당 메뉴를 사진과 함께 본다
Setup
- Problem
EMBA 원우 네트워크는 그 자체가 자산인데, 정작 그 자산이 카톡방·엑셀 명단·종이 명함·학교 공지 메일로 흩어져 있다. "저분이 몇 기 누구였더라", "그 공지 어디 있더라", "오늘 학식 뭐지"가 매번 흩어진 채널을 뒤지는 일이 된다. 원우들에게 필요한 건 화려한 기능이 아니라 "한 곳에서 사람을 찾고, 명함을 주고받고, 일정과 소식을 놓치지 않는" 기본기다.
- Context
성균관대 EMBA의 공식 원우 커뮤니티 앱. PM 1명·개발 2명의 작은 팀으로 만들었고, 제임스는 PM이자 개발자로 제품 범위·우선순위를 정의하고 인수한 Flutter 코드베이스를 개발·유지보수하며 iOS·Android 양 스토어에 출시·업데이트했다 (현재 v1.1.5, 빌드 21). 원우 한 명이 끝까지 쓸 수 있는 기본기 - 사람 찾기, 명함 교환, 일정·공지 - 를 먼저 단단하게 만드는 데 집중했다.
- Users
성균관대 EMBA 재학·졸업 원우, 그리고 기수 운영진.
- Hypothesis
흩어진 채널 대신 한 앱에서 사람·명함·일정·소식을 처리하게 하면, EMBA 네트워크가 "필요할 때 실제로 닿는" 자산이 된다.
Build
- What I did
- PM으로 기능 범위·우선순위를 정의하고 iOS·Android 양 스토어 출시·업데이트를 운영
- 인수한 Flutter 코드베이스를 개발·유지보수 (현재 v1.1.5, 빌드 21)
- 원우수첩(인명부) - 기수·직군·이름으로 검색·필터하고, 원우 프로필을 휴대폰 연락처로 바로 저장
- 명함 QR 공유 - 상대가 스캔하면 EMBA 앱이 열리고, 미설치 시 모바일 브라우저에 명함이 표시되는 폴백
- 멘토링 - 멘토 찾기·신청과 1:1 채팅
- 일정 캘린더(학사·기수·개인 일정), 게시판·공지(첨부 PDF 뷰어 내장), 학교소식·웹진(웹뷰), 주차별 식단
- FCM 푸시 알림과 KO/EN 다국어
- Product decisions
- 기본기 우선 - 화려한 소셜 기능보다 사람 찾기·명함·일정·공지를 먼저 단단하게
- 명함은 QR + 웹 폴백 - 상대가 앱을 안 깔았어도 명함이 전달되도록, 네트워킹 자리에서 설치를 강요하지 않음
- 연락처는 휴대폰 기본 주소록으로 저장 - 앱을 떠나도 남는 자산
- iOS·Android 단일 코드베이스(Flutter) - 작은 팀이 두 플랫폼을 한 번에 유지보수하도록 비용 최소화
Outcome
- Metrics
성균관대 EMBA 원우 대상 실서비스. iOS·Android 양 스토어에 배포되어 원우들이 사용 중 (현재 v1.1.5, 빌드 21). 상세 사용 지표는 비공개.
- Result / Learning
내가 짜지 않은 코드를 인수해 다루는 일의 무게를 확인. 새 기능을 얹는 건 쉽지만, 인수 코드 위에서는 "이걸 고치면 어디가 같이 깨지는지"가 안 보이는 게 진짜 비용이었다. 그래서 기능 요청을 받기 전에 핵심 흐름(로그인·푸시·원우 검색)의 경계부터 파악하는 게 먼저라는 결론. 다음 라운드는 그 경계에 회귀 테스트를 까는 것부터.
- Retrospective
- 인수 직후 기능 요청부터 받기 시작했는데, 코드의 경계를 먼저 지도화한 뒤 받았어야 했다. 모르는 코드 위에 기능을 얹으면 회귀가 어디서 날지 예측이 안 된다.
- 자동화 테스트가 거의 없는 상태로 인수했다. 핵심 경로부터 회귀 테스트를 깔아두는 걸 더 일찍 했어야 한다.
- Tech stack
- Flutter
- Dart
- Firebase Cloud Messaging
- REST API (dio)
- Hive
- get_it
- easy_localization
- WebView
- iOS
- Android