AI가 만든 애플리케이션을 프로덕션에 올리기까지 필요한 작업
公開日 2026-08-13 · 更新日 2026-08-13 · 最終検証日 2026-08-13
結論
동작하는 코드가 완성된 시점에 끝난 것은 기능 구현뿐입니다. 프로덕션 공개까지는 환경 분리, 시크릿 외부화, 인증과 인가, 입력 검증과 속도 제한, 로그 마스킹, 모니터링 연동, 마이그레이션과 롤백 절차, 백업과 복구 테스트, 의존 패키지 취약점 확인, CI에서의 테스트와 빌드 재현성, 배포와 롤백 절차, 도메인과 TLS, 비용 상한과 알림, 운영 문서가 남습니다. 특히 빠지기 쉬운 것은 시크릿 외부화와 롤백 절차입니다.
この文書の適用条件
| 対象製品 | AI 생성 애플리케이션 전반(언어·프레임워크 비종속) |
|---|---|
| 確認バージョン | 제품 버전에 의존하지 않는 설계상 설명(명령 예시는 npm 6 이상 / pip-audit 2계열 기준) |
| 適用環境 | AWS, Azure, 온프레미스 |
| 必要権限 | 리포지토리 읽기 권한. 배포 설정 확인에는 각 플랫폼의 조회 권한 |
| 実行影響 | 조회 전용(본문 중 명령은 코드를 변경하지 않음) |
| 再起動 | 불필요 |
| 最終検証日 | 2026-08-13 |
そのまま実行できるコマンド
- 対象
- 자사 애플리케이션 리포지토리(언어 무관)
- 権限
- 리포지토리 읽기 권한
- 変更作業
- 없음(검색만 수행)
- Production実行
- 해당 없음(로컬 또는 CI에서 실행)
# 対象: 自組織のアプリケーションリポジトリ(言語不問)
# 権限: リポジトリの読み取り権限
# 変更作業: なし(検索のみ)
# Production 実行: 該当なし(手元またはCIで実行)
# 1) 代表的なキー名に値が直接代入されていないかを探す
# 環境変数から読んでいる行は除外して、残ったものを目視で確認する
grep -rInE "(api[_-]?key|secret|password|passwd|token|access[_-]?key)[[:space:]]*[:=]" --exclude-dir=.git --exclude-dir=node_modules --exclude-dir=vendor . | grep -vF -e "process.env" -e "os.environ" -e "getenv" -e ".example" -e ".sample"
# 2) 秘密鍵そのものが混入していないか
grep -rIn -- "-----BEGIN" --exclude-dir=.git .
# 3) 接続文字列の形(ユーザー名とパスワードが埋め込まれたURL)を探す
grep -rInE "(postgres|mysql|mongodb|redis|amqp)://[^:@/]+:[^@/]+@" --exclude-dir=.git .
# 4) 現在のコードから消しても履歴には残る。過去のコミットも確認する
git log --oneline -S "BEGIN PRIVATE KEY" | head -n 20하나라도 해당되는 경우, 코드에서 지우는 것만으로는 충분하지 않습니다. 해당 키는 이미 유출된 것으로 간주하고 폐기와 재발급을 진행하십시오. 히스토리에서 제거하는 작업은 리포지토리 재작성을 수반하므로 공동 작업자에게 사전 공지가 필요합니다.
- 対象
- Node.js / Python 애플리케이션 리포지토리
- 権限
- 리포지토리 읽기 권한과 패키지 레지스트리 통신 권한
- 変更作業
- 없음(점검만 수행. 수정 명령은 포함하지 않음)
- Production実行
- 해당 없음(CI 또는 개발 환경에서 실행)
# 対象: Node.js / Python のアプリケーションリポジトリ
# 権限: リポジトリの読み取り権限とパッケージレジストリへの通信
# 変更作業: なし(監査のみ)
# Production 実行: 該当なし(CIまたは開発環境で実行)
# Node.js: ロックファイルを基準に既知の脆弱性を照合する
npm audit --audit-level=high
# Python: requirements もしくはインストール済み環境を監査する
pip-audit -r requirements.txt
# コンテナで配布する場合は、ベースイメージ側のパッケージも別途監査対象になる
# (アプリの依存監査だけではOSパッケージの脆弱性は検出されない)`npm audit fix` 같은 자동 수정은 여기서 실행하지 않습니다. 메이저 버전이 올라가면 동작이 바뀔 수 있으므로 CI 테스트가 통과하는지 확인한 뒤 적용하십시오.
結果の読み方
| 列 | 意味 | 確認するポイント |
|---|---|---|
| 환경 분리(Dev / Stg / Prod) | 검증과 프로덕션이 동일한 자격 증명·동일한 데이터베이스를 공유하지 않는 상태 | 프로덕션 데이터베이스에 개발 단말에서 직접 접속할 수 없는 것 |
| 시크릿 관리 | 키가 코드가 아닌 환경 변수 또는 시크릿 스토어에 있는 상태 | 리포지토리 검색에서 키가 0건. 히스토리에도 남아 있지 않을 것 |
| 인증·인가 | 누가 로그인할 수 있는지와, 로그인 후 무엇을 할 수 있는지가 분리된 상태 | 타인의 ID를 지정한 요청이 거부되는 것(수평 권한 확인) |
| 입력 검증과 속도 제한 | 예상치 못한 입력과 과도한 요청에 무너지지 않는 상태 | 타입·길이·범위 검증이 있는 것. 인증 전 엔드포인트에 상한이 있는 것 |
| 로그와 마스킹 | 조사에 충분한 로그가 남고 개인정보나 키가 포함되지 않는 상태 | 요청 ID로 추적할 수 있는 것. 비밀번호·토큰·개인정보가 출력되지 않는 것 |
| 에러 처리와 모니터링 연동 | 실패가 묵살되지 않고 외부에서 관측 가능한 상태 | 미포착 예외가 알림으로 전달되는 것. 헬스 엔드포인트가 의존 대상의 이상을 반영하는 것 |
| 마이그레이션과 롤백 | 스키마 변경 적용 절차와 롤백 절차가 쌍으로 존재하는 상태 | 롤백을 검증 환경에서 1회 실행 완료한 것 |
| 백업과 복구 테스트 | 확보만이 아니라 복원까지 확인된 상태 | 백업에서 복원하여 기동할 수 있음을 확인한 기록이 있는 것 |
| 의존 패키지 취약점 | 알려진 취약점이 파악되고 대응 방침이 정해진 상태 | 점검 명령의 결과가 기록되고, 미대응분에 이유가 있는 것 |
| CI 자동 테스트와 빌드 재현성 | 동일 커밋에서 동일한 산출물을 만들 수 있는 상태 | 락 파일이 고정되어 있는 것. CI에서 테스트와 빌드가 통과하는 것 |
| 배포와 롤백 절차 | 이전 버전으로 되돌리는 절차가 문서화된 상태 | 롤백 소요 시간을 실측한 기록이 있는 것 |
| 도메인과 TLS 인증서 | 정규 도메인에서 HTTPS가 성립하고 갱신이 자동화된 상태 | 인증서 만료일과 자동 갱신 성공 여부가 모니터링 대상에 포함된 것 |
| 비용 상한과 알림 | 예상치 못한 과금이 발생했을 때 알 수 있는 상태 | 예산 알림이 설정되고 알림 수신처가 유효한 것 |
| 운영 문서 | 담당자 외에도 기동·정지·조사가 가능한 상태 | 기동 절차, 정지 절차, 흔한 장애의 대처 방법이 적혀 있는 것 |
こういう状況で使います
- 로컬에서는 동작하지만 프로덕션에 올리는 단계에서 무엇부터 해야 할지 모르겠다
- 설정 파일에 프로덕션 API 키가 직접 적혀 있다
- 개발 환경과 프로덕션 환경이 동일한 데이터베이스를 보고 있다
- 에러가 발생해도 아무에게도 알림이 가지 않고, 사용자 문의로 알게 된다
- 배포는 가능하지만 이전 버전으로 되돌리는 절차가 없다
- 예상치 못한 클라우드 과금이 월말에 드러난다
考えられる原因(可能性の高い順)
01
생성의 목적이 "동작하는 것"에 맞춰져 있다
AI에 주는 지시는 대부분 "이 기능을 구현해 달라"이며, 환경 분리나 모니터링 연동은 지시에 포함되지 않습니다. 지시에 없는 것은 결과물에도 포함되지 않으므로 기능 이외의 부분이 체계적으로 빠집니다.
02
샘플 코드의 관습을 그대로 가져왔다
학습 자료의 샘플은 간결함을 위해 키를 직접 작성하고 에러 처리를 생략하며 단일 환경을 전제로 합니다. 생성물이 이 관습을 그대로 이어받는 경우가 있습니다.
03
운영 요건이 요구사항으로 작성되지 않았다
가용성, 복구 목표, 로그 보관 기간, 비용 상한이 정해져 있지 않으면 구현할 방법이 없습니다. 요건이 없는 상태에서는 빠진 부분을 검출할 수도 없습니다.
04
프로덕션과 동등한 검증 환경이 없다
검증 환경이 없거나 구성이 프로덕션과 다르면 마이그레이션이나 롤백을 시도해 볼 수 없습니다. 시도해 보지 않은 절차는 프로덕션에서 처음으로 실패합니다.
確認手順
- 1
리포지토리 내 시크릿을 검색한다
参照のみ위의 grep 명령으로 직접 작성된 키를 찾아냅니다. 검출된 키는 폐기할 것을 전제로 하십시오.
- 2
환경별 접속 대상을 대조한다
参照のみ각 환경의 설정 파일 또는 환경 변수를 나열해, 데이터베이스·외부 API·스토리지의 접속 대상이 환경별로 분리되어 있는지 확인합니다.
- 3
의존 패키지를 점검한다
参照のみ`npm audit` 또는 `pip-audit`을 실행하고, 심각도가 높은 것부터 확인합니다.
- 4
인증이 필요한 엔드포인트를 나열해 확인한다
低인증 토큰 없이 각 엔드포인트를 호출해, 의도치 않게 공개된 것이 없는지 확인합니다. 검증 환경에서 실시하십시오.
- 5
검증 환경에서 마이그레이션 롤백을 실행한다
中적용과 롤백을 한 번 통과시켜 데이터 손실이 발생하지 않는지 확인합니다. 프로덕션에서는 실시하지 마십시오.
- 6
백업에서 복원하여 기동한다
中확보해 둔 백업을 다른 환경에 복원하여 앱이 기동하고 주요 작업이 가능한지 확인합니다.
対応方法
すぐに実施できる低リスクの対応
키를 환경 변수 또는 시크릿 스토어로 옮긴다
中코드에서 키를 제거하고 환경 변수 또는 매니지드 시크릿 스토어에서 읽도록 변경합니다. 동시에 기존 키를 폐기·재발급합니다.
프로덕션과 검증의 자격 증명을 분리한다
中동일한 키를 양쪽 환경에서 재사용하는 상태를 해소합니다. 분리함으로써 검증 중 사고가 프로덕션으로 번지지 않게 됩니다.
미포착 예외의 알림 수신처를 설정한다
低애플리케이션 예외가 아무 곳에도 전달되지 않는 상태를 해소합니다. 먼저 알림이 도착하는지만 확인합니다.
클라우드 예산 알림을 설정한다
低예상 금액을 초과했을 때 알림이 가도록 합니다. 상한액의 적정성은 운영하면서 조정합니다.
事前検討が必要な変更
환경을 Dev / Stg / Prod로 분리한다
中네트워크, 자격 증명, 데이터를 환경별로 분리합니다. Stg를 프로덕션과 동일한 구성으로 하면 마이그레이션과 롤백 검증이 의미를 가집니다.
로그 마스킹 방침을 정해 적용한다
中비밀번호, 토큰, 개인정보를 로그에 남기지 않는 공통 처리를 넣습니다. 기존 로그에 포함되어 있다면 보관 기간과 삭제 방침도 정합니다.
CI에서 자동 테스트와 빌드를 고정한다
低락 파일을 고정하여 동일 커밋에서 동일한 산출물을 만들 수 있는 상태로 합니다. 빌드가 재현되지 않으면 롤백 대상 산출물도 재현할 수 없습니다.
롤백 절차를 문서화하고 실측한다
中이전 버전으로 되돌리는 절차를 작성하고, 검증 환경에서 실행하여 소요 시간을 측정합니다.
TLS 인증서 갱신을 자동화하고 모니터링한다
低자동 갱신을 설정한 뒤, 갱신 성공 여부와 만료일을 모니터링 대상에 포함합니다. 자동 갱신 설정만으로는 실패를 알 수 없습니다.
再起動・サービス影響を伴う変更
리포지토리 히스토리에서 키를 제거한다
高히스토리 재작성을 수반하며 기존 클론이나 포크와의 정합성이 깨집니다. 공동 작업자의 동의와 작업 시간 확보가 필요합니다. 키 폐기를 우선하고 히스토리 제거는 후속 작업으로 계획하십시오.
프로덕션 데이터베이스에 스키마 변경을 적용한다
高테이블 정의 변경은 취소가 어렵고 실행 중 잠금을 수반할 수 있습니다. 적용 전 스냅샷과 롤백 절차를 준비한 뒤 실시하십시오.
!注意事項
- 코드에서 키를 지워도 그 키는 이미 유출된 것으로 취급하십시오. 리포지토리 공유 범위나 로그에 남아 있을 가능성이 있습니다. 폐기와 재발급이 최우선입니다.
- 프로덕션 데이터베이스에 대한 마이그레이션은 취소가 어려운 작업입니다. 적용 전 스냅샷과 롤백 절차가 갖춰질 때까지 실행하지 마십시오.
- 백업은 확보만으로는 기능하지 않습니다. 복원하여 기동할 수 있음을 확인하지 않은 백업은 복구 수단으로 간주하지 마십시오.
- `npm audit fix --force` 같은 자동 수정은 메이저 버전을 올릴 수 있습니다. CI 테스트가 통과하는지 확인한 뒤 적용하십시오.
- 여기 나열한 항목을 모두 충족해도 장애가 일어나지 않게 되는 것은 아닙니다. 목적은 장애의 근절이 아니라, 일어났을 때 알아채고 되돌릴 수 있는 상태를 만드는 것입니다.
バージョン・環境による違い
これで解決しない場合に確認すること
인증 전에 도달 가능한 엔드포인트를 센다
헬스체크 외에 인증 불필요 엔드포인트가 없는지 확인합니다. 있다면 속도 제한과 입력 검증을 우선합니다.
로그에 개인정보가 포함되어 있지 않은지 샘플링으로 확인한다
최근 로그를 추출하여 이메일 주소·전화번호·토큰이 출력되지 않는지 확인합니다.
의존하는 외부 API가 다운됐을 때의 동작을 확인한다
외부 API 타임아웃 시 앱 전체가 응답 불가 상태가 되지 않는지 확인합니다.
인증서 만료일을 모니터링 대상에 넣었는지 확인한다
자동 갱신 설정이 있어도 실패 시 알아챌 수단이 없으면 같은 결과가 됩니다.
담당자 외 인원도 기동·정지할 수 있는지 확인한다
절차 문서를 다른 담당자에게 넘겨 실행해보게 함으로써 문서에 적히지 않은 전제 지식을 찾아냅니다.
この文書の根拠と限界
一般的な技術説明
이 글은 특정 제품에 의존하지 않는 일반적인 릴리스 전 확인 절차입니다. 명령 예시는 npm과 pip-audit의 공개 사양에 기반합니다. "GIIP 대응 범위" 단락만 GIIP 자체의 운영 절차에 대한 기술이며 고객 사례가 아닙니다. 소요 시간·절감률·장애율 등의 수치는 검증할 수 없어 기재하지 않았습니다.
よくある質問
가장 먼저 해야 할 항목은 무엇인가요?
시크릿 외부화와 환경 분리입니다. 이 두 가지가 끝나지 않으면 이후 작업 중 프로덕션에 영향이 갈 수 있습니다. 다음은 롤백 절차로, 이것이 있으면 이후 변경을 시도하기 쉬워집니다.
코드에서 키를 지우면 안전한가요?
아닙니다. 커밋 히스토리, CI 로그, 공유된 복사본에 남아 있을 수 있습니다. 키는 이미 유출된 것으로 간주하여 폐기·재발급한 뒤 코드와 히스토리 조치를 진행하십시오.
작은 앱이라도 Dev / Stg / Prod 3개 환경이 필요한가요?
최소한 프로덕션과 비프로덕션 2개는 필요합니다. 마이그레이션이나 롤백을 시도할 장소가 없으면 프로덕션에서 처음으로 절차의 결함이 드러납니다. Stg를 프로덕션과 동일한 구성으로 할 수 있다면 3개 환경이 바람직합니다.
AI에게 운영에 필요한 코드도 작성시키면 되지 않나요?
로그 출력이나 헬스 엔드포인트 구현은 생성할 수 있습니다. 다만 알림을 받는 당번, 승인 권한, 비용 상한의 적정성 같은 판단은 코드 바깥에 있습니다. 생성할 수 있는 부분과 결정해야 할 부분을 나눠서 진행하십시오.
취약점이 대량으로 검출되면 어떻게 해야 하나요?
심각도가 높고 외부에서 도달 가능한 경로에서 사용되는 것부터 대응합니다. 모두 동시에 해결할 필요는 없지만, 미대응인 것에 대해서는 이유와 재확인 시점을 기록하십시오.
이 체크리스트를 충족하면 프로덕션에서 문제가 생기지 않나요?
생기지 않는다고는 말할 수 없습니다. 목적은 문제의 근절이 아니라, 문제가 생겼을 때 알아챌 수 있는 상태와 되돌릴 수 있는 상태를 만드는 것입니다.
この文書がカバーする質問
- AI 애플리케이션 서비스화 체크리스트가 궁금하다
- AI가 만든 코드를 프로덕션에 공개하려면 무엇이 부족한가
- AI 생성 앱 보안에서 가장 먼저 확인해야 할 것은 무엇인가
リスク表示の意味
- 参照のみデータと設定を変更しません。
- 低影響は限定的ですが、権限と負荷の確認が必要です。
- 中性能・ロック・コストに影響する可能性があります。
- 高障害・データ損失・復旧作業が発生する可能性があります。
- 専門家レビュー必須本番適用前に別途レビューが必須です。
GIIPの対応範囲
위 항목들은 외부에 위탁하지 않고 자사에서 수행할 수 있습니다. 판단이 필요한 부분은 어떤 항목을 이번 릴리스까지 충족하고 어떤 항목을 다음으로 미룰지에 대한 우선순위 결정입니다. GIIP에서는 AI가 생성한 애플리케이션을 프로덕션에 올릴 때, 환경 분리와 시크릿 외부화, 롤백 절차 실측, 모니터링 연동의 3가지를 먼저 충족한 뒤 공개하는 방식으로 운영하고 있습니다. 우선순위 판단 자료가 부족한 경우, 현재 구성을 살펴본 뒤 부족한 부분을 정리해 드릴 수도 있습니다.
執筆・技術検証
GIIP プロダクション運用チーム
大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、AIエージェントと人間の専門家が継続的に監視・運用しています。
코딩 에이전트와 GIIP FDE Ops는 무엇이 다른가
코딩 에이전트와 운용 서비스는 "작업의 단위"가 다릅니다. 두 영역의 스코프 경계를 9가지 관점에서 비교하고, 자사에서 확인할 수 있는 명령을 함께 제공합니다.
ai-operationsAI 자동 실행에 승인과 롤백이 필요한 이유와 설계 방법
자동 실행의 설계 요소(스냅샷·승인 게이트·dry-run 분리·allowlist·멱등성·감사 로그·단계적 전개·중지 스위치)와, 승인 없이 실행해서는 안 되는 작업의 경계를 정리합니다.
monitoring서버와 데이터베이스를 24시간 모니터링할 때 설정할 항목
24시간 모니터링을 설계할 때의 모니터링 대상·임계값 사고방식·에스컬레이션 체계·외부 모니터링의 필요성을 계층별로 정리한 체크리스트입니다.
awsAWS 데이터베이스 비용을 재검토할 때 확인할 항목
AWS 데이터베이스 비용을 영향이 작은 순서(미사용 정지 → right-sizing → 스토리지 → 백업 → 비운영 → 커밋먼트)로 재검토하기 위한 체크리스트입니다.
関連サービス
프로덕션 공개 전 부족한 항목 점검받기
同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。
프로덕션 공개 전 부족한 항목 점검받기