Stabilize auth flow and profile images
This commit is contained in:
@@ -0,0 +1,224 @@
|
||||
# 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/<PID>/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`와 실행 중 프로세스 환경변수부터 다시 본다.
|
||||
Reference in New Issue
Block a user