RN 앱 vs 웹모바일뷰 기능 격차 비교
개요
기업 모바일은 RN 앱(mobile/src) 과 웹 모바일뷰(frontend/src/components/user/mobile/MobileXXX.tsx) 의 이중 구조로 운영된다. 현장 피드백에 따르면 웹모바일에서는 정상 동작하는 기능이 RN 앱에서는 누락된 사례가 다수 확인되었다. 이에 12개 도메인을 웹모바일 기준으로 RN과 코드 레벨로 1:1 대조하였다. 모바일 앱 스펙 및 모바일 UI/UX 개선 작업과 함께 참고할 것. 원본 감사 문서 참조. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
근본 원인: RN 이식이 웹모바일보다 후속으로 진행되면서 최근·핵심 기능이 미반영되었다. 특히 출퇴근 인증방식(QR·IP) 과 휴가 촉진 응답이 RN에 통째로 빠져 실사용을 직접 차단한다.
종합 현황
| 도메인 | 판정 | 누락 건수 | 부분 구현 | 최고 심각도 |
|---|---|---|---|---|
| 급여(payroll) | ✅ OK | 0 | 0 | — |
| 대시보드(홈) | ⚠️ GAPS | 4 | 4 | 🔴 HIGH |
| 출퇴근(attendance) | ⚠️ GAPS | 4 | 3 | 🔴 HIGH |
| 휴가(vacation) | ⚠️ GAPS | 4 | 0 | 🔴 HIGH |
| 조직도(directory) | ⚠️ GAPS | 2 | 1 | 🔴 HIGH |
| 프로필/내정보(profile) | ⚠️ GAPS | 3 | 1 | 🔴 HIGH |
| 신청서/서류(applications) | ⚠️ GAPS | 1 | 3 | 🟠 MEDIUM |
| 결재(approval) | ⚠️ GAPS | 2 | 3 | 🟠 MEDIUM |
| 메시지(messages) | ⚠️ GAPS | 1 | 2 | 🟡 LOW |
| 공지(notices) | ⚠️ GAPS | 0 | 1 | 🟡 LOW |
| 연장근로(overtime) | ⚠️ GAPS | 0 | 1 | 🟡 LOW |
| 근무표/일정(schedule) | ⚠️ GAPS | 1 | 0 | 🟡 LOW |
🔴 HIGH — 실사용 차단 (최우선 처리)
1. 출퇴근 QR·IP 인증방식 — RN 완전 미구현
GPS 출퇴근 스펙 참조.
RN CheckInSheet.tsx:161은 check_in_method:'GPS'만 하드코딩되어 있어 QR 스캔 및 사내망 IP 출퇴근 경로가 전무하다. 웹모바일은 GPS / QR / IP 세 가지 방식을 모두 지원한다. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
| 항목 | 웹모바일 | RN 앱 |
|---|---|---|
| QR 스캔 출퇴근 | CheckInLocationSheet.tsx:584-591,858 (QrScanModal→viaQr+qr_token) | ❌ 미구현 |
| IP(사내망) 출퇴근 | CheckInLocationSheet.tsx:592-596 (handleIpConfirm→viaIp), 배너 :478-482 | ❌ 미구현 |
| 인증방식 선택 드롭다운 + 마지막 방식 기억 | CheckInLocationSheet.tsx:799-839 | ❌ 미구현 |
영향: QR 전용 또는 IP 전용 근무지에 배치된 직원은 RN 앱으로 출퇴근 자체가 불가능하다.
2. 휴가 연차촉진 응답 — RN 완전 미구현
연차촉진 스펙 참조. 웹모바일 MobileVacation.tsx에는 근로기준법 61조 촉진 응답 기능이 완비되어 있으나 RN vacation 모듈에는 관련 구현이 전혀 없다. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
| 항목 | 웹모바일 위치 | RN 앱 |
|---|---|---|
| 촉진 통보 배너 (미응답 N건) | MobileVacation.tsx:208-259, leaveApi.myPromotionNotices() L165 | ❌ API 엔드포인트 없음 |
| 1차 응답 (사용 계획 제출+서명) | PromoResponseSheet round=1 L795-808, 날짜입력 L859-870 | ❌ 미구현 |
| 2차 응답 (회사 지정 사용일 확인서명) | round=2 L809-818, L871-880, 배너 '확인 서명' L251 | ❌ 미구현 |
| 촉진 응답 내역 섹션 | MobileVacation.tsx:396-434 | ❌ 미구현 |
영향: 연차촉진 대상 직원이 RN 앱으로 법정 응답 기한을 지킬 수 없다.
3. 조직도 부서 칩 필터 — RN 미구현
웹모바일 MobileDirectory.tsx:20-23,70-90은 distinct 부서 칩으로 직원을 부서별 필터링한다. RN DirectoryScreen.tsx는 서버 페이지네이션을 이유로 이 필터를 의도적으로 제거(주석 14-16)하였고, 검색도 이름·이메일만 지원하여 부서명·직책 검색이 불가하다. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
추가로 임직원 상세 화면의 '메시지 보내기'(MobileDirectory.tsx:225-232 → /user/messages?new=1) 기능도 RN에 없다.
4. 프로필 필수서류 제출·조회 — RN 완전 미구현
웹모바일 MobileProfile.tsx:376-505는 '필수서류' 아코디언에서 getMyRequiredDocuments 목록, submission_type별 UPLOAD(파일)/PASTE(내용)/SIGN(작성) 처리, 재제출·취소, 상태 배지를 제공한다. RN ProfileScreen.tsx:242-265는 PC 안내 화면만 표시한다. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)
🟠 MEDIUM — 보조·완결성
| 항목 | 웹모바일 | RN 앱 현황 |
|---|---|---|
| 결재 '전체' 통합탭 (근태+서류 날짜순 합본) | MobileApprovalList.tsx:123,208 | 근태/서류 2탭만 |
| 결재 서류 본문 리치 렌더 | TemplatePreview 양식 레이아웃 :1099-1142 | 하드코딩 ~15개 라벨 key-value 표 (logic.ts:149-179) — 커스텀 폼은 raw key 노출 |
| 신청서 서명/도장 입력 | TemplatePreview 서명 캔버스 (TemplatePreview.tsx:851) | 'PC에서 작성' 안내만 (SubmitSheet.tsx:550-556) |
| 신청서 리치 붙여넣기(PASTE) | 표·서식 유지 (MobileFormSubmitSheet.tsx:289-298) | plain 텍스트만 (logic.ts:203-209) — 서식·표 유실 |
| 신청서 내역 상세 리치 렌더 | TemplatePreview readonly (MobileApplicationsHistory.tsx:236-255) | 15개 라벨맵 key-value (HistoryScreen.tsx:375-394) |
| 프로필 서류함(계약서/보관함/제증명서) | MobileProfile.tsx:507-576 | ❌ 미구현 |
| 프로필 자격증·면허 목록 + 만료/임박 배지 | MobileProfile.tsx:330-373 | ❌ 미구현 |
| 프로필 계약 게이트 배너 상태별 구분 | hard/hard_pending MobileProfile.tsx:208-225 | 단일 카드로 축소, PC 이탈 |
| 대시보드 허용시간 밖(EARLY/LATE) 폴백 | MobileDashboard.tsx:286-288,356-358 | 시간 위반 분기 없어 에러문구만 |
| 대시보드 계약 미서명 '날인하러가기' 액션 | MobileDashboard.tsx:274-279 | 토스트에 액션 버튼 미지원 |
| 출퇴근 폴백 요청 시 GPS 주소(역지오코딩) 첨부 | CheckInLocationSheet.tsx:436-464 | 좌표만 전송 — 결재자에게 주소 미노출 |
🟡 LOW — 소소한 격차
- 공지 본문 하이퍼링크: 웹은
<a>렌더, RNlogic.ts:127이 인라인 태그 제거 → href 소실, 링크 탭 불가. - 연장근로 사유 maxLength: RN
RequestSheet.tsx:470→ 500자 제한 vs 웹 무제한. - 근무표 개인화 헤드라인: 웹만 '{이름}님의 이번 주 근무' (
MobileMySchedule.tsx:302-307), RN은 고정 타이틀. - 출퇴근 개인화 헤더 H1, GPS 지속추적/수동 재조회: RN은 셸 타이틀·1회 측정.
- 대시보드: 위치권한 사전경고 배너, 위치 수동 재조회, 최근 공지 항목→상세 딥링크 — RN 축소.
- 메시지: 새 대화 picker 부서 계층 트리(웹) vs 평면 칩(RN), 프로필 사진(웹) vs 이니셜(RN).
- 결재 상세: '~님 결재중' 대기 결재자 표시(웹
:757-760,1333-1337) — RN 상세 시트 미표시(목록 카드엔 있음).
착수 권장 순서
| 우선순위 | 항목 | 핵심 작업 |
|---|---|---|
| 1 | 출퇴근 QR·IP (RN) | CheckInSheet에 인증방식 선택 + QR 스캔(카메라)·IP 경로 추가. auth_methods·allowed_ips 소비. |
| 2 | 휴가 촉진 응답 (RN) | vacation/api.ts에 promotion 래퍼 2개 + 배너 + 응답 시트(1차/2차) + 내역. (웹모바일 MobileVacation 이식.) |
| 3 | 프로필 필수서류·서류함·자격증 (RN) | UPLOAD·PASTE 제출, 계약서/서류/제증명서 조회, 자격증 목록. |
| 4 | 신청서 서명·붙여넣기·리치 렌더 (RN) | TemplatePreview 엔진 이관 규모 검토 후 진행. |
| 5 | 결재 통합탭 / 조직도 필터·메시지 / 대시보드 폴백·계약 액션 | 완결성 보완. |
참고: 급여(payroll)는 이의조회 이식으로 웹모바일과 동등 수준을 이미 달성하였으므로 본 감사 대상에서 제외. RN 앱 ↔ 웹모바일뷰 기능 격차 감사 (0729)