# 2026-07-14 업무 인계 메모 작성 시각: 2026-07-14 16:54 KST ## 오늘 최종 상태 - 실기기 로그인 흐름은 Baron SSO 공식 정책에 맞춰 동작 확인했다. - 사용자는 앱에서 전화번호 입력 후 문자 링크를 받는다. - 문자 링크를 누르면 Chrome에서 Baron SSO 승인 완료 화면에 머문다. - 사용자가 직접 TDC114PLUS 앱으로 돌아오면 앱이 저장된 pendingRef로 poll을 재개하고 직원검색 메인 화면에 진입한다. - Baron SSO 정책상 문자 링크 클릭 후 Chrome이 자동으로 앱으로 돌아오는 기능은 현재 지원되지 않는다. - 직원검색 화면의 직원/조직 정보 호출은 `tdc114plus-auth` 5001 서버의 `/api/v1/integrations/org-context`를 사용한다. - 실기기에서 직원목록 표시 확인 완료: - IS3 중복 뱃지 제거 확인 - 전화번호 `010-0000-0000` 형식 표시 확인 - 직원목록 표시 확인 ## 오늘 발생한 주요 이슈 ### 1. 로그인 승인 후 앱 복귀 UX 현상: - 문자 링크 클릭 후 Chrome의 `로그인 승인 완료` 화면에 머물렀다. - 사용자가 `로그인 창으로 이동하기` 버튼을 누르면 Baron SSO 로그인창/대시보드 흐름으로 이동해 앱 메인 진입 흐름과 맞지 않았다. 확인된 정책: - Baron SSO 개발자 답변 기준, `/api/v1/auth/headless/link/init`에는 post-verify redirect 필드가 없다. - SMS 링크를 누른 브라우저는 verify-only approver로 동작한다. - 승인 완료 후 브라우저가 앱 callback/App Link로 자동 이동하는 정책은 없다. 현재 대응: - 앱 문구를 “문자 승인 후 앱으로 돌아오면 자동 로그인됩니다” 흐름으로 맞췄다. - 앱 복귀 시 저장된 pendingRef로 poll을 재개하도록 처리했다. 내일 확인할 것: - 사용자가 앱 복귀 시 즉시 메인으로 들어가는지 반복 테스트한다. - 자동 앱 복귀가 꼭 필요하면 Baron SSO 쪽 정책/기능 추가 요청 사안으로 분리한다. ### 2. `auth_provider_unavailable` 현상: - 로그인 화면에서 `승인 상태 확인 실패: auth_provider_unavailable` 발생. 원인: - 5001 `tdc114plus-auth` 서버가 Baron SSO `link/poll` 완료 후 OIDC redirect/consent/token exchange를 처리하는 구간에서 실패할 수 있었다. - 이후 서버를 최신 소스 기준으로 재기동하고 로그를 직접 확인했다. 확인 로그: - `link/init` 성공 - `link/poll` pending 반복 - `link/poll status=ok` - `/consent` redirect 감지 - consent accept 성공 - callback URL에 code 포함 - token exchange 성공 결론: - 최신 `tdc114plus-auth` 소스와 올바른 환경값으로 실행하면 login -> poll -> consent -> token exchange는 정상 동작한다. ### 3. 직원검색 화면 로딩 지속 현상: - 직원검색 화면에 진입했지만 중앙 로딩만 표시되고 직원목록이 나오지 않았다. 확인: - 5001 서버 로그에 `GET /api/v1/integrations/org-context`가 여러 번 찍혔다. - 즉 앱이 직원/조직 API를 호출하지 않은 것이 아니라, 호출은 하고 있었다. 원인: - 5001 auth 서버를 수동 재기동하면서 조직도 연동 키 환경값을 빠뜨렸다. - 누락된 값: - `BARON_ORG_CONTEXT_KEY_ID` - `BARON_ORG_CONTEXT_KEY_SECRET` 조치: - `scripts/.env.android-device.local`에 있는 값을 기준으로 5001 서버를 기동하도록 자동화했다. - 새 스크립트 추가: - `scripts/start-auth-server.sh` - `scripts/startup.sh`에서 업무시작 시 `start-auth-server.sh --restart`를 자동 호출하도록 연결했다. - `scripts/shutdown.sh`에서 5001 auth 서버도 종료하도록 연결했다. - `scripts/.env.android-device.local`, staging env 파일 권한을 `600`으로 조정했다. 검증: ```bash ./scripts/start-auth-server.sh --restart curl -fsSL --max-time 5 http://127.0.0.1:5001/health ``` 응답: ```json {"jwks":"ok","provider":"baron","status":"ok"} ``` 실기기 화면: - 직원검색 화면에서 직원목록 정상 표시 확인. ## 내일 업무 시작 순서 1. Windows 관리자 PowerShell에서 ADB portproxy/방화벽 상태 확인이 필요하면 기존 절차대로 확인한다. 2. Windows 일반 PowerShell에서 실기기 ADB 연결 확인: ```powershell cd $env:LOCALAPPDATA\Android\Sdk\platform-tools .\adb.exe devices ``` 3. WSL에서 업무시작 기동: ```bash ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/startup.sh --auto --wait=40 ``` 4. 5001 auth 서버 확인: ```bash curl -fsSL --max-time 5 http://127.0.0.1:5001/health ``` 정상 기준: ```json {"jwks":"ok","provider":"baron","status":"ok"} ``` 5. 실기기 reverse 확인: ```bash ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/flutter-docker.sh adb -s R5CT42QTCNX reverse --list ``` 필수: ```text tcp:5000 tcp:5000 tcp:5001 tcp:5001 ``` 6. 앱 실행 후 확인: - 로그인 세션이 남아 있으면 직원검색 화면 진입 - 직원목록이 바로 표시되는지 확인 - 로딩이 지속되면 5001 로그 확인 ```bash tail -n 120 logs/$(date +%F)/tdc114plus-auth.log ``` ## 내일 우선 점검할 항목 - `startup.sh`가 `start-auth-server.sh --restart`를 정상 호출하는지 확인한다. - 직원검색 화면 진입 시 `GET /api/v1/integrations/org-context`가 5001 로그에 찍히는지 확인한다. - 직원목록 로딩이 다시 멈추면 가장 먼저 아래를 확인한다: - 5001 health - `scripts/.env.android-device.local` 존재 여부 - `TDC114_BARON_KEY_ID`, `TDC114_BARON_KEY_SECRET` 값 누락 여부 - adb reverse `tcp:5001 tcp:5001` ## 오늘 변경된 주요 파일 - `scripts/start-auth-server.sh` - 5001 `tdc114plus-auth` 로컬 서버 기동 스크립트. - `scripts/.env.android-device.local`에서 조직도 키를 읽어 `BARON_ORG_CONTEXT_*`로 주입한다. - `scripts/startup.sh` - 업무시작 기동 시 `tdc114plus-auth` 5001 서버를 자동 기동하도록 연결. - `scripts/shutdown.sh` - 업무종료 시 5001 auth 서버도 종료하도록 연결. - `app/lib/src/features/auth/presentation/login_screen.dart` - 문자 승인 후 앱 복귀 안내 문구 반영. - pendingRef 복원/poll 오류 표시 개선. - `docs/00_policy_tdc114plus_screen_feature_2026-07-07.md` - Baron SSO 공식 verify-only 정책과 앱 복귀 방식 반영. ## 주의 사항 - `scripts/.env.android-device.local`에는 실제 연동 키가 들어 있으므로 외부 공유 금지. - 내일 APK를 다시 빌드할 때는 반드시 auth base define을 포함한다. ```bash ./scripts/flutter-docker.sh build apk --debug \ --dart-define=TDC114_API_BASE=http://127.0.0.1:5000 \ --dart-define=TDC114_AUTH_API_BASE=http://127.0.0.1:5001 \ --dart-define=TDC114_DIRECTORY_API_BASE=http://127.0.0.1:5000 \ --dart-define=TDC114_ORGANIZATION_API_BASE=http://127.0.0.1:5000 \ --dart-define=TDC114_ORG_CONTEXT_API_BASE=http://127.0.0.1:5001 ``` - 직원검색의 실제 직원/조직 조회는 현재 5001 auth broker를 통해 `/api/v1/integrations/org-context`로 간다. - 5000의 예전 `/api/v1/tdc114plus/employees` 류 경로는 현재 직원검색의 주 경로가 아니다.