- docs/CICD_PIPELINE.md 정본(LIVE) + deploy/README.md 가동중 갱신 - deploy/apk/: publish_app_manifest.sh·mobile-app.html(WISE QR)·itms-latest.json - deploy/nginx: /mobile-app(ITMS 전용)+/downloads/(APK)+매니페스트 서빙 반영 - mobile: EAS 빌드 의존 승격(react-navigation/expo-modules-core/metro)·.easignore·eas appVersionSource Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| apk | ||
| env | ||
| nginx | ||
| static | ||
| systemd | ||
| build.sh | ||
| deploy_itms_prod.sh | ||
| deploy_server_itms_block.py | ||
| gitea-webhook.md | ||
| README.md | ||
ITMS CI/CD 배포 아티팩트
생성: 2026-07-17 (산출물 준비형) → 2026-07-19 적용 완료(LIVE) | 대상 저장소: Gitea
ythong/itms상태: 가동 중. 개발(itms.zioinfo.co.kr: front+auth+api 실로그인)·운영(itms.wise.ai.kr: front-only) 배포 완료, push 자동 연쇄(dev→prod) 동작. 현행 정본 문서는docs/CICD_PIPELINE.md— 아래 2026-07-17 기록은 당시 판정 이력으로 보존(피저빌리티 사유 중 JDK17 부재·DB 미도달은 이후 해소: JDK17 설치됨·dev MariaDB+역설계 스키마 적용).
왜 "적용 대기"인가 (피저빌리티 게이트)
GUARDiA 인프라 서버(zioinfo.co.kr)에서 실측한 결과, ITMS 앱의 실기동(Tier2)은 이 환경에서 불가하다:
- api/batch/datatrans 런타임 DB(MariaDB
ur_itms_db·Oracle XE)가 GUARDiA 인프라에서 도달 불가(고객사 전용망 DB). - 서버 런타임 JDK가 21뿐(JDK17 부재). ITMS는 Boot 2.6.2로 Java 21 미지원.
따라서 실배포는 고객사 배포 환경(대상 기관 DB망 + 기관 프로파일 시크릿 + JDK17)에서 아래 아티팩트를 적용해 수행한다. Tier1(빌드 자동화)만 별도로 쓰려면 빌드 서버에 JDK17을 두고 deploy_server_itms_block.py의 빌드 단계만 사용한다.
구성 특수성
ITMS는 단일-jar가 아니라 4포트 독립 WAR 스택 + 데몬:
| 모듈 | 포트 | 산출물 | 런타임 의존 | systemd |
|---|---|---|---|---|
| auth | 11000 | bootWar | (RSA jwtkey) | itms-auth.service |
| api | 11010 | bootWar | MariaDB ur_itms_db | itms-api.service |
| front | 11020 | bootWar | DB 무접속(REST만) | itms-front.service |
| batch | 11030 | bootWar | MariaDB + Oracle XE + 메일/알림톡 | itms-batch.service |
| datatrans | (데몬) | bootWar | kccfnova/uac_cltr_db + NAS | itms-datatrans.service |
| common | — | 라이브러리(선행 빌드) | — | — |
| legacy/nlib | — | Maven·Java8, CI 제외 | — | — |
파일
| 파일 | 용도 |
|---|---|
deploy_server_itms_block.py |
scripts/deploy/deploy_server.py의 _deploy()에 붙여넣을 elif repo == "itms": 블록(Tier1 빌드+아카이브; 기존 블록 불변) |
build.sh |
모듈별 gradle 빌드(common 선행 → 5모듈 bootWar) — JDK17 필요 |
systemd/itms-*.service |
모듈별 systemd 유닛 템플릿(Tier2, 활성화 조건 충족 시) |
env/itms-*.env.example |
모듈별 env 템플릿(SPRING_PROFILES_ACTIVE=기관) — 실 시크릿은 여기 넣지 말고 서버 로컬에서 관리 |
gitea-webhook.md |
Gitea ythong/itms push webhook 생성 가이드 + 스크립트(미실행) |
적용 절차 (고객사/배포 대상 환경)
- 선결: JDK17 설치, 런타임 DB(MariaDB/Oracle) 연결, 기관 프로파일 시크릿(keystore·yml) 배치.
- CI:
deploy_server_itms_block.py를 배포 서버 deploy_server.py에 병합 → deploy 서비스 재시작. Gitea webhook 생성(gitea-webhook.md). - 빌드:
build.sh(또는 deploy 블록)로common선행 → 5모듈 bootWar. 산출물*/build/libs/*.war. - CD(Tier2):
env/itms-<module>.env에SPRING_PROFILES_ACTIVE=<기관>설정 →systemd/itms-*.service배치 →systemctl daemon-reload && enable --now. - 헬스체크: 11000/11010/11020 도달, batch/datatrans 로그 라이브니스.
보안 불변
- 이 디렉터리 어떤 파일에도 AES 암호문·DB 접속정보·NCP/카카오 키·Gitea 비번·SSH 계정을 하드코딩 금지. 자격증명은 env/서버 로컬에서만.
- force push 금지. 기존 단일-jar 솔루션 배포에 무영향(deploy_server는 itms 블록만 추가).
접속 도메인 (개발서버)
- itms.zioinfo.co.kr (서버 101.79.17.164). 브라우저 진입점 = front(:11020).
- 리버스 프록시:
deploy/nginx/itms.zioinfo.co.kr.conf를/etc/nginx/sites-available/에 배치 →sites-enabled심볼릭 →nginx -t && systemctl reload nginx. - 라이브 조건: ① Tier2 앱 기동(front 등) ② TLS 인증서 발급(certbot -d itms.zioinfo.co.kr). 미충족 시 각각 502 / 인증서 오류.