From 0e26060de72de91d44a72b929935be6b4e4e82ef Mon Sep 17 00:00:00 2001 From: Codex Date: Thu, 2 Jul 2026 10:30:29 +0900 Subject: [PATCH] Initialize tdc114plus project docs --- .gitignore | 35 ++ README.md | 60 +++ ...s-development-decision-brief-2026-07-01.md | 351 ++++++++++++++++++ ...pment-environment-setup-plan-2026-07-02.md | 164 ++++++++ scripts/bootstrap.sh | 18 + scripts/create-flutter-app.sh | 21 ++ scripts/test.sh | 14 + 7 files changed, 663 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 docs/tdc114plus-development-decision-brief-2026-07-01.md create mode 100644 docs/tdc114plus-development-environment-setup-plan-2026-07-02.md create mode 100755 scripts/bootstrap.sh create mode 100755 scripts/create-flutter-app.sh create mode 100755 scripts/test.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d326915 --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# Flutter/Dart +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +build/ +coverage/ + +# Android +*.jks +*.keystore +android/key.properties + +# iOS/macOS +ios/Flutter/Generated.xcconfig +ios/Flutter/flutter_export_environment.sh +ios/Pods/ +ios/.symlinks/ +ios/Runner.xcworkspace/xcuserdata/ +ios/Runner.xcodeproj/xcuserdata/ +*.xcuserstate + +# IDE +.idea/ +.vscode/ +*.iml + +# OS +.DS_Store +Thumbs.db + +# Local env +.env +.env.* +!.env.example diff --git a/README.md b/README.md new file mode 100644 index 0000000..60e8930 --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +# tdc114plus + +`tdc114plus`는 Baron SSO 등록 사용자를 대상으로 하는 사내 직원검색/조직도 모바일 앱이다. + +## 1차 개발 범위 + +- Baron SSO 전화번호 로그인 +- Baron SSO 등록 사용자만 앱 사용 허용 +- Baron SSO `orgFront` 기반 개인/조직 정보 연계 +- 직원검색 +- 전화번호검색 +- 가족사 필터 +- 조직도 +- 직원목록 +- 전화걸기 +- 문자보내기 +- 즐겨찾기 + +## 1차 보류 기능 + +- 공지사항 +- 전자결재 +- 수신전화식별 +- 수신팝업 + +## 개발 방향 + +- Flutter 기반 Android/iOS 공통 앱으로 구성한다. +- Baron Safe 앱에서 사용한 Flutter 중심 저장소 구성을 참고한다. +- 앱 자체 회원가입은 제공하지 않는다. +- 개인정보와 조직정보는 Baron SSO 및 `orgFront` 데이터를 기준으로 연계한다. + +## 저장소 구조 + +```text +tdc114plus/ + app/ # Flutter 앱. Flutter CLI 설치 후 생성 + docs/ # 기획/정책/개발환경 문서 + scripts/ # 개발, 테스트, 빌드 보조 스크립트 +``` + +## 초기 설정 순서 + +현재 환경에 Flutter CLI가 없으면 먼저 Flutter SDK를 설치해야 한다. + +```bash +flutter --version +``` + +Flutter CLI가 준비되면 다음 순서로 앱 골격을 생성한다. + +```bash +./scripts/create-flutter-app.sh +./scripts/bootstrap.sh +``` + +## 주요 문서 + +- [신규 앱 개발 판단 문서](docs/tdc114plus-development-decision-brief-2026-07-01.md) +- [개발환경 구성 작업순서](docs/tdc114plus-development-environment-setup-plan-2026-07-02.md) diff --git a/docs/tdc114plus-development-decision-brief-2026-07-01.md b/docs/tdc114plus-development-decision-brief-2026-07-01.md new file mode 100644 index 0000000..4ecb6ea --- /dev/null +++ b/docs/tdc114plus-development-decision-brief-2026-07-01.md @@ -0,0 +1,351 @@ +# tdc114plus(가칭) 신규 앱 개발 판단 문서 + +작성일: 2026-07-01 +회의 결정 반영일: 2026-07-02 + +목적: 기존 바론114 앱을 분석한 결과를 바탕으로, 신규 `tdc114plus` 앱의 개발 방식, 지원 범위, 기능 범위, Baron SSO 데이터 활용 방향을 결정하기 위한 검토용 문서. + +## 0. 2026-07-02 업무회의 결정사항 + +팀장 목표는 최대 400시간 내 개발 완료이나, 실제 추진 목표는 가능한 한 더 짧은 기간 내에 1차 기본 기능을 완성하는 것으로 둔다. + +| 항목 | 결정 | +| --- | --- | +| 로그인/가입 | 앱 자체 회원가입은 제공하지 않는다. Baron SSO에 이미 등록된 사용자만 사용 가능하다. | +| 앱 실행 로그인 | 사용자는 앱 실행 시 Baron SSO 로그인 방식으로 진입한다. 로그인창에 전화번호 입력 후 로그인 버튼을 누르면 Baron SSO 서버 등록 인원 여부를 확인하고, 등록 인원이면 앱 사용을 허용한다. | +| 데이터 연계 | 신규 앱의 개인 정보와 조직 정보는 Baron SSO의 `orgFront` 데이터와 연계하여 추출한다. | +| 1차 제외 기능 | 기존 앱 기능 중 공지사항과 전자결재는 개발 중간 단계까지 구현을 보류한다. | +| 플랫폼 특화 제외 | 수신전화식별과 수신팝업은 1차 범위에서 보류한다. iOS에서 동일 방식 지원이 어렵고, 우선 기본 기능에 집중한다. | +| 1차 기본 기능 | 직원검색, 전화번호검색, 가족사 필터, 조직도, 직원목록, 전화걸기, 문자보내기, 즐겨찾기 | + +## 1. 결론 요약 + +회의 결정 기준의 권장안은 다음과 같다. + +> **Flutter 기반 Android/iOS 공통 앱 + Baron SSO orgFront 연계 전화번호부/조직도 MVP** + +즉, 기본 앱은 Flutter로 Android/iOS를 함께 개발하고, 1차 개발은 직원/전화번호 검색, 가족사 필터, 조직도, 직원목록, 전화/문자, 즐겨찾기에 집중한다. 수신 전화번호 식별과 화면 위 팝업처럼 플랫폼 제약이 큰 기능은 1차 범위에서 보류한다. + +이유는 다음과 같다. + +| 판단 항목 | 결론 | +|-------|-----| +| iPhone 지원 | 필요하므로 Flutter 채택이 적합 | +| 기존 114 대체 | 전화번호 검색, 조직도, 직원목록, 전화/문자, 즐겨찾기를 1차 기본 기능으로 구현 | +| Android 특화 기능 | 수신 전화번호 식별, 화면 위 팝업은 1차 보류 | +| iOS 제약 | Android처럼 수신 전화를 실시간 감지하고 앱 오버레이를 띄우는 기능은 동일 구현 어려움 | +| 데이터 방향 | Baron SSO `orgFront` 데이터를 기준으로 개인/조직 정보를 추출 | + +## 2. 현재 바론114 기능과 신규 앱 적용검토 + +현재 `tdc114.apk`는 Flutter 앱이 아니라 Android 네이티브 앱이다. 다만 실제 주요 화면은 WebView 기반으로 보인다. + +| 현재 기능 | 기존 동작 방식 | 결정 포인트 | 신규 앱 적용검토 | +|-------|----------|--------|-----------| +| TDC 114 메인 | WebView 화면 | Flutter 홈 화면으로 새로 구성할지 결정 | 재구성 | +| 직원/전화번호 검색 | WebView에서 이름/전화번호 검색 | 신규 앱의 핵심 기능으로 포함할지 결정 | 기본 반영 | +| 가족사 필터 | 전체, 한맥, 삼안, 장헌, PTC, 한라 등 필터 | 가족사 범위와 표시 기준 결정 | 기본 반영 | +| 조직도 탐색 | 회사 > 부서 > 직원 목록 | SSO 조직 데이터 기준으로 재구성할지 결정 | 기본 반영 | +| 직원 목록 | 사진, 부서, 이름, 직위, 전화/문자 버튼 | 표시 항목과 개인정보 마스킹 기준 결정 | 기본 반영 | +| 전화 걸기 | 직원 카드 전화 버튼 | 기본 전화 앱 호출 방식 결정 | 기본 반영 | +| 문자 보내기 | 직원 카드 메시지 버튼 | 기본 문자 앱 호출 방식 결정 | 기본 반영 | +| 즐겨찾기 | 탭 존재 | 로컬 저장 또는 서버 동기화 여부 결정 | 개선 반영 | +| 공지사항 | WebView 목록, 제목 검색, 첨부 표시 | 1차 구현 보류 | 보류 | +| 전자결재 | ERP 모바일 페이지 링크 | 1차 구현 보류 | 보류 | +| 메일/인트라넷 | 상단 바로가기 | SSO 포털 바로가기 방식 결정 | 후순위 검토 | +| 권한 안내 | Android 권한 요청 화면 | 기능 사용 시점별 권한 요청 UX 결정 | 재설계 | +| 수신 전화번호 식별 | Android BroadcastReceiver/API 조회 추정 | 1차 구현 보류 | 보류 | +| 수신 팝업 | Android 오버레이 카드 | 1차 구현 보류 | 보류 | +| 서비스 실행 스위치 | 수신전화 정보 서비스 ON/OFF | 수신 전화 기능 보류에 따라 1차 제외 | 보류 | + +현재 기능 중 직원 검색, 전화번호 검색, 가족사 필터, 조직도, 직원목록, 전화/문자, 즐겨찾기는 Android/iOS 공통 앱으로 우선 전환한다. 공지사항, 전자결재, 수신 전화번호 식별, 화면 위 팝업은 개발 중간 단계까지 보류한다. + +## 3. 현재 바론114 개발 스펙 요약 + +현재 `tdc114.apk`는 Android 전용 네이티브 앱이며, 주요 업무 화면은 WebView로 서버 모바일 페이지를 표시하는 구조다. + +| 항목 | 현재 앱 분석 결과 | +|-----|------------| +| 앱 플랫폼 | Android 전용 | +| 개발 방식 | Android 네이티브 앱 + WebView 하이브리드 구조 | +| 주요 언어/기반 | Kotlin/Java 계열 Android 앱 | +| UI 구조 | 메인 화면은 전체 화면 WebView. 권한 화면/수신 팝업은 네이티브 화면 | +| 주요 라이브러리 | AndroidX, AppCompat, Material Components, ViewBinding, Volley, TedPermission | +| 서버 통신 | `cloud.hanmaceng.co.kr`, `erp.baroncs.co.kr` 등 HTTP 기반 서버/API 연동 | +| 주요 기능 구현 | 전화번호 검색/조직도/공지/전자결재는 WebView 중심 | +| Android 네이티브 기능 | 전화 상태 권한, 전화번호 읽기, 수신 전화 감지, 화면 위 팝업, 서비스 실행 | +| iOS 지원 | 현재 앱은 iOS 지원 구조가 아님 | +| Flutter 여부 | Flutter 산출물 없음. Flutter 앱이 아님 | + +정리하면, 현재 바론114는 `Android 전용 네이티브 껍데기 + WebView 전화번호부/그룹웨어 화면 + Android 전화 수신 부가 기능`으로 볼 수 있다. + +## 4. 신규앱 개발 방식 선택 + +| 선택지 | 설명 | 장점 | 한계 | 판단 | +|-----|-----|-----|-----|-----| +| Android 네이티브 | Kotlin/Java 기반 Android 전용 개발 | 수신 전화 감지, 오버레이, 백그라운드 서비스 구현에 유리 | iPhone 지원 불가. 별도 iOS 앱 개발 필요 | 비권장 | +| iOS/Android 각각 네이티브 | Android와 iOS를 각각 별도 개발 | 각 플랫폼 최적화 가능 | 개발/유지보수 비용 큼. 기능 차이 관리 어려움 | 대규모 예산 시 검토 | +| WebView 하이브리드 | 기존 114처럼 모바일 웹을 앱에 표시 | 빠른 개발 가능. 기존 구조와 유사 | UX/성능/오프라인/푸시/권한/보안 한계 | 단기 임시안 | +| PWA | 웹앱으로 제공 | 설치 부담 낮음. 포털형 기능에 적합 | 전화/문자/푸시/수신전화/오버레이 등 앱 기능 제한 | 보조 채널로 적합 | +| Flutter | 하나의 코드베이스로 Android/iOS 개발 | iPhone 지원, UI 일관성, 개발 효율 좋음 | 수신전화/오버레이는 플랫폼별 네이티브 연동 필요 | 권장 | + +### 추천 개발 방식 + +| 항목 | 추천 | +|-----|-----| +| 기본 앱 | Flutter | +| Android | Flutter + Android native plugin/platform channel | +| iOS | Flutter + iOS 가능 범위 내 native 연동 | +| 서버/API | Baron SSO 및 `orgFront` 기반 API | +| 기존 WebView 기능 | 필요 시 일부만 인앱 WebView 또는 SSO 유니버셜 링크/앱 링크로 연결 | + +여기서 `SSO 유니버셜 링크/앱 링크`는 캡처 표 기준의 `유니버셜 링크 / 앱 링크`를 의미한다. `URI 스킴`보다 HTTPS 도메인 기반 연결 방식을 우선 검토한다. + +현재 전자결재/ERP 서버는 `http://` 기반으로 확인된다. 보안 사항을 논외로 하면, HTTP 기반 전자결재 페이지도 인앱 WebView 또는 외부 브라우저 방식으로는 연동 가능하다. 다만 유니버셜 링크/앱 링크는 일반적으로 HTTPS 도메인 기반으로 적용하므로, 이 방식을 채택하려면 전자결재/ERP 서버의 HTTPS 전환 또는 Baron SSO의 HTTPS 진입 URL이 필요하다. + +| 전자결재 연결 방식 | HTTP 사용 가능 여부 | 판단 | +|------------|---------------|-----| +| 인앱 WebView | 가능 | 1차 연동 방식으로 사용 가능 | +| 외부 브라우저 | 가능 | 가장 단순한 임시 연동 방식 | +| API 호출 | 가능 | 앱/플랫폼 설정에서 HTTP 허용 필요 | +| Android App Links | 부적합 | HTTPS 기반 도메인 검증 필요 | +| iOS Universal Links | 불가 또는 부적합 | HTTPS 및 Apple 연동 파일 필요 | + +## 5. 플랫폼별 구현 가능 범위 + +| 기능 | Android | iOS/iPhone | 결정 필요 | +|-----|---------|------------|-------| +| SSO 로그인 | 가능 | 가능 | 공통 구현 | +| 직원 검색 | 가능 | 가능 | 공통 구현 | +| 가족사/조직도 | 가능 | 가능 | 공통 구현 | +| 직원 상세 | 가능 | 가능 | 공통 구현 | +| 전화 걸기 | 가능 | 가능 | 공통 구현 | +| 문자 보내기 | 가능 | 가능 | 공통 구현 | +| 공지사항 | 가능 | 가능 | 1차 보류 | +| 전자결재/메일/인트라넷 바로가기 | 가능 | 가능 | 1차 보류 또는 후순위 검토 | +| 푸시 알림 | 가능 | 가능 | 공통 구현 가능 | +| 수신 전화번호 식별 | 가능하나 권한/OS 정책 영향 있음 | Android와 동일 방식은 어려움 | 1차 보류 | +| 화면 위 직원정보 팝업 | 가능하나 민감 권한 필요 | 일반적인 앱 오버레이 방식 불가 | 1차 보류 | +| 백그라운드 상시 서비스 | 가능하나 제한 증가 | 제한 큼 | MVP 제외 권장 | + +### iOS 수신 전화 기능 판단 + +기존 Android 114의 수신 전화 관련 기능은 `전화 수신 감지 → 전화번호 조회 → 화면 위 직원정보 팝업 표시` 흐름으로 추정된다. iOS 일반 앱은 수신 전화 이벤트와 발신번호를 실시간으로 받아 서버 조회를 수행하거나, 전화 화면 위에 자체 팝업을 표시하기 어렵다. + +| 항목 | iOS 판단 | +|-----|--------| +| Android와 동일한 실시간 번호 조회 | 불가에 가까움 | +| Android와 동일한 화면 위 직원정보 팝업 | 불가 | +| 가능한 대체안 | Call Directory Extension으로 사전 등록된 번호의 식별 라벨 표시 | +| 대체안 한계 | 실시간 서버 조회 불가, 등록된 번호만 식별, 사용자 설정 필요, 개인정보 정책 검토 필요 | +| 연락처 동기화 | 가능은 하나 개인 연락처 오염과 퇴사/변경 관리 이슈로 비권장 | +| 1차 MVP 포함 | 제외 | +| 추천 결정 | 1차 기본 기능 완료 이후 별도 검토 | + +## 6. 신규 앱 기능 선택안 + +### 6.1 로그인/회원가입 정책 + +신규 앱은 가족사 사내직원 전용이므로, 일반 회원가입 방식은 제공하지 않는다. 기본 정책은 `Baron SSO에 휴대폰 번호가 선등록된 재직자만 앱 사용 가능`으로 잡는다. 앱 실행 시 사용자는 Baron SSO 로그인창에 전화번호를 입력하고 로그인 버튼을 누른다. Baron SSO 서버 등록 인원이면 앱 사용을 허용한다. + +| 정책 항목 | 권장 | +|-------|-----| +| 사용자 등록 | Baron SSO에 휴대폰 번호 사전 등록 | +| 앱 회원가입 | 제공하지 않음 | +| 최초 인증 | 사용자가 휴대폰 번호를 직접 입력해 Baron SSO 인증 | +| 자동 전화번호 조회 | 사용하지 않음 | +| 미등록 사용자 | 앱 내 `사용 신청/계정 요청` 안내 | +| 등록 사용자 재사용 | 회의 결정 기준으로는 앱 실행 시 Baron SSO 로그인 방식 유지 | +| 예외 상황 | 퇴사, 권한 회수, 기기 해제, 장기 미사용, 앱 재설치 시 재인증/재등록 | + +#### 단말 전화번호 자동 조회 방식의 한계 + +`휴대폰 번호 기반 로그인` 자체는 현재 Baron SSO 흐름과 맞다. 다만 `앱이 폰 번호를 자동으로 가져와 Baron SSO에 보내는 방식`은 플랫폼 제약 때문에 기본 인증 방식으로 쓰기 어렵다. 따라서 번호는 앱이 자동 수집하는 것이 아니라, 사용자가 Baron SSO 로그인 화면에 직접 입력하는 방식이 적합하다. + +| 이슈 | 설명 | +|-----|-----| +| iOS 제약 | 일반 앱이 iPhone의 본인 전화번호를 안정적으로 자동 조회하는 공식 흐름을 기대하기 어렵다 | +| Android 제약 | `READ_PHONE_NUMBERS` 등 권한이 필요하고, 번호가 비어 있거나 실제 회선 번호와 다를 수 있다 | +| 듀얼심/번호 변경 | 어떤 번호를 기준으로 검증할지 애매할 수 있다 | +| 법인폰/개인폰 혼재 | SSO 등록 번호와 실제 사용 기기 번호가 다를 수 있다 | +| 개인정보/권한 부담 | 앱 시작부터 전화번호 권한을 요구하면 거부 가능성이 높다 | + +따라서 전화번호는 "앱이 자동 수집하는 인증값"이 아니라 "사용자가 직접 입력해 Baron SSO가 선등록 여부를 확인하는 로그인 식별자"로 활용하는 것이 안전하다. + +#### 추천 정책 문구 + +> tdc114plus는 가족사 사내직원 전용 앱으로, Baron SSO에 휴대폰 번호가 선등록된 재직자만 사용할 수 있다. 앱 내 일반 회원가입은 제공하지 않는다. 앱 실행 시 사용자가 Baron SSO 로그인창에 휴대폰 번호를 직접 입력하고 로그인 버튼을 누르면, Baron SSO가 선등록 사용자 여부와 재직/권한 상태를 확인한다. 등록 인원이면 앱 사용을 허용하고, 미등록 사용자는 앱 사용을 차단한다. + +### 6.2 모바일 기기 등록 기반 앱 사용 승인안 + +tdc114plus 1차 개발은 회의 결정에 따라 `전화번호 입력 기반 Baron SSO 로그인`을 기준으로 진행한다. `SSO 사용자 + 등록 모바일 기기` 방식은 푸시, 분실 대응, 자동 사용, 기기 해제가 필요해지는 후속 단계에서 검토할 수 있는 확장안으로 둔다. + +#### 권장 앱 등록 흐름 + +| 단계 | 흐름 | 설명 | +|-----|-----|-----| +| 1 | 앱 설치 | 사용자가 App Store/Play Store 또는 사내 배포 경로로 설치 | +| 2 | 휴대폰 번호 입력 | 현재 Baron SSO 방식과 동일하게 사용자가 번호를 직접 입력 | +| 3 | Baron SSO 선등록 여부 확인 | 등록된 재직자/허용 가족사 사용자인지 확인 | +| 4 | 앱 사용 시작 | 등록 인원이면 직원 검색, 전화번호 검색, 조직도 등 기본 기능 사용 | +| 5 | 로그 기록 | 로그인, 접근 허용/차단 이력을 감사 로그로 저장 | + +#### 기기 등록 정책 + +| 정책 항목 | 권장 | +|-------|-----| +| 앱 계정 기준 | Baron SSO 사용자 ID | +| 최초 식별값 | 사용자가 직접 입력한 휴대폰 번호 | +| 기기 등록 | 1차 범위에서는 필수 요구사항이 아님 | +| push token | 공지/푸시 기능 보류에 따라 후순위 | +| 저장 위치 | 토큰을 저장하는 경우 Android Keystore, iOS Keychain 등 보안 저장소 사용 | +| 기기 교체 | 1차 범위에서는 Baron SSO 재로그인 기준 | +| 앱 재설치 | Baron SSO 재로그인 기준 | +| 장기 미사용 | 정책 기간 경과 시 재인증 또는 재등록 | +| 퇴사/권한 회수 | SSO 계정 비활성화 시 앱 접근 차단 및 등록 기기 비활성화 | +| 분실 대응 | 관리자 또는 사용자 포털에서 기기 연결 해제 | + +#### 가입/등록 방식 비교 + +| 방식 | 설명 | 장점 | 한계 | 판단 | +|-----|-----|-----|-----|-----| +| 단순 SSO 로그인만 | 앱 실행 때마다 SSO 로그인만 수행 | 구현 단순 | 반복 로그인 필요, 기기 관리/푸시/분실 대응 약함 | 최소안 | +| SSO 로그인 + 기기 등록 | 최초 인증 후 앱 기기를 사용자 계정에 등록 | 다음 실행부터 자동 사용, 푸시, 기기 해제 가능 | 기기 등록 API 필요 | 후속 검토 | +| SSO 로그인 + 기기 등록 + 관리자 승인 | 최초 기기 등록을 관리자가 승인 | 보안 강함 | 운영 부담 큼 | 장기 검토 | +| 앱 자체 회원가입 | 앱에서 새 계정 생성 | 진입 쉬움 | 사내직원 전용 정책과 충돌 | 비권장 | + +#### tdc114plus에 맞는 추천안 + +| 구분 | 추천 | +|-----|-----| +| 기본 로그인 | 휴대폰 번호 입력 기반 Baron SSO 로그인 | +| 일반 회원가입 | 미제공 | +| SSO 미등록자 | 사용 신청/계정 요청만 제공 | +| 앱 최초 등록 | 1차 범위에서는 별도 회원가입/기기등록 없이 Baron SSO 등록 여부 확인 | +| 이후 사용 | 앱 실행 시 Baron SSO 로그인 방식으로 사용 | +| 추가 인증 | 1차 범위에서는 별도 추가 인증 미정. 외부망/고위험 기능 도입 시 검토 | +| 푸시/공지 | 1차 범위에서는 보류 | +| 기기 해제 | 기기 등록 기능 도입 시 후속 설계 | + +정리하면, tdc114plus 1차 개발은 `앱 실행 시 전화번호 입력 기반 Baron SSO 로그인 + SSO 등록 인원만 사용 허용` 모델로 진행한다. 기기 등록과 자동 사용 모델은 운영 보안, 푸시, 분실 대응 요구가 명확해지는 후속 단계에서 검토한다. + +### 6.3 MVP 필수 기능 + +회의 결정 기준의 1차 기본 기능은 아래 범위로 제한한다. + +| 기능 | 설명 | 플랫폼 | +|-----|-----|-----| +| Baron SSO 로그인 | 휴대폰 번호 입력 기반 Baron SSO 로그인. 일반 회원가입 미제공 | Android/iOS | +| 직원 통합 검색 | 이름, 전화번호, 부서, 직위, 회사 검색 | Android/iOS | +| 가족사/회사 필터 | 한맥, 삼안, 장헌, PTC, 한라 등 | Android/iOS | +| 조직도 | 회사 > 부서 > 직원 탐색 | Android/iOS | +| 직원 상세 | 사진, 소속, 직위, 전화, 문자, 메일 | Android/iOS | +| 전화/문자 액션 | 기본 전화/문자 앱 호출 | Android/iOS | +| 즐겨찾기 | 자주 찾는 직원 저장 | Android/iOS | +| 권한 안내 | 전화/문자 등 기능별 권한 안내 | Android/iOS | + +### 6.4 2차 고도화 기능 + +| 기능 | 설명 | 플랫폼 | +|-----|-----|-----| +| 개인화 홈 | 내 부서, 즐겨찾기, 최근 조회 | Android/iOS | +| 최근 검색/조회 | 최근 검색어와 최근 본 직원 | Android/iOS | +| 푸시 알림 | 공지, 결재, 보안 알림 | Android/iOS | +| 공지사항 | 목록, 검색, 상세, 첨부 표시 | Android/iOS | +| 결재함 요약 | 결재할 문서 수, 반려/완료 상태 | Android/iOS | +| 공지 개인화 | 내 회사/부서/직급 기준 공지 우선 표시 | Android/iOS | +| 직원 상태 | 재직, 부재, 출장, 휴직 등 표시 | Android/iOS | +| 내 정보 수정 요청 | 전화번호, 사진, 담당업무 변경 요청 | Android/iOS | +| 관리자 데이터 검증 | 조직/직원 데이터 누락, 불일치 확인 | Web/Admin 우선 | +| 등록 기기 관리 | 내 등록 기기 확인, 기기 해제, 재등록 | Android/iOS | + +### 6.5 플랫폼 특화 기능 + +| 기능 | 설명 | 플랫폼 | 판단 | +|-----|-----|-----|-----| +| 수신 전화번호 식별 | 수신 전화번호로 직원 정보 조회 | Android 우선 | 1차 보류 | +| 수신 직원정보 팝업 | 전화 수신 시 회사/부서/이름/직위 표시 | Android 우선 | 1차 보류 | +| iOS 전화번호 식별 PoC | Call Directory Extension 가능 범위 검토 | iOS | 기본 기능 완료 후 검토 | +| 홈 화면 위젯 | 즐겨찾기 직원 빠른 연락 | Android/iOS | 후순위 | +| 모바일 사원증 연계 | SSO 계정 기반 사원증/출입 연계 | Android/iOS | 장기 검토 | + +## 7. Baron SSO 데이터 기반 신규 기능 제안 + +Baron SSO에 쌓일 사내정보를 활용하면 `tdc114plus`는 단순 전화번호부가 아니라 사내 업무 허브로 확장할 수 있다. + +### 7.1 데이터 종류별 기능 제안 + +| 데이터 종류 | 활용 기능 | 기대 효과 | +|--------|-------|-------| +| 계정 정보 | SSO 로그인, 앱 접근 제어 | 로그인 통합, SSO 등록 사용자만 사용 | +| orgFront 조직 정보 | 조직도, 가족사 필터, 부서별 직원 목록 | 최신 조직 구조 자동 반영 | +| 직위/직책 정보 | 직원 상세, 결재/공지 대상 구분 | 역할에 맞는 정보 제공 | +| 연락처 정보 | 전화/문자/메일, 직원 검색 | 기존 114 핵심 기능 대체 | +| 프로필 사진 | 직원 카드, 상세 화면 | 사람 식별 편의성 향상 | +| 권한/그룹 정보 | 메뉴 노출 제어, 민감정보 마스킹 | 보안과 개인정보 보호 | +| 재직 상태 | 퇴직자 숨김, 휴직/부재 표시 | 잘못된 연락 방지 | +| 접속/기기 정보 | 기기 신뢰도, 앱 버전 관리 | 보안 운영 강화 | +| 조회 로그 | 개인정보 조회 감사, 이상 조회 탐지 | 내부통제 강화 | +| 공지 대상 정보 | 부서/직급별 공지 개인화 | 필요한 공지만 노출 | +| 결재 상태 정보 | 결재함 요약, 알림 | 업무 처리 속도 향상 | +| 담당업무/기술 태그 | 업무 담당자 검색, 전문가 찾기 | 사람 찾기에서 담당자 찾기로 확장 | + +### 7.2 추천 신규 기능 목록 + +| 기능 | 설명 | 우선순위 | +|-----|-----|------| +| 내 부서 바로가기 | 로그인 사용자의 소속 부서를 첫 화면에 노출 | P1 | +| 담당업무 검색 | 이름이 아니라 업무 키워드로 담당자 검색 | P1 | +| 역할 기반 메뉴 | 사용자 권한에 따라 메뉴와 데이터 노출 제어 | P0 | +| 개인정보 조회 로그 | 직원정보 조회 이력 저장 | P0 | +| 민감정보 마스킹 | 권한 없는 사용자는 휴대폰/사진 일부 제한 | P0 | +| 공지 개인화 | 내 회사/부서/직급 대상 공지 우선 표시 | P1 | +| 결재함 요약 | 결재할 문서 수와 상태 표시 | P1 | +| 데이터 오류 신고 | 직원 정보 오류를 사용자가 신고 | P1 | +| 내 정보 수정 요청 | 연락처/사진/담당업무 수정 요청 | P1 | +| 조직 변경 알림 | 부서 이동, 신규 입사, 퇴사 정보 반영 | P2 | +| 전문가 찾기 | 기술, 자격증, 프로젝트 경험 기반 검색 | P2 | +| 이상 조회 탐지 | 직원정보 대량 조회 등 이상 패턴 감지 | P2 | + +## 8. 결정해야 할 항목 + +검토 시 아래 항목을 결정하면 다음 단계 산정이 가능하다. + +| 결정 항목 | 선택지 | 추천 | +|-------|-----|-----| +| 지원 플랫폼 | Android만 / Android+iOS | Android+iOS | +| 개발 방식 | 네이티브 / WebView / Flutter | Flutter | +| 로그인/회원가입 | SSO 선등록 사용자만 / 앱 회원가입 / 사용 신청 후 승인 | SSO 선등록 사용자만, 일반 회원가입 미제공 | +| 휴대폰 번호 검증 | 앱이 자동 조회 / 사용자가 입력 후 SSO 인증 / 미사용 | 자동 조회 비권장, 사용자 입력 기반 SSO 인증 권장 | +| 앱 기기 등록 | 미등록 / 최초 사용 시 자동 등록 / 관리자 승인 후 등록 | 1차 미적용, 후속 검토 | +| 이후 앱 사용 | 매번 로그인 / 등록 기기 자동 사용 / 일정 기간마다 재인증 | 앱 실행 시 Baron SSO 로그인 방식 | +| 기기 해제/재등록 | 미제공 / 사용자 직접 해제 / 관리자 해제 포함 | 1차 미적용, 기기 등록 도입 시 검토 | +| 기존 WebView 유지 | 그대로 유지 / 일부 유지 / API 기반 재구성 | API 기반 재구성 + 일부 WebView | +| 수신 전화 팝업 | 유지 / Android만 유지 / 제외 | 1차 제외 | +| iOS 수신 전화 식별 | 필수 / PoC 후 결정 / 제외 | 1차 제외, 기본 기능 후 재검토 | +| 공지사항 | 단순 링크 / 앱 내 목록 / 푸시 연계 | 개발 중간 단계까지 보류 | +| 전자결재 | 외부 브라우저 / 인앱 WebView / SSO 유니버셜 링크/앱 링크 | 개발 중간 단계까지 보류 | +| 개인정보 로그 | 미적용 / 기본 로그 / 상세 감사 | 기본 로그 필수 | +| 관리자 기능 | 없음 / 최소 데이터 관리 / 별도 관리자 | 별도 관리자 또는 기존 Baron SSO 관리자 연계 | + +전자결재 선택 시 전제 조건: 현재 전자결재 서버는 HTTP 기반이다. 따라서 후속 단계에서 인앱 WebView 또는 외부 브라우저 방식으로 연결하는 것은 가능하지만, SSO 유니버셜 링크/앱 링크 방식을 채택하려면 HTTPS 전환 또는 SSO HTTPS 진입 URL 구성이 선행되어야 한다. + +## 9. 추천 추진안 + +| 단계 | 목표 | 주요 기능 | +|-----|-----|-------| +| 1단계 | 기본 기능 구현 | SSO 로그인, 직원검색, 전화번호검색, 가족사 필터, 조직도, 직원목록, 전화/문자, 즐겨찾기 | +| 2단계 | 앱 품질 강화 | 최근 조회, 개인화 홈, 권한별 화면, 조회 로그 | +| 3단계 | SSO 데이터 활용 | 담당업무 검색, 내 정보 수정 요청, 데이터 오류 신고 | +| 4단계 | 보류 기능 재검토 | 공지사항, 전자결재, Android 수신 전화 식별/팝업, iOS Call Directory Extension PoC | +| 5단계 | 사내 업무 허브화 | 알림 센터, 앱 런처, 관리자 대시보드, 모바일 사원증 연계 | + +## 10. 최종 추천 + +1차 개발은 `Flutter Android/iOS 공통 앱`으로 진행한다. + +1차 범위는 기존 114의 핵심 사용성인 직원검색, 전화번호검색, 가족사 필터, 조직도, 직원목록, 전화걸기, 문자보내기, 즐겨찾기까지 포함한다. + +공지사항과 전자결재는 개발 중간 단계까지 보류한다. 수신 전화번호 식별과 화면 위 팝업도 1차 범위에서 보류한다. iPhone은 동일 기능 구현이 어렵기 때문에 기본 기능 완료 이후 필요 시 Call Directory Extension 가능 범위를 별도 PoC로 검토한다. + +Baron SSO 데이터는 단순 로그인에만 쓰지 말고, 우선 `orgFront` 기반 개인/조직 정보 추출, 조직도, 권한 제어, 개인정보 조회 로그에 활용한다. 이후 개인화 홈, 담당업무 검색, 공지/결재 요약 등으로 확장한다. diff --git a/docs/tdc114plus-development-environment-setup-plan-2026-07-02.md b/docs/tdc114plus-development-environment-setup-plan-2026-07-02.md new file mode 100644 index 0000000..102e717 --- /dev/null +++ b/docs/tdc114plus-development-environment-setup-plan-2026-07-02.md @@ -0,0 +1,164 @@ +# tdc114plus 개발환경 구성 작업순서 + +작성일: 2026-07-02 + +목적: 신규 앱 `tdc114plus` 개발환경 구성을 시작하기 전, Baron SSO 저장소에 임시로 보관할 작업순서를 정리한다. 추후 `tdc114plus` 저장소의 Flutter 앱 골격이 갖춰지면 본 문서를 해당 저장소의 `docs/` 경로로 복사 이관한다. + +## 1. 저장소 확인 + +Gitea 저장소: + +- https://gitea.hmac.kr/kevin/tdc114plus + +확인 결과: + +- `git ls-remote https://gitea.hmac.kr/kevin/tdc114plus.git` 접근은 성공했다. +- 출력 ref가 없으므로 현재 저장소는 아직 커밋/브랜치가 없는 빈 저장소이거나, 기본 브랜치가 아직 생성되지 않은 상태로 판단한다. + +## 2. 기본 추진 방향 + +`tdc114plus`는 Baron Safe에서 검토했던 Flutter 기반 모바일 앱 구성 방식을 참고해 개발환경을 구성한다. + +1차 개발은 아래 범위에 집중한다. + +- Baron SSO 전화번호 로그인 +- Baron SSO 등록 사용자만 앱 사용 허용 +- Baron SSO `orgFront` 기반 개인/조직 정보 연계 +- 직원검색 +- 전화번호검색 +- 가족사 필터 +- 조직도 +- 직원목록 +- 전화걸기 +- 문자보내기 +- 즐겨찾기 + +1차 보류 기능은 아래와 같다. + +- 공지사항 +- 전자결재 +- 수신전화식별 +- 수신팝업 + +## 3. 단계별 개발환경 구성 순서 + +### 3.1 저장소 초기화 + +1. `tdc114plus` 저장소를 clone한다. +2. 기본 브랜치를 `main` 또는 `develop`으로 생성한다. +3. `README.md`, `.gitignore`, `docs/`, `scripts/` 기본 구조를 생성한다. +4. Baron SSO 저장소에 임시 보관한 신규 앱 결정 문서와 본 문서를 `tdc114plus/docs/`로 복사 이관한다. + +### 3.2 Flutter 앱 스캐폴딩 + +1. Flutter 프로젝트를 생성한다. +2. Android/iOS 타겟을 활성화한다. +3. 앱 패키지명을 확정한다. + - 예: `kr.co.baron.tdc114plus` +4. 앱 이름, 앱 아이콘, splash, 기본 권한 설정을 정리한다. +5. Baron Safe 때 검토한 방식처럼 Flutter 기반 Android/iOS 공통 앱 구조로 시작한다. + +### 3.3 기술스택 기본 구성 + +| 영역 | 권장 | +| --- | --- | +| Framework | Flutter | +| Language | Dart | +| 상태관리 | `flutter_riverpod` | +| Routing | `go_router` | +| HTTP | 기존 방식이면 `http`, 확장성 필요 시 `dio` 검토 | +| 로컬 설정 | `shared_preferences` | +| 보안 저장 | 후속 단계에서 `flutter_secure_storage` 검토 | +| 다국어 | `easy_localization` | +| 로깅 | `logging` 또는 `logger` | +| 전화/문자 | `url_launcher` | +| 즐겨찾기 저장 | 1차는 로컬 저장, 후속 서버 동기화 검토 | + +### 3.4 환경 분리 + +1. `dev`, `staging`, `prod` API endpoint를 분리한다. +2. Baron SSO backend URL을 환경별로 설정한다. +3. orgFront API URL 또는 Baron SSO backend proxy 경로를 설정한다. +4. Flutter `--dart-define` 또는 환경 설정 파일 방식 중 하나를 선택한다. +5. Android/iOS별 네트워크 보안 설정을 정리한다. + +### 3.5 앱 기본 구조 + +권장 디렉터리 예시는 다음과 같다. + +```text +lib/ + core/ + config/ + router/ + network/ + storage/ + logging/ + features/ + auth/ + directory/ + organization/ + favorites/ + profile/ + shared/ + widgets/ + models/ +``` + +각 영역의 역할은 다음과 같이 둔다. + +| 경로 | 역할 | +| --- | --- | +| `core/config` | 앱 환경, API endpoint, 빌드 설정 | +| `core/router` | `go_router` 기반 화면 라우팅 | +| `core/network` | Baron SSO 및 orgFront API client | +| `core/storage` | 로컬 설정, 즐겨찾기, 보안 저장 추상화 | +| `core/logging` | 앱 로그 정책 | +| `features/auth` | Baron SSO 전화번호 로그인 | +| `features/directory` | 직원검색, 전화번호검색, 직원목록, 직원 상세 | +| `features/organization` | 가족사 필터, 조직도 | +| `features/favorites` | 즐겨찾기 | +| `features/profile` | 내 정보, 향후 설정 화면 | +| `shared/widgets` | 공통 UI 컴포넌트 | +| `shared/models` | 공통 모델 | + +### 3.6 1차 기능 개발 순서 + +1. Baron SSO 전화번호 로그인 화면 +2. 로그인 성공/실패 처리 +3. orgFront 기반 직원 목록 API 연동 +4. 직원검색 +5. 전화번호검색 +6. 가족사 필터 +7. 조직도 +8. 직원 상세 +9. 전화걸기/문자보내기 +10. 즐겨찾기 + +### 3.7 검증 및 배포 준비 + +1. `flutter analyze` 기준을 정리한다. +2. 기본 widget/unit test 실행 방식을 정리한다. +3. Android debug APK 빌드를 확인한다. +4. iOS 빌드는 macOS 환경에서 별도 확인한다. +5. `README.md`에 개발 실행 방법을 기록한다. +6. Gitea Actions 또는 수동 빌드 절차를 정리한다. +7. 개발 중간 산출물 기준 APK 배포 방식을 결정한다. + +## 4. 작업 원칙 + +- 1차 개발은 전화번호부/조직도 기본 기능 완성에 집중한다. +- 공지사항, 전자결재, 수신전화식별, 수신팝업은 골격 단계에서 제외한다. +- 기존 Baron SSO backend와 orgFront 데이터를 우선 활용한다. +- 앱 자체 회원가입 기능은 만들지 않는다. +- Baron SSO 등록 인원 확인 실패 시 앱 사용을 허용하지 않는다. +- 기기 등록, 푸시, 자동 로그인, 공지/전자결재 연동은 후속 단계에서 별도 검토한다. + +## 5. 추후 이관 항목 + +`tdc114plus` 저장소 골격이 갖춰지면 아래 문서를 복사 이관한다. + +- `docs/tdc114plus-development-decision-brief-2026-07-01.md` +- `docs/tdc114plus-development-environment-setup-plan-2026-07-02.md` + +이관 후 Baron SSO 저장소의 문서는 회의 및 초기 검토 기록으로 보존한다. diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh new file mode 100755 index 0000000..eca9155 --- /dev/null +++ b/scripts/bootstrap.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" +APP_DIR="$ROOT_DIR/app" + +if ! command -v flutter >/dev/null 2>&1; then + echo "flutter command not found. Install Flutter SDK before running bootstrap." >&2 + exit 127 +fi + +if [ ! -d "$APP_DIR" ]; then + echo "app directory does not exist. Run ./scripts/create-flutter-app.sh first." >&2 + exit 1 +fi + +cd "$APP_DIR" +flutter pub get diff --git a/scripts/create-flutter-app.sh b/scripts/create-flutter-app.sh new file mode 100755 index 0000000..4158ea1 --- /dev/null +++ b/scripts/create-flutter-app.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" +APP_DIR="$ROOT_DIR/app" + +if ! command -v flutter >/dev/null 2>&1; then + echo "flutter command not found. Install Flutter SDK before creating the app skeleton." >&2 + exit 127 +fi + +if [ -d "$APP_DIR" ]; then + echo "app directory already exists: $APP_DIR" >&2 + exit 0 +fi + +flutter create \ + --platforms=android,ios \ + --org kr.co.baron \ + --project-name tdc114plus \ + "$APP_DIR" diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 0000000..e3f39df --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)" +APP_DIR="$ROOT_DIR/app" + +if ! command -v flutter >/dev/null 2>&1; then + echo "flutter command not found. Install Flutter SDK before running tests." >&2 + exit 127 +fi + +cd "$APP_DIR" +flutter analyze +flutter test