Work Application
사내 통합 앱
개요
- 사내 WORK 모바일 앱으로 출퇴근, 캔틴, 전자결재, 게시판, 채팅, 맛집, QR, 프로모션, 푸시 알림 등 일상 업무 기능을 하나의 앱으로 통합
- Cloudflare Workers 기반으로 동작하며, 채팅과 캔틴 등 실시간 영역은 WebSocket으로 같은 호스트에서 처리
주요 기능
- 로그인 Google Sign-In 기반 ID 토큰을 수신 후 자체 OAuth 2.0 access 및 refresh 토큰으로 교환하고 Secure Storage에 저장
- 보안 감지 루팅, 탈옥, 에뮬레이터, 개발자 모드, 위치 모킹 여부를 초기 단계에서 검사하여 차단
- 출퇴근 위치 기반 체크인, 주소 변환, NTP 시간 동기화를 통한 기기 시계 위변조 방지
- 캔틴 주문 생성 및 취소, 대기열 실시간 구독, 호출 알림 처리
- 결재 템플릿 기반 결재 생성, 카메라 첨부, 결재 라인 지정, 댓글 기능
- 게시판 및 공지 카테고리 및 라벨 기반 관리, 작성 및 수정, 좋아요, 댓글, 이미지 첨부
- 사내 채팅 1:1 및 그룹 채팅, 실시간 메시지 수신, 읽음 처리, 미읽음 카운트 표시
- 맛집 네이버 지도 기반 맛집 등록 및 지도 및 리스트 모드 전환
- QR 프로모션 QR 발급 및 스캔을 통한 프로모션 및 정보 조회
- 푸시 포그라운드 및 백그라운드 처리, 라우트 기반 화면 전환, 앱 뱃지 동기화
기술 스택
- Flutter 기반 iOS 및 Android 동시 개발 구조
- 상태 관리는 Provider, 보안 저장은 flutter_secure_storage를 사용
- 실시간 통신은 web_socket_channel로 직접 연결하며, 푸시는 Firebase Messaging, flutter_local_notifications, app_badge_plus를 조합해 처리
- 지도는 flutter_naver_map, 위치 및 주소 변환은 geolocator 및 geocoding, 카메라 및 QR 스캔은 camera 및 mobile_scanner를 사용
- PDF 출력은 pdf 및 printing, 폰트는 Pretendard Variable을 번들링하여 사용
설계 노트
- 단일 토큰 갱신 게이트 구조로 access token 재발급을 직렬화하여 중복 요청 방지
- 백그라운드 핸들러를 entry-point 함수로 분리하여 앱 종료 상태에서도 푸시 및 뱃지 업데이트 유지
- 서버 주도 차단 플래그를 통해 API 응답 기반 즉시 차단 화면 전환
- WebSocket 이벤트를 broadcast Stream으로 구성하여 화면 간 재구독 구조 단순화
- NTP 기반 시간 동기화를 통해 출퇴근 및 캔틴과 같은 시간 의존 기능의 신뢰성 확보