LabHub
学习 学习路径 课程

SI 项目流程

编写迁移检查清单与回滚脚本

在 LabHub 中继续学习

한국어 원문으로 표시합니다.

목표

이행(오픈) 작업에 필요한 계획서·체크리스트·백업/릴리스/스모크/롤백 스크립트를 직접 만들고, 실제로 실행해 결과 보고서까지 작성할 수 있게 됩니다.

왜 중요한가

이행은 SI 프로젝트에서 가장 압축된 리스크 구간입니다. 새벽에, 지친 상태로, 여러 팀이 정해진 순서대로 움직여야 하고, 되돌릴 시간은 짧습니다. 이때 판단을 지탱하는 것은 미리 숫자로 정해 둔 롤백 기준과, 손이 떨려도 같은 답을 내는 자동화된 검증 스크립트입니다. 사람이 화면을 눌러 보는 스모크 테스트는 사람이 피곤할수록 부정확해집니다. 그래서 이행 준비의 본질은 '문서 작성'이 아니라 '판단을 자동화해 두는 것'입니다.

단계

  1. /root/deploy 디렉터리를 만들고 /root/deploy/plan.md 를 작성합니다. ## 이행 일시, ## 대상, ## 롤백 기준, ## 담당자 네 개의 h2 제목이 있어야 하고, 본문에 롤백 판단 시한 이라는 문구와 시각이 들어가야 합니다.
  2. /root/deploy/checklist.csv 를 만듭니다. 첫 줄은 seq,phase,task,owner,expected,rollback. 데이터는 8행 이상이고 phase 값에 사전, 이행, 검증 이 모두 등장해야 합니다. seq 는 1부터 1씩 증가하는 정수, expected(기대 결과)는 비어 있으면 안 됩니다.
  3. /opt/lab/fixtures/si-process/app/config.properties/root/deploy/app/config.properties 로 복사합니다. 그리고 /root/deploy/backup.sh 를 만듭니다. 실행하면 /root/deploy/backup/config.properties.YYYYMMDDHHMM 형식으로 백업을 남깁니다. 작성 후 실제로 한 번 실행하세요.
  4. /root/deploy/release.sh 를 만듭니다. 실행하면 /root/deploy/app/config.propertiesapp.version 값을 2.0.0 으로 바꾸고, /root/deploy/deploy.logRELEASE 2.0.0 문자열이 포함된 줄을 덧붙입니다. 작성 후 실제로 한 번 실행하세요.
  5. /root/deploy/smoke.sh 를 만듭니다. 인자 하나(설정 파일 경로)를 받아 app.version 값이 비어 있지 않고 app.db.url 값이 jdbc: 로 시작하면 종료코드 0, 아니면 0 이 아닌 값으로 종료합니다.
  6. /root/deploy/rollback.sh 를 만듭니다. 인자 두 개(백업파일 대상파일)를 받아 백업 파일을 대상 파일로 되돌립니다. 백업 파일이 없으면 대상 파일을 건드리지 말고 0 이 아닌 종료코드로 끝나야 합니다.
  7. /root/deploy/rollback-criteria.csv 를 만듭니다. 첫 줄은 metric,threshold,window,action. 데이터는 3행 이상이고 action롤백, 관찰, 유지 중 하나이며 최소 한 행은 롤백 이어야 합니다. threshold 에는 숫자가 들어가야 하고 window(관측 구간)는 비어 있으면 안 됩니다.
  8. /root/deploy/result.md 를 작성합니다. ## 수행 결과, ## 이슈, ## 백업 위치, ## 확인 사항 네 개의 h2 제목이 있어야 하고, 3 단계에서 만들어진 실제 백업 파일명과 배포된 버전 2.0.0 이 본문에 들어가야 합니다.

참고

이행 계획서 작성

/root/deploy 디렉터리를 만들고 /root/deploy/plan.md 를 작성합니다. ## 이행 일시, ## 대상, ## 롤백 기준, ## 담당자 네 개의 h2 제목이 있어야 하고, 본문에 롤백 판단 시한 이라는 문구와 시각이 들어가야 합니다.

이행 계획서의 최소 요건은 '언제/무엇을/누가/언제 되돌리는가'입니다. 롤백 기준은 감정이 아니라 숫자로 적어야 새벽에 판단이 흔들리지 않습니다.

