# 2026-07-16 업무 인계 메모 작성 시각: 2026-07-16 KST ## 오늘 최종 상태 - 실기기 로그인은 다시 정상 진행됐다. - 문자 링크 승인 후 앱 복귀 시 직원검색 목록이 다시 표시되는 것까지 확인했다. - 오늘 최종 복구 기준은 `로그인 성공 -> 직원검색 목록 표시 성공`이다. - 다만 프로필 사진 1순위/2순위/3순위 화면 검증은 아직 오늘 완료 범위에 포함하지 않는다. ## 오늘 발생한 주요 이슈와 원인 ### 1. 로그인 후 직원검색이 다시 무너지는 문제 현상: - 로그인 링크 발송은 되지만 앱 진입 후 직원검색 화면이 비거나 로딩만 지속됐다. - 잠시 후 `로그인이 만료되었거나 권한을 확인할 수 없습니다.` 화면으로 떨어졌다. 중간에 확인한 사실: - 앱 SharedPreferences 안에는 세션 토큰이 실제로 저장되고 있었다. - 저장된 토큰은 Baron access token이 아니라 `tdc114plus-auth`가 발급한 app session token 형식이었다. - 저장된 user 정보는 아래처럼 fallback 값이었다. - `id = baron-user` - `name = Baron User` - `tenantSlug = ""` 의미: - 세션 토큰이 전혀 저장되지 않는 문제는 아니었다. - 다만 user 메타데이터는 충분하지 않았고, 동시에 org-context 중계 경로도 깨져 있었다. ### 2. 핵심 장애 원인: 5001 auth broker의 org-context self-recursion 현상: - `tdc114plus-auth` 로그에 `/api/v1/integrations/org-context` 요청이 들어온 뒤, 같은 5001 서버가 다시 자기 자신의 `/api/v1/integrations/org-context`를 호출하는 패턴이 반복됐다. - 내부 재호출 요청에는 `Authorization`, `X-App-Session` 헤더가 없어서 결국 unauthorized 흐름으로 무너졌다. 실제 확인값: - 실행 중인 5001 프로세스 환경변수에서 아래를 직접 확인했다. ```text BARON_ORG_CONTEXT_BASE_URL=http://127.0.0.1:5001 ``` 즉: - 원래 의도는 `https://sadmin.hmac.kr`를 upstream으로 호출해야 하는데, - 실제 실행 중 프로세스는 자기 자신 `http://127.0.0.1:5001`을 upstream으로 잡고 있었다. 근본 원인: - `scripts/start-auth-server.sh`가 `TDC114_AUTH_UPSTREAM_ORG_CONTEXT_API_BASE` 값을 env 파일 `source` 전에 먼저 읽고 있었다. - 그래서 `scripts/.env.android-device.local` 안에 `TDC114_AUTH_UPSTREAM_ORG_CONTEXT_API_BASE=https://sadmin.hmac.kr` 가 있어도 반영되지 않았다. - 그 결과 fallback으로 `TDC114_ORG_CONTEXT_API_BASE=http://127.0.0.1:5001`를 사용하면서 self-recursion이 발생했다. ### 3. 오늘 복구 조치 수정 파일: - `scripts/start-auth-server.sh` 수정 내용: - `UPSTREAM_ORG_CONTEXT_BASE` 읽는 위치를 env 파일 `source` 뒤로 옮겼다. - 이후 5001 auth broker를 재기동했다. 재기동 후 직접 확인한 실행 환경: ```text PORT=5001 APP_SESSION_SECRET=tdc114plus-dev-session BARON_ORG_CONTEXT_BASE_URL=https://sadmin.hmac.kr BARON_ORG_CONTEXT_TENANT_SLUG=hanmac-family ``` 결과: - self-recursion 원인이 제거됐다. - 다시 로그인 후 실기기 직원검색 목록이 정상 표시됐다. ## 오늘 추가로 확인한 기술 메모 ### 1. `baron-user / Baron User` 생성 위치 파일: - `/home/ubuntu/workspace/tdc114plus-auth/cmd/server/main.go` 확인 내용: - `link/poll` 완료 후 `poll.User`에 값이 없을 때 fallback으로 아래 값이 채워진다. - `baron-user` - `Baron User` 현재 판단: - 이 값은 오늘 새로 생긴 회귀가 아니라 기존 구조였다. - 오늘의 실장애 원인은 이것 자체보다 `org-context upstream 오배선`이었다. ### 2. `tenantSlug` 누락 구조는 후속 개선 대상 현재 확인 결과: - `tdc114plus-auth`의 `link/poll` 응답 user 모델에는 `tenantSlug`, `tenantId`, `tenantName`이 없다. - 앱은 세션 user의 `tenantSlug`가 비어 있으면 후속 조직도/초기 선택 계산에서 fallback을 더 많이 타게 된다. 중요 판단: - 오늘 직원검색이 완전히 무너진 직접 원인은 self-recursion이었다. - 하지만 `tenantSlug` 누락 구조는 다음 작업에서 별도로 정리해야 한다. ## 오늘 수정/추가한 파일 - `scripts/start-auth-server.sh` - org-context upstream env 읽는 순서를 수정했다. - `app/lib/src/core/config/app_environment.dart` - 빌드 시각 define 표시용 항목을 유지했다. - `app/lib/src/features/auth/presentation/login_screen.dart` - 실기기에서 최신 APK 식별을 위해 빌드 시각 표시를 유지했다. ## 확인 완료한 테스트 1. 5001 health 확인 ```bash curl -i --max-time 5 http://127.0.0.1:5001/health ``` 결과: ```json {"jwks":"ok","provider":"baron","status":"ok"} ``` 2. 실행 중 5001 프로세스 환경변수 확인 - `BARON_ORG_CONTEXT_BASE_URL=https://sadmin.hmac.kr` 반영 확인 3. 실기기 세션 저장 확인 - SharedPreferences 안에 app session token 저장 확인 - user fallback 값 저장 확인 4. 실기기 재로그인 후 직원검색 확인 - 문자 링크 승인 성공 - 앱 복귀 성공 - 직원검색 목록 표시 성공 ## 내일 업무 시작 순서 1. 전일 인계 문서 먼저 확인 - `docs/daily-issues/2026-07-16_work_handoff.md` 2. 5001 auth broker health 확인 ```bash curl -fsSL --max-time 5 http://127.0.0.1:5001/health ``` 3. 실행 중 5001 프로세스 upstream 값 확인 ```bash ss -ltnp '( sport = :5001 )' tr '\0' '\n' < /proc//environ | rg 'BARON_ORG_CONTEXT_BASE_URL|BARON_ORG_CONTEXT_TENANT_SLUG' ``` 정상 기준: ```text BARON_ORG_CONTEXT_BASE_URL=https://sadmin.hmac.kr BARON_ORG_CONTEXT_TENANT_SLUG=hanmac-family ``` 4. 실기기 ADB 연결 및 reverse 확인 ```bash ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/flutter-docker.sh adb -s R5CT42QTCNX reverse --list ``` 5. 앱 재로그인 후 첫 확인 - 직원검색 목록이 바로 뜨는지 - 30초 뒤에도 만료 화면으로 떨어지지 않는지 ## 내일 우선 점검할 항목 1. `org-context` self-recursion이 정말 재발하지 않는지 먼저 확인한다. 2. `tenantSlug` 누락 구조를 `tdc114plus-auth` 응답 모델 기준으로 정리한다. 3. 프로필 사진 우선순위 검증을 아래 순서로 이어간다. - NAVER_WORKS - BARON_UUID_R2 - DEFAULT 4. 직원검색 외에 조직도/상세/즐겨찾기 화면도 같은 세션 상태에서 유지되는지 확인한다. ## 보안상 주의사항 - 아래 값들은 문서에 실제 값을 남기지 않는다. - NAVER WORKS 서비스 계정 자격값 - Baron org-context key id / secret - private key 경로 및 원문 - `scripts/.env.android-device.local` - `secrets/naver_works_service_account.local.env` 위 두 파일은 계속 비공개 로컬 파일로만 유지한다. ## 내일 첫 판단 기준 - 내일 첫 목표는 “또 고치는 것”이 아니라 “오늘 복구한 5001 upstream 상태가 유지되는지 먼저 검증”이다. - 그 상태가 유지되면 사진 정책 검증으로 넘어가고, - 유지되지 않으면 가장 먼저 `start-auth-server.sh`와 실행 중 프로세스 환경변수부터 다시 본다.