Stabilize auth flow and profile images
This commit is contained in:
@@ -0,0 +1,474 @@
|
||||
# 출근 후 기동 확인 및 복구 체크리스트
|
||||
|
||||
**작성일**: 2026-07-03
|
||||
**최종 업데이트**: 2026-07-19
|
||||
**버전**: 2.5 (개발용 로컬 Baron worktree와 최종 배포 목표 구조 구분 반영)
|
||||
|
||||
## 목적
|
||||
|
||||
전날 퇴근하면서 VS Code, 터미널, Android target을 모두 종료한 뒤, 다음 출근 시 `tdc114plus` 작업을 빠르게 재개할 수 있도록 기동 확인과 복구 절차를 고정한다.
|
||||
|
||||
**핵심 정책**: 소스코드 변경을 요하지 않는 자동 복구(컨테이너 재시작, 충돌 컨테이너 정리, 권한 수정, 디렉터리 정리 등)는 사용자 승인 없이 자동으로 진행한다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 적용 대상
|
||||
|
||||
- 앱 저장소: `/home/ubuntu/workspace/tdc114plus`
|
||||
- Baron SSO API worktree: `/home/ubuntu/workspace/baron-sso-tdc114plus-api`
|
||||
- auth 중계서버 저장소: `/home/ubuntu/workspace/tdc114plus-auth`
|
||||
- Windows ADB 서버 공유 기반 Android target + WSL/Docker Flutter 조합
|
||||
|
||||
주의:
|
||||
|
||||
- 이 체크리스트는 `현재 개발/검증용 업무시작 기동` 기준이다.
|
||||
- 최종 배포 목표 구조에서는 로컬 `baron-sso-tdc114plus-api` 기동이 없어지는 방향을 목표로 한다.
|
||||
- 다만 2026-07-19 현재는 아직 일부 로그인/조직 연동 검증이 로컬 Baron worktree에 의존하므로, 업무 시작 기동 대상에서 바로 제거하지 않는다.
|
||||
|
||||
---
|
||||
|
||||
## 2. 출근 후 기본 순서
|
||||
|
||||
아래 순서를 기본값으로 사용한다.
|
||||
|
||||
1. VS Code를 연다.
|
||||
2. 작업 기준 문서를 먼저 연다.
|
||||
- `docs/00_guide_tdc114plus_work_progress_timetable_2026-07-02.md`
|
||||
- `docs/daily-issues/YYYY-MM-DD.md`
|
||||
3. Android target 선행 확인
|
||||
4. Baron SSO runtime 초기화 (아래 섹션 참고)
|
||||
5. `tdc114plus-auth` broker 기동 및 health 확인
|
||||
6. 1차 상태 확인 명령 실행
|
||||
7. Integration test 실행
|
||||
|
||||
현재 해석:
|
||||
|
||||
- `tdc114plus`와 `tdc114plus-auth`는 최종 배포 직접 대상이다.
|
||||
- `baron-sso-tdc114plus-api`는 현재 개발 중 연동 검증용 보조 worktree다.
|
||||
- Baron SSO 원본 `staging`/`production` 연동으로 완전히 전환되기 전까지는 이 보조 worktree 기동 여부가 앱 개발 중 동작에 직접 영향을 줄 수 있다.
|
||||
|
||||
---
|
||||
|
||||
## 3. 런타임 초기화 및 1차 확인
|
||||
|
||||
### 3.0 Android target 선행 확인
|
||||
|
||||
`startup.sh`는 이제 **가장 먼저** Android target 상태를 확인한다. 실기기 또는 emulator가 `offline`, `unauthorized`, `connection refused` 중 하나면 Baron runtime 기동 전에 멈추고, Windows에서 무엇을 해야 하는지 단계별로 출력한다.
|
||||
|
||||
기본 정책:
|
||||
|
||||
- 기본 타깃은 실기기 1대다. emulator는 fallback일 때만 1대만 켠다.
|
||||
- Windows `adb.exe devices`에서 대상 Android target이 `device` 상태인지 먼저 확인한다.
|
||||
- 표준 연결 방식은 Windows ADB server 공유 방식인 `ADB_SERVER_SOCKET=tcp:172.21.128.1:5037`을 사용한다.
|
||||
- 직접 emulator port 연결인 `TDC114_ADB_CONNECT_ADDRESS=<host>:<port>`는 Docker local ADB가 꼭 필요한 예외 상황에만 사용한다.
|
||||
- Windows 단독 `device` 상태가 확인되기 전에는 WSL/Docker Android 스크립트를 실행하지 않는다.
|
||||
|
||||
권장 실행:
|
||||
|
||||
```bash
|
||||
# Android preflight + startup 계획 확인
|
||||
ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/startup.sh --dry-run --wait=40
|
||||
|
||||
# 실제 기동
|
||||
ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/startup.sh --auto --wait=40
|
||||
```
|
||||
|
||||
Android target preflight 실패 시 사용자가 로컬 PC에서 최소한으로 해야 하는 일:
|
||||
|
||||
1. Windows에서 Android Studio를 연다.
|
||||
2. 실기기면 USB 디버깅 연결을 확인하고, emulator fallback이면 Device Manager에서 1대만 켠다.
|
||||
3. Windows PowerShell에서 `adb.exe devices`를 실행해 `device` 상태를 확인한다.
|
||||
4. 여전히 `offline`이면 대상 기기 또는 emulator를 재시작한다.
|
||||
5. Windows adb는 정상인데 WSL/Docker에서만 실패하면 우선 `5037 -> 127.0.0.1:5037` portproxy와 방화벽 rule을 확인한다.
|
||||
6. `5037` 공유 방식은 정상인데 특정 integration test에서만 막히면 그때 `<EMULATOR_PORT> -> 127.0.0.1:<EMULATOR_PORT>` 직접 연결 보조 경로를 검토한다.
|
||||
|
||||
이 단계는 Codex가 대신 할 수 없다.
|
||||
|
||||
Codex가 계속할 수 있는 작업:
|
||||
|
||||
- WSL/Docker에서 Android target 재인식 확인
|
||||
- Baron runtime 기동
|
||||
- API smoke 확인
|
||||
- integration/manual Android 명령 실행
|
||||
- `tdc114plus-auth` broker 기동 확인 및 자동 실행 시도
|
||||
|
||||
### 3.05 앱 직접 App Link callback 제거
|
||||
|
||||
2026-07-15 기준 신규 앱은 Baron SSO OIDC callback을 직접 받지 않는다.
|
||||
|
||||
기본 정책:
|
||||
|
||||
- 앱은 `https://114.hmac.kr/auth/callback` App Link를 사용하지 않는다.
|
||||
- 앱은 `tdc114plus-auth`의 `/api/v1/auth/link/init`, `/api/v1/auth/link/poll`만 호출한다.
|
||||
- Baron SSO OIDC callback은 `tdc114plus-auth`가 받는다.
|
||||
- 필요한 redirect URI는 `https://114-auth.hmac.kr/api/v1/auth/oidc/callback`이다.
|
||||
- Windows 로컬 App Link 테스트 서버는 업무 시작 기동 대상이 아니다.
|
||||
|
||||
참조 문서:
|
||||
|
||||
```text
|
||||
docs/00_guide_tdc114plus_auth_broker_redirect_flow_2026-07-15.md
|
||||
```
|
||||
|
||||
### 3.1 Baron SSO 런타임 전체 초기화
|
||||
|
||||
**중요**: Baron SSO는 인프라(PostgreSQL, Redis, ClickHouse)와 Ory 인증(Kratos, Hydra, Keto) 서비스가 **모두 필수**다.
|
||||
|
||||
단순히 `docker compose up -d`로는 불충분하다. **반드시 모든 compose 파일을 포함**해야 한다:
|
||||
|
||||
```bash
|
||||
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
|
||||
|
||||
# 모든 compose 파일 포함하여 안전 중지 후 재시작
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml down 2>/dev/null || true
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml up -d
|
||||
|
||||
# compose up 실패 시(예: name conflict) 기존 관련 컨테이너 정리 후 1회 재시도
|
||||
docker ps -a --format '{{.Names}}' | grep -iE "baron|ory" | xargs -r docker rm -f
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml up -d
|
||||
|
||||
# 서비스 안정화 대기 (인지 마이그레이션/헬스체크 완료)
|
||||
sleep 30
|
||||
|
||||
# tdc114plus로 돌아가기
|
||||
cd /home/ubuntu/workspace/tdc114plus
|
||||
```
|
||||
|
||||
### 3.2 1차 상태 확인 명령
|
||||
|
||||
```bash
|
||||
cd /home/ubuntu/workspace/tdc114plus
|
||||
|
||||
# Baron runtime 상태 확인 (스크립트로 자동 실행 가능)
|
||||
./scripts/check-baron-api-env.sh
|
||||
|
||||
# API smoke 테스트 (스크립트로 자동 실행 가능)
|
||||
./scripts/api-smoke.sh
|
||||
```
|
||||
|
||||
**실행 방법 (권장)**:
|
||||
- 수동: 위 명령을 복사해 실행
|
||||
- 자동(권장): `scripts/startup.sh`를 사용
|
||||
|
||||
**자동 실행 예 (dry-run 권장)**:
|
||||
```bash
|
||||
# Dry-run: Android preflight 포함, 어떤 작업을 할지 미리 확인
|
||||
ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/startup.sh --dry-run
|
||||
|
||||
# 실제 재기동(주의)
|
||||
ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/startup.sh --auto --wait=40
|
||||
```
|
||||
|
||||
**기대 결과**:
|
||||
- `check-baron-api-env.sh`: `"RESULT ready-ish: 0 failure(s), 0 warning(s)"`
|
||||
- `api-smoke.sh`: 성공 코드 0
|
||||
- `tdc114plus-auth` health: `{"jwks":"ok","provider":"baron","status":"ok"}`
|
||||
- `scripts/startup.sh --auto`: Android preflight, Baron runtime, `tdc114plus-auth`, smoke 조건 중 하나라도 충족하지 못하면 비정상 종료(exit 1)
|
||||
|
||||
---
|
||||
|
||||
## 4. 자동 복구 정책 및 규칙
|
||||
|
||||
### 4.1 자동 복구 대상 (사용자 승인 불필요)
|
||||
|
||||
다음 사항들은 소스 변경을 요하지 않으므로 **자동으로 복구**한다:
|
||||
|
||||
- **컨테이너 미실행**: 자동 재시작 또는 전체 재기동
|
||||
- **컨테이너 명 충돌**: 기존 컨테이너 강제 제거 후 1회 재시작
|
||||
- **권한 문제**: `chmod`, `chown` 자동 수정
|
||||
- **설정 디렉터리 부재**: 자동 생성 또는 복원
|
||||
- **헬스체크 실패 또는 warning**: 최대 6회 재시도
|
||||
- **서비스 안정화 대기**: 자동 진행 (최대 60초)
|
||||
|
||||
### 4.2 수동 개입 필요 (사용자 승인 필요)
|
||||
|
||||
다음 사항들은 설정 또는 소스 변경을 요하므로 **명시적 승인**을 받는다:
|
||||
|
||||
- 소스코드 수정
|
||||
- 환경 변수 값 변경
|
||||
- 설정 파일 내용 수정
|
||||
- 데이터베이스 마이그레이션 또는 초기화
|
||||
- API 엔드포인트 주소 변경
|
||||
|
||||
---
|
||||
|
||||
## 5. 실패 시 복구 순서
|
||||
|
||||
### 5.1 `check-baron-api-env.sh` 실패 또는 warning 다수
|
||||
|
||||
Baron SSO runtime 상태 확인 및 복구:
|
||||
|
||||
```bash
|
||||
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
|
||||
```
|
||||
|
||||
**자동 복구 절차** (순차 실행):
|
||||
|
||||
```bash
|
||||
# 1단계: 안전 중지 후 전체 재시작
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml down 2>/dev/null || true
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml up -d
|
||||
|
||||
# 2단계: name conflict가 보이면 관련 컨테이너 정리 후 1회 재시작
|
||||
docker ps -a --format '{{.Names}}' | grep -iE "baron|ory" | xargs -r docker rm -f
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml up -d
|
||||
|
||||
# 3단계: 서비스 안정화 대기
|
||||
sleep 30
|
||||
|
||||
# 4단계: 재확인
|
||||
cd /home/ubuntu/workspace/tdc114plus
|
||||
./scripts/check-baron-api-env.sh
|
||||
```
|
||||
|
||||
**상태 확인 명령어**:
|
||||
|
||||
```bash
|
||||
docker ps --format '{{.Names}} {{.Status}}' | grep -E "baron_backend|baron_gateway|ory_kratos|ory_postgres"
|
||||
```
|
||||
|
||||
**정상 기대 상태**:
|
||||
|
||||
| 서비스 | 상태 | 설명 |
|
||||
|--------|------|------|
|
||||
| `baron_backend` | Up (healthy) | 메인 백엔드 서비스 |
|
||||
| `baron_gateway` | Up | 리버스 프록시 |
|
||||
| `baron_postgres` | Up (healthy) | 메인 데이터베이스 |
|
||||
| `baron_redis` | Up | 캐시/세션 저장소 |
|
||||
| `ory_postgres` | Up (healthy) | Ory 데이터베이스 |
|
||||
| `ory_kratos` | Up | 사용자 관리/인증 |
|
||||
| `ory_hydra` | Up | OAuth2/OIDC 제공자 |
|
||||
| `ory_keto` | Up | 권한 관리 |
|
||||
|
||||
---
|
||||
|
||||
### 5.2 `api-smoke.sh` 실패 (HTTP 502/503)
|
||||
|
||||
#### 원인 분석
|
||||
|
||||
```bash
|
||||
# Ory Kratos 로그 확인 (인증 서비스)
|
||||
docker logs ory_kratos 2>&1 | tail -30
|
||||
|
||||
# Baron backend 로그 확인
|
||||
docker logs baron_backend 2>&1 | tail -30
|
||||
|
||||
# 전체 컨테이너 상태
|
||||
docker ps | grep -iE "baron|ory"
|
||||
```
|
||||
|
||||
#### 자동 복구
|
||||
|
||||
Ory 또는 Baron 서비스가 준비 완료되지 않은 경우:
|
||||
|
||||
```bash
|
||||
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
|
||||
|
||||
# 전체 재시작 (가장 안전한 방법)
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml down
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml up -d
|
||||
sleep 40
|
||||
|
||||
# 재확인
|
||||
cd /home/ubuntu/workspace/tdc114plus
|
||||
./scripts/api-smoke.sh
|
||||
```
|
||||
|
||||
#### HTTP 401 (인증 오류)
|
||||
|
||||
```bash
|
||||
cat /home/ubuntu/workspace/tdc114plus/scripts/.env.smoke.local | grep -E "PHONE|PROVIDER"
|
||||
```
|
||||
|
||||
전화번호, provider 설정이 올바른지 확인. 변경 필요시 사용자 승인 후 수정.
|
||||
|
||||
---
|
||||
|
||||
## 6. Android target 확인
|
||||
|
||||
`startup.sh`가 이 단계를 먼저 수행하지만, 수동 재확인이 필요하면 아래 명령을 쓴다.
|
||||
|
||||
실기기 우선이면 USB 디버깅 연결을 먼저 확인하고, emulator fallback이면 Windows에서 Android Studio emulator를 켠다.
|
||||
|
||||
그 후 WSL/Docker 기준 확인:
|
||||
|
||||
```bash
|
||||
cd /home/ubuntu/workspace/tdc114plus
|
||||
ADB_SERVER_SOCKET=tcp:172.21.128.1:5037 ./scripts/flutter-docker.sh devices
|
||||
```
|
||||
|
||||
**완료 기준**:
|
||||
|
||||
- `emulator-<PORT>` 또는 Android target이 표시된다.
|
||||
- 직접 emulator port 연결은 표준 방식이 실패하거나 integration test 보조 경로가 필요할 때만 사용한다.
|
||||
|
||||
### 6.1 Android device가 보이지 않을 때
|
||||
|
||||
우선 정책 문서를 참고한다:
|
||||
|
||||
- `docs/policy_android_studio_wsl_adb_2026-07-03.md`
|
||||
- `docs/scenario_android_emulator_device_integration_test_2026-07-03.md`
|
||||
|
||||
가장 흔한 확인 포인트:
|
||||
|
||||
- Windows emulator가 실제로 켜져 있는가?
|
||||
- Windows `adb.exe devices`에서 대상이 `device` 상태인가?
|
||||
- 당일 emulator port에 맞는 portproxy가 살아 있는가?
|
||||
- Docker local ADB가 `device` 상태를 보는가?
|
||||
|
||||
---
|
||||
|
||||
## 7. Android SDK license 관련
|
||||
|
||||
현재 `scripts/flutter-docker.sh`에는 Android SDK license 선행 승인 로직이 들어 있다.
|
||||
|
||||
다음과 같은 오류가 나면 먼저 cache 상태를 의심한다:
|
||||
|
||||
- `ndk;28.2.13676358` license not accepted
|
||||
- `CMake 3.22.1` license not accepted
|
||||
|
||||
**확인 경로**:
|
||||
|
||||
```bash
|
||||
ls -la /home/ubuntu/workspace/tdc114plus/.docker-cache/flutter/android-sdk/licenses/
|
||||
```
|
||||
|
||||
이 디렉터리들이 비어 있지 않으면 재사용되는 것이 정상이다.
|
||||
|
||||
---
|
||||
|
||||
## 8. 정상 기대 상태
|
||||
|
||||
정상 재개 기준:
|
||||
|
||||
- ✅ `./scripts/check-baron-api-env.sh` 통과 (0 failures, 0 warnings)
|
||||
- ✅ `./scripts/api-smoke.sh` 통과 (성공 코드 0)
|
||||
- ✅ Android emulator device 인식 성공
|
||||
- ✅ integration test 통과
|
||||
|
||||
**Integration test에서 확인할 실제 홈화면 기대값**:
|
||||
|
||||
로그인 후 홈화면에는 `문형석`의 조직 slug `is-3` 기준 팀 직원목록이 보여야 한다:
|
||||
|
||||
- `직원검색`
|
||||
- `검색 결과`
|
||||
- `문형석`
|
||||
- `IS3`
|
||||
|
||||
---
|
||||
|
||||
## 9. 다음 조치
|
||||
|
||||
위 순서 중 어느 단계에서 실패했는지 `docs/daily-issues/YYYY-MM-DD.md`에 남긴다.
|
||||
|
||||
기록할 최소 항목:
|
||||
|
||||
- 실패 단계 (예: 3.2, 5.1, 5.2 등)
|
||||
- 첫 번째 에러 메시지
|
||||
- 수행한 자동 복구 명령
|
||||
- 복구 성공 여부
|
||||
- 추가 수동 개입 필요 여부 및 사유
|
||||
|
||||
**기록 예시**:
|
||||
|
||||
```
|
||||
## 2026-07-06 출근 재기동
|
||||
|
||||
### 진행 상황
|
||||
- [x] 3.1 Baron SSO 초기화: 성공
|
||||
- [x] 3.2 상태 확인: 초기 실패 (baron_backend not running)
|
||||
- [x] 5.1 자동 복구: docker compose 재시작 → 성공
|
||||
- [x] 5.2 api-smoke 재확인: 통과
|
||||
- [ ] 6.0 Android emulator: 미진행 (시간 부족)
|
||||
|
||||
### 실패 내역
|
||||
- Initial check-baron-api-env.sh: WARN baron_backend not running
|
||||
- Resolved with: docker compose -f ... up -d
|
||||
- No source code changes needed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 부록: 명령 치트시트
|
||||
|
||||
### 빠른 전체 초기화 (추천)
|
||||
|
||||
```bash
|
||||
# 1. Baron SSO 전체 재시작 (권장)
|
||||
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml down 2>/dev/null || true
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml up -d
|
||||
sleep 30
|
||||
|
||||
# 2. tdc114plus 상태 확인
|
||||
cd /home/ubuntu/workspace/tdc114plus
|
||||
./scripts/check-baron-api-env.sh && ./scripts/api-smoke.sh
|
||||
```
|
||||
|
||||
### 컨테이너 상태 모니터링
|
||||
|
||||
```bash
|
||||
# 실시간 로그 보기
|
||||
docker logs -f baron_backend # 백엔드 로그
|
||||
docker logs -f ory_kratos # 인증 로그
|
||||
|
||||
# 모든 baron/ory 컨테이너 상태
|
||||
docker ps | grep -iE "baron|ory"
|
||||
|
||||
# 전체 상태 요약
|
||||
docker ps --format '{{.Names}} {{.Status}}'
|
||||
```
|
||||
|
||||
### 긴급 초기화 (최후의 수단)
|
||||
|
||||
```bash
|
||||
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
|
||||
|
||||
# 모든 관련 컨테이너 강제 제거
|
||||
docker ps -a --format '{{.Names}}' | grep -iE "baron|ory|sso" | xargs -r docker rm -f
|
||||
|
||||
# 전체 재시작
|
||||
docker compose -f docker-compose.yaml -f compose.infra.yaml -f compose.ory.yaml up -d
|
||||
|
||||
# 서비스 안정화 대기
|
||||
sleep 40
|
||||
|
||||
# 상태 확인
|
||||
docker ps | grep -iE "baron_backend|ory_kratos"
|
||||
```
|
||||
|
||||
### 일반적인 문제 해결
|
||||
|
||||
```bash
|
||||
# 권한 문제 수정 (config 디렉터리 쓰기 불가)
|
||||
cd /home/ubuntu/workspace/baron-sso-tdc114plus-api
|
||||
chmod -R u+w config/.generated/ 2>/dev/null || true
|
||||
|
||||
# Ory 마이그레이션 재시도
|
||||
docker compose -f docker-compose.yaml -f compose.ory.yaml up kratos-migrate
|
||||
|
||||
# 특정 컨테이너만 재시작
|
||||
docker restart baron_backend
|
||||
docker restart ory_kratos
|
||||
|
||||
# 로그 대량 확인
|
||||
docker logs baron_backend 2>&1 | grep -i error | tail -20
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 변경 이력
|
||||
|
||||
### v2.0 (2026-07-06)
|
||||
|
||||
- 자동 복구 정책 섹션 추가 (섹션 4)
|
||||
- Ory 포함 필수 명시 (섹션 3.1)
|
||||
- 컨테이너 정리 자동화 (섹션 5.1)
|
||||
- 안정화 대기 시간 추가 (30~40초)
|
||||
- 권한 문제 자동 처리 설명 추가
|
||||
- 명령 치트시트 부록 추가
|
||||
- 문제 기록 템플릿 추가 (섹션 9)
|
||||
|
||||
### v1.0 (2026-07-03)
|
||||
|
||||
초기 버전: 기본 기동 절차 및 복구 순서
|
||||
Reference in New Issue
Block a user