단계별 체크리스트

/root/deploy/checklist.csv 를 만듭니다. 첫 줄은 seq,phase,task,owner,expected,rollback. 데이터는 8행 이상이고 phase 값에 사전, 이행, 검증 이 모두 등장해야 합니다. seq 는 1부터 1씩 증가하는 정수, expected(기대 결과)는 비어 있으면 안 됩니다.

각 항목에 '기대 결과'가 없으면 성공 여부를 판정할 수 없습니다. 사전/이행/검증 세 구간이 모두 있어야 하고, 순번은 실제 수행 순서와 같아야 합니다.

설정 백업 스크립트 작성과 실행

/opt/lab/fixtures/si-process/app/config.properties/root/deploy/app/config.properties 로 복사합니다. 그리고 /root/deploy/backup.sh 를 만듭니다. 실행하면 /root/deploy/backup/config.properties.YYYYMMDDHHMM 형식으로 백업을 남깁니다. 작성 후 실제로 한 번 실행하세요.

백업 파일명에 타임스탬프를 넣으면 여러 번 실행해도 덮어쓰지 않습니다. date 명령의 포맷 지정자를 쓰세요. 백업했다면 원본과 내용이 같은지 확인하는 습관도 함께.

릴리스 스크립트 작성과 실행

/root/deploy/release.sh 를 만듭니다. 실행하면 /root/deploy/app/config.propertiesapp.version 값을 2.0.0 으로 바꾸고, /root/deploy/deploy.logRELEASE 2.0.0 문자열이 포함된 줄을 덧붙입니다. 작성 후 실제로 한 번 실행하세요.

설정 값을 바꿀 때 sed -i 를 쓰면 실패해도 원본이 사라집니다. 앞 단계에서 백업을 먼저 만든 이유가 이것입니다. 배포 이력은 append 로 남기세요.

스모크 테스트 스크립트

/root/deploy/smoke.sh 를 만듭니다. 인자 하나(설정 파일 경로)를 받아 app.version 값이 비어 있지 않고 app.db.url 값이 jdbc: 로 시작하면 종료코드 0, 아니면 0 이 아닌 값으로 종료합니다.

스모크 테스트는 인자로 검사 대상을 받아야 재사용됩니다. 정상일 때 0, 비정상일 때 0 이 아닌 값으로 종료해야 자동화에 쓸 수 있습니다.

롤백 스크립트

/root/deploy/rollback.sh 를 만듭니다. 인자 두 개(백업파일 대상파일)를 받아 백업 파일을 대상 파일로 되돌립니다. 백업 파일이 없으면 대상 파일을 건드리지 말고 0 이 아닌 종료코드로 끝나야 합니다.

롤백 스크립트는 인자를 받아 동작해야 안전합니다. 대상 백업 파일이 없으면 아무것도 하지 말고 즉시 실패해야 합니다 - 새벽에 빈 파일로 덮어쓰는 사고가 실제로 납니다.

롤백 판단 기준표

/root/deploy/rollback-criteria.csv 를 만듭니다. 첫 줄은 metric,threshold,window,action. 데이터는 3행 이상이고 action롤백, 관찰, 유지 중 하나이며 최소 한 행은 롤백 이어야 합니다. threshold 에는 숫자가 들어가야 하고 window(관측 구간)는 비어 있으면 안 됩니다.

지표·임계값·관측 구간·조치 네 가지가 한 세트입니다. '오류가 많으면'이 아니라 '오류율 5%를 10분간 초과하면'처럼 적어야 합니다.

이행 결과 보고서

/root/deploy/result.md 를 작성합니다. ## 수행 결과, ## 이슈, ## 백업 위치, ## 확인 사항 네 개의 h2 제목이 있어야 하고, 3 단계에서 만들어진 실제 백업 파일명과 배포된 버전 2.0.0 이 본문에 들어가야 합니다.

결과 보고서의 가치는 안정화 기간에 나옵니다. 백업 파일 이름과 배포된 버전을 그대로 적어 두세요. 나중에 '오픈 때 뭐 바꿨죠'에 답할 수 있는 유일한 문서입니다.