tdc114plus/260720_tdc114plus 모바일 배포 검토.md 추가

This commit is contained in:
2026-07-20 14:18:31 +09:00
parent 4d8debf393
commit 3bb5de1791
@@ -0,0 +1,763 @@
# tdc114plus 모바일 배포 검토 회의 정리
작성일: 2026-07-20
상태: 회의 준비 초안
목적: 신규앱 `tdc114plus`의 Android 배포 방식, 향후 iOS 추가 시 검토사항, `tdc114plus-auth` 중계서버 운영 위치, 배포 전략을 회의 전에 쉽게 검토할 수 있도록 정리한다.
관련 문서:
- `docs/00_guide_tdc114plus_work_progress_timetable_2026-07-02.md`
- `docs/00_guide_tdc114plus_deployment_migration_matrix_2026-07-19.md`
- `docs/00_policy_tdc114plus_auth_repo_2026-07-15.md`
## 1. 이번 회의에서 결정해야 할 핵심
이번 회의의 핵심 질문은 아래 3가지다.
1. 신규앱을 어떤 절차로 배포할 것인가
2. `tdc114plus-auth` 중계서버를 어디에 둘 것인가
3. 서버 배포 전략은 블루/그린, 롤링, 카나리 중 무엇이 맞는가
현재 문서 기준으로 이미 비교적 명확한 전제는 아래와 같다.
- 최종 배포 직접 대상은 `tdc114plus` 앱과 `tdc114plus-auth` 서버다.
- 로컬 개발용 `baron-sso-tdc114plus-api` worktree는 최종 배포 필수 구성으로 보지 않는다.
- 신규앱은 Baron SSO 원본 `staging` 연동을 먼저 안정화한 뒤 `production`으로 승격하는 흐름이 기본값이다.
즉 이번 회의는 완전히 백지상태의 논의가 아니라, 이미 정리된 방향을 실제 운영 가능한 배포 구조로 굳히는 회의에 가깝다.
## 2. 먼저 쉽게 보는 결론
현재 기준 추천안은 아래와 같다.
### 2.1 앱 배포
- 처음부터 production 직행보다는 `staging 서버 구성 -> 내부 테스트 APK 배포 -> 운영 체크 완료 후 production 배포` 순서가 안전하다.
- Android 앱은 우선 `내부 배포용 APK 또는 AAB` 기준으로 시작하고, 외부 공개 앱스토어 배포는 후순위로 둔다.
- 앱 코드 저장소와 서버 저장소는 분리 유지한다.
### 2.2 중계서버 배치
- `tdc114plus-auth`는 Baron SSO 본체 저장소에 흡수하지 않고 별도 서버/별도 저장소/별도 배포 단위로 유지하는 쪽이 맞다.
- 다만 물리 서버를 완전히 따로 만들지, 기존 운영 서버 안에서 서브도메인 기반으로 분리할지는 인프라 사정에 따라 선택할 수 있다.
- 가장 현실적인 1차안은 `114-auth.hmac.kr` 같은 별도 서브도메인으로 분리하고, 실행 주체는 독립 서비스로 유지하는 것이다.
### 2.3 배포 전략
- 신규앱의 현재 규모와 위험도를 보면 `tdc114plus-auth` 서버는 `블루/그린`이 가장 설명하기 쉽고 운영 리스크도 낮다.
- 롤링은 인프라가 단순할 때 쓸 수 있지만, 인증/세션/콜백 문제가 생기면 원인 추적이 조금 더 번거롭다.
- 카나리는 장기적으로 좋을 수 있으나, 현재 단계에서는 운영도와 관찰체계가 더 필요하다.
요약하면 현재 회의에서 제안하기 좋은 1차 권장안은 아래다.
- 앱: `staging -> 내부 검증 -> production`
- 서버 위치: `독립 서비스 + 서브도메인 분리`
- 서버 배포 방식: `블루/그린`
## 3. 신규앱 배포방법 정리
## 3.1 앱 배포에서 실제로 나눠서 봐야 할 것
안드로이드 배포는 보통 아래 3개를 따로 봐야 한다.
1. 소스코드를 어디서 관리하는가
2. 빌드 결과물 APK/AAB를 어떻게 만드는가
3. 만들어진 결과물을 누구에게 어떤 경로로 배포하는가
이번 프로젝트에서는 이 3개를 아래처럼 이해하면 쉽다.
- 소스코드 관리: Gitea 저장소
- 빌드: 로컬 또는 CI에서 APK/AAB 생성
- 배포: 내부 사용자에게 설치 파일 전달 또는 관리형 배포
즉 Gitea는 "앱을 직접 설치해 주는 도구"라기보다, "소스와 버전과 변경이력을 관리하는 중심 저장소"라고 보면 된다.
## 3.2 Gitea를 이용한 배포를 아주 쉽게 설명하면
Gitea를 처음 접할 때 가장 헷갈리는 부분은 "Gitea가 곧 배포 서버인가?"라는 점인데, 보통은 그렇지 않다.
Gitea의 기본 역할은 아래와 같다.
- 소스코드 저장
- 브랜치 관리
- 커밋 이력 관리
- 태그와 릴리스 버전 관리
- 협업용 리뷰와 병합 관리
배포 관점에서는 Gitea를 아래처럼 사용한다.
1. 개발자가 기능 작업 브랜치에서 코드 수정
2. 테스트 후 `main` 또는 `release` 성격 브랜치로 병합
3. 특정 시점에 `v0.1.0`, `v0.2.0` 같은 태그 생성
4. 그 태그 기준으로 APK/AAB를 빌드
5. 빌드 결과물을 내부 배포 채널에 올림
6. 운영 이슈가 없으면 다음 버전으로 승격
즉 "Gitea를 이용한 배포"는 정확히 말하면 아래 뜻에 가깝다.
- Gitea에서 릴리스 기준 버전을 확정하고
- 그 버전으로 APK/AAB를 빌드하고
- 결과물을 staging 또는 production 배포 절차에 따라 배포한다
## 3.3 Gitea 기준 권장 운영 흐름
회의에서 설명하기 쉬운 흐름은 아래 순서다.
1. 개발 브랜치에서 기능 개발
2. 테스트 완료 후 `main` 병합
3. 배포 후보 버전에 태그 부여
4. 태그 기준으로 staging APK/AAB 빌드
5. staging 환경에서 실기기 로그인, 직원검색, 조직도, 프로필 사진 확인
6. 문제 없으면 같은 커밋 또는 새 릴리스 태그로 production 빌드
7. production 배포 후 장애 모니터링
이 흐름의 장점은 아래와 같다.
- 어떤 코드가 배포됐는지 추적이 쉽다
- 문제가 생겼을 때 어느 버전으로 돌아가야 하는지 واضح하게 보인다
- 앱과 서버의 버전 기준을 맞추기 쉽다
## 3.4 Gitea 기준 브랜치 예시
가장 단순하게는 아래 구조로도 충분하다.
- `main`: 다음 배포 후보가 모이는 기본 브랜치
- `feature/...`: 기능 개발 브랜치
- `hotfix/...`: 운영 장애 긴급 수정 브랜치
운영이 더 커지면 아래를 추가할 수 있다.
- `release/...`: 배포 직전 안정화 브랜치
하지만 현재 단계에서는 브랜치가 너무 많아지면 오히려 관리가 어려워질 수 있으므로 아래 정도가 현실적이다.
- 개발은 `feature/...`
- 검토 후 `main` 병합
- 배포 시 태그 생성
## 3.5 Gitea와 staging/prod를 연결하는 이해하기 쉬운 예시
예를 들어 아래처럼 생각하면 된다.
- `main`의 특정 커밋 `abc1234`가 테스트를 통과했다.
- 그 커밋에 `v0.3.0-rc1` 태그를 붙인다.
- 이 버전으로 staging APK를 만든다.
- staging 서버와 staging 중계서버에 연결해서 실기기 검증을 한다.
- 문제 없으면 같은 커밋에 `v0.3.0` 태그를 붙이거나 새 릴리스 태그를 만든다.
- 그 버전으로 production APK를 만든다.
즉 Gitea는 "어떤 코드를 staging에 올렸고, 어떤 코드를 production에 올렸는지 기록하는 기준점" 역할을 한다.
## 3.6 신규앱 배포 채널 후보
안드로이드 앱 배포 채널은 크게 아래처럼 나눌 수 있다.
| 방식 | 설명 | 장점 | 단점 | 현재 적합도 |
| --- | --- | --- | --- | --- |
| APK 직접 배포 | APK 파일을 직접 전달해 설치 | 가장 빠르고 단순 | 설치 관리, 버전 통제, 보안 통제가 약할 수 있음 | 초기 내부 테스트에 적합 |
| AAB/Managed Store | 관리형 스토어 또는 사내 배포 체계 이용 | 버전 관리와 배포 통제가 좋음 | 초기 준비가 더 필요 | 운영 단계에 적합 |
| 일반 공개 스토어 | Play 스토어 공개 배포 | 배포 체계가 표준적 | 내부 전용 앱이면 과할 수 있음 | 현재는 우선순위 낮음 |
현재 프로젝트 성격상 내부/협력사 중심이라면 아래 순서가 자연스럽다.
1. 내부 staging 검증용 APK
2. 제한된 운영 사용자 대상 production APK 또는 관리형 배포
3. 필요 시 나중에 관리형 스토어 체계 확장
## 3.7 iOS를 추가할 경우 배포 경로는 어떻게 달라지는가
iOS는 Android처럼 APK를 바로 전달하는 방식으로 생각하면 안 된다.
보통 아래 경로로 본다.
- 내부 테스트: `TestFlight`
- 사내 관리형 배포: `Apple Business Manager` 또는 `MDM`
- 일반 공개 배포: `App Store`
현재 프로젝트 성격상 iOS는 아래 순서가 가장 현실적이다.
1. 개발/QA용 실기기 테스트
2. 내부 사용자 대상 `TestFlight`
3. 운영 구조가 안정되면 `Apple Business Manager` 또는 정식 배포 검토
즉 Android는 초기 APK 직접 배포가 비교적 쉽지만, iOS는 초반부터 Apple 배포 절차를 일정에 포함해야 한다.
## 3.8 Android만 할 때와 iOS까지 같이 할 때의 차이
Android만 진행할 때는 핵심이 아래에 가깝다.
- APK/AAB 빌드
- staging/production 서버 연결
- 실기기 설치 검증
반면 iOS가 추가되면 아래 준비가 더 들어간다.
- Apple Developer 계정 및 권한
- Bundle ID 확정
- Provisioning Profile
- 배포용 인증서/서명
- Universal Link 설정
- iPhone 실기기 테스트
- TestFlight 등록 및 검수 대기
그래서 iOS는 "코드 조금 더 만드는 일"이라기보다 "플랫폼 운영 준비를 하나 더 여는 일"에 가깝다.
## 3.9 iOS 추가 시 바로 회의에서 말해둘 핵심
아래 문장으로 정리하면 이해가 쉽다.
"iOS는 Flutter 공통 코드 재사용이 가능해서 화면과 비즈니스 로직은 상당 부분 함께 가져갈 수 있지만, 실제 배포와 로그인 링크 처리 단계에서는 Apple 계정, 서명, Universal Link, TestFlight 절차가 별도로 필요하므로 Android만 할 때보다 준비 단계와 검증 기간이 더 필요합니다."
## 4. staging 서버를 먼저 둘지, 바로 production으로 갈지
## 4.1 결론
현재는 `staging 먼저`가 맞다.
바로 production으로 가는 것은 아래 이유로 위험하다.
- 로그인 승인 링크와 세션 발급 흐름이 아직 민감하다
- `tdc114plus-auth`가 앱 전용 인증 broker 역할을 한다
- 프로필 사진 프록시, org-context proxy, OIDC callback 등 외부 연동 지점이 많다
- 실기기에서만 드러나는 환경 문제를 production에서 처음 만나면 대응 비용이 커진다
## 4.2 staging을 먼저 두는 이유
staging은 단순히 "테스트용 서버"가 아니라 운영 전 최종 예행연습 환경이라고 생각하면 된다.
staging에서 확인해야 할 대표 항목은 아래와 같다.
- 문자 승인 로그인 실제 동작
- App Link 또는 callback 흐름
- `tdc114plus-auth` 세션 발급
- 직원검색, 조직도, 상세 조회
- 프로필 사진 1순위, 2순위, 기본 아바타 fallback
- 장애 시 로그 추적 가능 여부
- 서버 설정값과 비밀키 주입 방식
## 4.3 production 직행의 장점도 있기는 하다
production 직행의 장점은 아래 정도다.
- 환경이 하나라서 단순하다
- 서버를 두 번 만들지 않아도 된다고 느낄 수 있다
- 초기 속도는 빨라 보일 수 있다
하지만 지금 프로젝트에서는 이 장점보다 단점이 더 크다.
- 장애가 나면 바로 운영 이슈가 된다
- 로그인/인증 계층 문제는 영향 범위가 넓다
- rollback 판단이 더 어려워진다
## 4.4 회의에서 추천할 문장
아래 정도로 정리하면 전달이 쉽다.
"신규앱은 인증과 조직도 연동이 포함된 구조라서, 일반 화면 앱보다 운영 리스크가 높습니다. 따라서 production 직행보다 Baron SSO 원본 staging 연동을 먼저 안정화하고, 실기기 검증이 끝난 뒤 production으로 승격하는 구조가 맞습니다."
## 5. `tdc114plus-auth` 중계서버를 어디로 둘지
## 5.1 먼저 정리할 전제
현재 문서 기준으로 `tdc114plus-auth`는 아래 역할을 한다.
- 앱의 로그인 시작 요청 수신
- Baron SSO headless/link API 호출
- 앱 세션 발급
- org-context proxy
- 프로필 사진 lookup 및 네이버웍스 사진 프록시
즉 단순 정적 파일 서버가 아니라, 실제 운영 로직과 보안 설정을 가지는 독립 서비스다.
그래서 저장소도 별도이고, 운영 단위도 별도로 보는 것이 맞다.
## 5.2 배치안 1: 완전 별도 서버
설명:
- `tdc114plus-auth`만 위한 별도 VM 또는 별도 컨테이너 서버를 둔다.
장점:
- 장애 분리가 가장 명확하다
- 보안 경계가 분명하다
- 서버 리소스와 로그를 독립적으로 관리하기 쉽다
- 향후 scale-out이나 교체가 쉽다
단점:
- 인프라 비용과 운영 포인트가 늘어난다
- 서버 provisioning, 인증서, 모니터링 구성이 추가된다
언제 적합한가:
- 장기 운영 확률이 높고
- 사용자 수가 늘어날 가능성이 있고
- 인증 broker를 명확히 분리하고 싶을 때
## 5.3 배치안 2: 기존 운영서버 안에 독립 서비스로 배치
설명:
- 물리적으로는 기존 시스템 운영서버 또는 Baron SSO 관련 서버에 두되, 프로세스/컨테이너/리버스프록시 레벨에서 독립 서비스로 운영한다.
- 예: `114-auth.hmac.kr` -> reverse proxy -> `tdc114plus-auth`
장점:
- 인프라 준비가 빠르다
- 인증서와 네트워크 구성을 재활용하기 쉽다
- 운영팀이 익숙한 서버에 올릴 수 있다
단점:
- 물리 분리는 아니므로 리소스 충돌 가능성이 있다
- 잘못 운영하면 "서버는 같고 서비스만 다름" 상태에서 경계가 흐려질 수 있다
언제 적합한가:
- 초기 운영 진입 속도가 중요하고
- 완전 별도 서버까지는 아직 부담일 때
## 5.4 배치안 3: Baron SSO 본체에 흡수
설명:
- `tdc114plus-auth` 기능을 Baron SSO 본체 저장소나 서비스 안으로 넣는다.
장점:
- 겉보기에는 서비스 수가 줄어든다
단점:
- 저장소 경계가 무너진다
- 앱 전용 로직과 SSO 본체 로직이 섞인다
- 긴급 장애 대응 시 영향 범위가 커진다
- 배포 타이밍을 분리하기 어렵다
현재 판단:
- 이 안은 비권장이다.
이미 기존 문서에서도 `tdc114plus-auth`는 별도 저장소, 별도 배포 단위로 유지하는 방향이 정리되어 있다.
## 5.5 서브도메인으로 두는 안은 어떤 의미인가
사용자가 말한 "Baron SSO쪽에 서브도메인식으로 넣는지"는 보통 아래 두 의미 중 하나다.
1. 서버 자체도 Baron 쪽 인프라 안에 둔다
2. 주소만 Baron 계열 도메인/서브도메인으로 준다
이 둘은 꼭 같은 말이 아니다.
예를 들어 아래 구조가 가능하다.
- 주소: `114-auth.hmac.kr`
- 실제 실행: 독립 컨테이너 또는 독립 서비스
- 네트워크/인증서: 기존 운영 인프라 활용
이 방식은 "주소는 자연스럽게 연결되지만 서비스 경계는 유지"할 수 있어서 현실성이 높다.
## 5.6 현재 회의에서 추천할 중계서버 방향
가장 현실적인 추천은 아래다.
1. `tdc114plus-auth`는 독립 서비스로 유지
2. 주소는 `114-auth.hmac.kr` 같은 전용 서브도메인 사용
3. 초기에는 기존 운영 인프라 또는 Baron 인프라 안의 독립 서비스로 올릴 수 있음
4. 사용자 증가나 운영 부담이 커지면 별도 서버로 분리 가능하게 설계
즉 "처음부터 무조건 완전 별도 물리 서버"가 아니라, "서비스 경계는 분리하고 인프라는 현실적으로 시작"하는 방향이다.
## 6. 블루/그린, 롤링, 카나리 비교
여기서는 `tdc114plus-auth` 같은 서버 배포 전략을 중심으로 설명한다.
앱 APK 자체 배포는 서버와 달리 사용자가 설치한 버전이 남기 때문에, 아래 전략은 주로 서버 쪽에 더 직접적으로 적용된다.
## 6.1 블루/그린 배포
뜻:
- 현재 운영 중인 서버 묶음이 `Blue`
- 새 버전 서버 묶음이 `Green`
- 새 버전 준비가 끝나면 트래픽을 한 번에 Green으로 전환
장점:
- rollback이 빠르다
- 전환 전까지 새 버전을 충분히 검증할 수 있다
- 인증/콜백 계층처럼 민감한 서비스에 설명하기 쉽다
단점:
- 서버 자원을 두 벌 준비해야 한다
- 환경 동기화가 안 맞으면 전환 직후 문제가 날 수 있다
신규앱 적합도:
- 높음
왜 잘 맞는가:
- `tdc114plus-auth`는 로그인, 세션, 프록시를 담당하므로 장애 시 즉시 되돌릴 수 있어야 한다
- 운영팀과 비개발자에게도 설명이 쉽다
## 6.2 롤링 배포
뜻:
- 여러 서버 인스턴스가 있다면 하나씩 순서대로 새 버전으로 교체하는 방식
장점:
- 추가 자원이 블루/그린보다 적게 들 수 있다
- 대규모 서비스에서 일반적으로 많이 쓴다
단점:
- 구버전과 신버전이 잠시 섞여 운영된다
- 세션/콜백/응답 포맷 차이가 있으면 문제 원인 추적이 어려울 수 있다
신규앱 적합도:
- 중간
왜 조심해야 하는가:
- 인증 broker에서 구버전/신버전이 섞이면 로그인 중 일부만 실패하는 식의 애매한 장애가 날 수 있다
## 6.3 카나리 배포
뜻:
- 전체 사용자 중 일부에게만 새 버전을 먼저 보낸 뒤, 이상이 없으면 점차 확대하는 방식
장점:
- 위험을 아주 작게 시작할 수 있다
- 실제 운영 사용자 반응을 조금씩 볼 수 있다
단점:
- 관찰 지표, 라우팅 제어, 사용자 분리 기준이 필요하다
- 운영 난이도가 높다
신규앱 적합도:
- 장기적으로는 좋을 수 있으나 지금 당장은 중간 이하
왜 지금은 이른가:
- 현재는 먼저 배포 기준 구조를 단순하게 확정하는 것이 더 중요하다
- 카나리를 잘 하려면 로그, 모니터링, 비율 제어, 빠른 롤백 체계가 먼저 안정적이어야 한다
## 6.4 한눈에 보는 비교표
| 방식 | 설명 난이도 | 운영 난이도 | 롤백 속도 | 추가 인프라 요구 | 현재 추천도 |
| --- | --- | --- | --- | --- | --- |
| 블루/그린 | 쉬움 | 중간 | 매우 빠름 | 중간~높음 | 가장 추천 |
| 롤링 | 중간 | 중간 | 보통 | 낮음~중간 | 차선 |
| 카나리 | 어려움 | 높음 | 빠를 수도 있으나 운영 복잡 | 높음 | 후순위 |
## 6.5 회의에서 말하기 쉬운 추천 문장
"`tdc114plus-auth`는 로그인과 세션을 담당하므로 배포 후 바로 장애가 보일 수 있습니다. 그래서 신구 버전이 섞이는 롤링보다, 새 버전을 미리 준비해 두고 전환 후 문제 시 즉시 되돌리기 쉬운 블루/그린이 현재 단계에 더 적합합니다."
## 7. 이번 회의에서 제안할 권장안
## 7.1 최종 권장안
아래 안을 1차 기본안으로 제안하는 것이 가장 무난하다.
1. 앱 배포는 `staging -> 내부 실기기 검증 -> production` 순서로 진행
2. `tdc114plus-auth`는 별도 저장소와 별도 서비스로 유지
3. 주소는 `114-auth.hmac.kr` 같은 전용 서브도메인 사용
4. 초기 인프라는 기존 운영서버 또는 Baron 인프라 안의 독립 서비스로 시작 가능
5. 서버 배포 전략은 우선 `블루/그린` 채택
6. `baron-sso-tdc114plus-api`는 배포 필수 구성에서 제외
## 7.2 이렇게 제안하는 이유
- 현재 문서 방향과 가장 잘 맞는다
- 운영 안정성과 현실성을 같이 잡을 수 있다
- 운영 책임자가 바로 판단하기 쉬운 구조다
- 나중에 확장할 여지도 남긴다
## 7.3 iOS 추가를 전제로 보면 어떤 판단이 필요한가
iOS까지 염두에 두면 아래 판단을 회의에서 같이 받아두는 편이 좋다.
1. 올해 범위가 `Android 우선 출시 후 iOS 확장`인지
2. 아니면 `Android/iOS 동시 준비`인지
3. Apple Developer 계정과 배포 권한을 누가 관리하는지
4. TestFlight로 내부 배포할지, Apple Business Manager 또는 MDM까지 갈지
현재 프로젝트 상태와 기존 문서 흐름을 보면, 가장 현실적인 방향은 아래다.
- 1차: Android staging/production 구조 안정화
- 2차: 공통 코드 유지 전제로 iOS 확장
- 3차: iOS TestFlight 내부 검증 후 운영 판단
즉 iOS를 완전히 배제하는 것이 아니라, Android 운영 구조를 먼저 굳힌 뒤 iOS를 붙이는 순차 확장이 가장 무난하다.
## 8. iOS 추가 시 작업 단계 검토
## 8.1 전체 관점
iOS 추가 작업은 크게 아래 4묶음으로 나눌 수 있다.
1. 사전 준비
2. 앱 코드 및 플랫폼 설정
3. 로그인/링크/배포 검증
4. 운영 준비
기존 Flutter 공통 코드가 이미 있다는 전제에서는 Android를 처음 만드는 것보다 짧을 수 있다. 하지만 Apple 배포 절차 때문에 체감 일정은 생각보다 짧지 않을 수 있다.
## 8.2 단계별 작업 정리
| 단계 | 작업 내용 | 주요 확인 포인트 |
| --- | --- | --- |
| 1 | iOS 범위 확정 | Android와 동일 기능 범위인지, 보류 기능이 있는지 |
| 2 | Apple 계정/권한 준비 | Apple Developer 계정, 팀 권한, 인증서 관리 주체 |
| 3 | iOS 프로젝트 기본 설정 정리 | Bundle ID, signing, provisioning, build config |
| 4 | 로그인/링크 방식 적용 | Universal Link, callback, redirect URI, associated domains |
| 5 | Flutter 공통 기능 iOS 정합성 점검 | 직원검색, 조직도, 상세, 즐겨찾기, 세션 저장 |
| 6 | iOS 플랫폼 차이 보정 | 전화/문자 호출, 권한 안내, secure storage, WKWebView 동작 |
| 7 | `tdc114plus-auth` 연동 검증 | staging에서 로그인, org-context, profile image 동작 |
| 8 | 실기기 테스트 | iPhone에서 로그인, 앱 복귀, 세션 유지, 링크 재진입 |
| 9 | 배포 준비 | TestFlight 업로드, 배포 그룹, 릴리스 노트 |
| 10 | 운영 전 점검 | 장애 대응, 버전 정책, 사용자 배포 절차 |
## 8.3 단계별 설명
### 1단계: iOS 범위 확정
가장 먼저 확인할 것은 "iOS도 Android와 기능을 완전히 같게 가져갈 것인가"다.
현재 문서 흐름상 아래 기능은 Android/iOS 공통 범위로 보기 좋다.
- 로그인
- 직원검색
- 조직도
- 직원 상세
- 전화/문자 실행
- 즐겨찾기
- 프로필 사진 조회
반면 아래는 별도 검토가 필요하다.
- 향후 푸시 알림
- 기기 보안 강화
- iOS 전용 운영정책
### 2단계: Apple 계정 및 서명 준비
이 단계는 개발보다 운영 준비에 가깝다.
필요 항목 예시는 아래다.
- Apple Developer Program 계정
- App ID 또는 Bundle ID
- 인증서 발급 권한
- Provisioning Profile
- 배포 담당자 계정
이 단계가 늦어지면 코드가 준비돼도 실제 배포 테스트를 못 하게 된다.
### 3단계: iOS 프로젝트 설정 정리
Flutter 공통 코드가 있어도 iOS 프로젝트 설정은 따로 확인해야 한다.
대표 항목:
- 앱 이름
- Bundle Identifier
- signing team
- build configuration
- URL/도메인 설정
- Info.plist 권한 문구
### 4단계: 로그인 및 링크 처리 적용
Android의 App Link와 비슷한 개념이 iOS에서는 Universal Link다.
여기서 확인해야 하는 것은 아래다.
- callback URL 또는 redirect URI
- associated domains 설정
- Apple App Site Association 파일 배포
- 앱 설치 상태에서 링크 클릭 시 앱 복귀 여부
이 단계는 실제 로그인 성공과 직결되므로 일정상 중요하다.
### 5단계: 공통 기능 iOS 정합성 점검
Flutter 공통 코드라도 아래 항목은 iOS 실기기에서 다시 확인해야 한다.
- 로그인 후 직원검색 진입
- 조직도 필터와 초기 선택 상태
- 상세화면 표시
- 프로필 이미지 로딩
- 즐겨찾기 유지
### 6단계: iOS 플랫폼 차이 보정
여기서는 "Android에서는 되는데 iOS에서는 동작이 조금 다른 것"을 맞춘다.
대표 예시는 아래다.
- 전화/문자 앱 호출 방식
- 권한 안내 문구
- secure storage 동작
- WKWebView 정책 차이
- 앱 백그라운드 복귀 시 세션 처리
### 7단계: staging 연동 검증
iOS도 Android와 동일하게 production 직행보다 staging 검증이 먼저다.
확인 항목:
- `tdc114plus-auth` 로그인 시작/완료
- org-context proxy
- profile-image proxy
- callback 이후 앱 복귀
### 8단계: 실기기 테스트
iOS는 simulator만으로 끝내기 어렵다. 실제 iPhone에서 확인해야 한다.
특히 아래가 중요하다.
- 문자 링크 또는 로그인 링크 처리
- 앱이 백그라운드에 있을 때 복귀
- 세션 저장 유지
- 배포 빌드 기준 동작
### 9단계: TestFlight 배포 준비
내부 검증용으로는 TestFlight가 가장 현실적이다.
여기서는 아래가 필요하다.
- archive/build 생성
- App Store Connect 등록
- 테스터 그룹 지정
- 배포 노트 작성
### 10단계: 운영 전 점검
마지막으로 아래를 정리해야 한다.
- iOS 버전명 규칙
- Android와 iOS의 동기 배포 여부
- 장애 시 재배포 절차
- 운영 담당자 확인 절차
## 8.4 iOS 추가 시 예상 소요기간 검토
아래 기간은 "현재 Android 공통 코드가 어느 정도 있는 상태에서 iOS 대응을 추가한다"는 전제로 본 대략치다.
또한 아래 항목이 이미 준비되어 있다고 가정한다.
- `tdc114plus-auth` staging 서버가 준비됨
- Baron SSO staging 연동이 Android 기준으로 먼저 안정화됨
- Apple 계정 발급이 장기 지연되지 않음
## 8.5 권장 기간표
| 구분 | 예상 기간 | 설명 |
| --- | --- | --- |
| 사전 준비 및 계정/서명 정리 | 3~5 영업일 | Apple 계정, Bundle ID, signing, provisioning |
| 로그인/링크/iOS 설정 반영 | 4~6 영업일 | Universal Link, callback, associated domains, 권한 설정 |
| 공통 기능 iOS 실기기 정합성 점검 및 수정 | 5~7 영업일 | 검색, 조직도, 상세, 즐겨찾기, 프로필 이미지 |
| TestFlight 배포 및 내부 검증 | 3~5 영업일 | 빌드, 업로드, 테스터 검증, 수정 반영 |
| 운영 배포 준비 | 2~3 영업일 | 배포 기준, 장애 대응, 운영 체크 |
합산하면 보통 아래 정도로 보는 것이 현실적이다.
- 빠른 경우: `3주 내외`
- 보통 경우: `4주 내외`
- 계정/서명/링크 이슈가 있으면: `5주 이상`
## 8.6 일정 시나리오별 판단
| 시나리오 | 예상 기간 | 특징 |
| --- | --- | --- |
| 낙관 시나리오 | 3주 | Apple 계정과 링크 설정이 빠르게 정리되고, 공통 코드 수정이 적음 |
| 기본 시나리오 | 4주 | 가장 현실적인 기준. 실기기 수정과 TestFlight 재배포 1~2회 포함 |
| 보수 시나리오 | 5~6주 | Universal Link, 서명, 심사/내부 승인 지연 또는 플랫폼 이슈 발생 |
## 8.7 현재 회의에서 추천할 일정 설명
회의에서는 아래 정도로 설명하는 것이 적절하다.
"iOS는 Flutter 공통 코드를 활용할 수 있으므로 Android를 처음 만드는 수준의 장기 일정은 아니지만, Apple 계정, 서명, Universal Link, TestFlight 절차가 추가되므로 Android 안정화 이후 별도 3주에서 4주 정도의 확장 기간을 보는 것이 현실적입니다."
## 8.8 일정 산정 시 주의할 점
아래 항목은 일정에 큰 영향을 준다.
1. Apple Developer 계정과 권한이 이미 준비돼 있는지
2. 실제 테스트용 iPhone을 바로 확보할 수 있는지
3. Universal Link용 도메인 파일 배포를 누가 처리하는지
4. TestFlight 내부 배포 권한이 준비돼 있는지
5. Android와 서버 구조가 먼저 안정화되어 있는지
즉 iOS 일정은 단순 개발 공수보다 "운영 준비물의 선행 여부"에 많이 좌우된다.
## 9. 회의 중 확인받아야 할 질문
아래 질문은 회의에서 꼭 확인받는 것이 좋다.
1. 안드로이드 배포 대상 사용자는 사내 전용인지, 협력사까지 포함인지
2. 내부 APK 직접 배포로 시작해도 되는지, 아니면 처음부터 관리형 배포 체계를 써야 하는지
3. `tdc114plus-auth`를 올릴 수 있는 기존 운영 인프라가 있는지
4. `114-auth.hmac.kr` 같은 전용 서브도메인 사용이 가능한지
5. staging용 도메인과 production용 도메인을 별도로 줄 수 있는지
6. 서버 배포 시 블루/그린을 할 수 있을 만큼 인프라 자원이 있는지
7. 장애 시 rollback 책임자와 절차를 누가 맡는지
8. iOS를 올해 범위에 포함할지, Android 안정화 후 후속 단계로 둘지
9. Apple Developer 계정과 TestFlight 운영 권한을 누가 관리하는지
10. iOS 내부 테스트용 실기기와 담당자를 확보할 수 있는지
## 10. 회의용 짧은 결론 문안
아래 문안은 그대로 읽어도 큰 무리가 없다.
```text
신규앱은 일반 화면 앱이 아니라 인증, 조직도, 프로필 이미지 프록시가 함께 붙는 구조이므로 production 직행보다 staging 안정화가 먼저 필요합니다.
배포 단위는 앱과 tdc114plus-auth 중계서버를 분리하는 것이 맞고, 중계서버는 별도 저장소와 별도 서비스로 유지하되 주소는 114-auth.hmac.kr 같은 전용 서브도메인으로 두는 안이 현실적입니다.
서버 배포 전략은 현재 단계에서는 카나리보다 단순하고 롤백이 빠른 블루/그린이 가장 적합합니다.
iOS를 추가할 경우에는 Flutter 공통 코드 재사용이 가능하더라도 Apple 계정, 서명, Universal Link, TestFlight 절차가 별도로 필요하므로 Android 안정화 이후 약 3주에서 4주 정도의 추가 검토 및 적용 기간을 잡는 것이 현실적입니다.
```
## 11. 회의 후 바로 이어질 실행 항목
회의에서 방향이 정해지면 바로 아래 작업으로 이어가면 된다.
1. staging 도메인, production 도메인, 인증서 담당자 확정
2. `tdc114plus-auth` 배치 위치 확정
3. 앱 빌드 버전 규칙과 Gitea 릴리스 태그 규칙 확정
4. staging APK 배포 및 실기기 점검 체크리스트 작성
5. production 승격 기준표 작성
6. rollback 절차 문서화
7. iOS 포함 시 Apple 계정/권한/도메인 담당자 확인
8. iOS 확장 일정표 초안 작성
## 12. 현재 문서 기준 최종 판단
2026-07-20 현재 프로젝트 문서 흐름과 실제 구조를 함께 보면, 아래 판단이 가장 일관된다.
- 신규앱은 staging을 먼저 두는 것이 맞다.
- `tdc114plus-auth`는 Baron SSO에 흡수하지 않는 독립 서비스가 맞다.
- 다만 도메인과 인프라는 Baron 계열 운영체계를 활용할 수 있다.
- 서버 배포 전략은 블루/그린이 1순위, 롤링이 2순위, 카나리는 추후 검토가 적절하다.
- iOS는 제외가 아니라 후속 확장 대상으로 보되, Android 구조 안정화 후 별도 3주~4주 수준의 준비/검증 기간을 추가로 보는 것이 현실적이다.
필요하면 이 문서를 바탕으로 바로 `회의자료용 1페이지 요약본`이나 `발표 순서형 문안`으로 다시 재구성한다.