Files
tdc114plus/docs/daily-issues/2026-07-16_work_handoff.md

7.0 KiB

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 프로세스 환경변수에서 아래를 직접 확인했다.
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.shTDC114_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를 재기동했다.

재기동 후 직접 확인한 실행 환경:

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-authlink/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 확인
curl -i --max-time 5 http://127.0.0.1:5001/health

결과:

{"jwks":"ok","provider":"baron","status":"ok"}
  1. 실행 중 5001 프로세스 환경변수 확인
  • BARON_ORG_CONTEXT_BASE_URL=https://sadmin.hmac.kr 반영 확인
  1. 실기기 세션 저장 확인
  • SharedPreferences 안에 app session token 저장 확인
  • user fallback 값 저장 확인
  1. 실기기 재로그인 후 직원검색 확인
  • 문자 링크 승인 성공
  • 앱 복귀 성공
  • 직원검색 목록 표시 성공

내일 업무 시작 순서

  1. 전일 인계 문서 먼저 확인
  • docs/daily-issues/2026-07-16_work_handoff.md
  1. 5001 auth broker health 확인
curl -fsSL --max-time 5 http://127.0.0.1:5001/health
  1. 실행 중 5001 프로세스 upstream 값 확인
ss -ltnp '( sport = :5001 )'
tr '\0' '\n' < /proc/<PID>/environ | rg 'BARON_ORG_CONTEXT_BASE_URL|BARON_ORG_CONTEXT_TENANT_SLUG'

정상 기준:

BARON_ORG_CONTEXT_BASE_URL=https://sadmin.hmac.kr
BARON_ORG_CONTEXT_TENANT_SLUG=hanmac-family
  1. 실기기 ADB 연결 및 reverse 확인
ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/flutter-docker.sh adb -s R5CT42QTCNX reverse --list
  1. 앱 재로그인 후 첫 확인
  • 직원검색 목록이 바로 뜨는지
  • 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와 실행 중 프로세스 환경변수부터 다시 본다.