移行チェックリストとロールバックスクリプトの作成
한국어 원문으로 표시합니다.
목표
이행(오픈) 작업에 필요한 계획서·체크리스트·백업/릴리스/스모크/롤백 스크립트를 직접 만들고, 실제로 실행해 결과 보고서까지 작성할 수 있게 됩니다.
왜 중요한가
이행은 SI 프로젝트에서 가장 압축된 리스크 구간입니다. 새벽에, 지친 상태로, 여러 팀이 정해진 순서대로 움직여야 하고, 되돌릴 시간은 짧습니다. 이때 판단을 지탱하는 것은 미리 숫자로 정해 둔 롤백 기준과, 손이 떨려도 같은 답을 내는 자동화된 검증 스크립트입니다. 사람이 화면을 눌러 보는 스모크 테스트는 사람이 피곤할수록 부정확해집니다. 그래서 이행 준비의 본질은 '문서 작성'이 아니라 '판단을 자동화해 두는 것'입니다.
단계
/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형식으로 백업을 남깁니다. 작성 후 실제로 한 번 실행하세요./root/deploy/release.sh를 만듭니다. 실행하면/root/deploy/app/config.properties의app.version값을2.0.0으로 바꾸고,/root/deploy/deploy.log에RELEASE 2.0.0문자열이 포함된 줄을 덧붙입니다. 작성 후 실제로 한 번 실행하세요./root/deploy/smoke.sh를 만듭니다. 인자 하나(설정 파일 경로)를 받아app.version값이 비어 있지 않고app.db.url값이jdbc:로 시작하면 종료코드 0, 아니면 0 이 아닌 값으로 종료합니다./root/deploy/rollback.sh를 만듭니다. 인자 두 개(백업파일 대상파일)를 받아 백업 파일을 대상 파일로 되돌립니다. 백업 파일이 없으면 대상 파일을 건드리지 말고 0 이 아닌 종료코드로 끝나야 합니다./root/deploy/rollback-criteria.csv를 만듭니다. 첫 줄은metric,threshold,window,action. 데이터는 3행 이상이고action은롤백,관찰,유지중 하나이며 최소 한 행은롤백이어야 합니다.threshold에는 숫자가 들어가야 하고window(관측 구간)는 비어 있으면 안 됩니다./root/deploy/result.md를 작성합니다.## 수행 결과,## 이슈,## 백업 위치,## 확인 사항네 개의 h2 제목이 있어야 하고, 3 단계에서 만들어진 실제 백업 파일명과 배포된 버전2.0.0이 본문에 들어가야 합니다.
참고
date +%Y%m%d%H%M으로 12자리 타임스탬프를 만들 수 있습니다.- 설정 값 읽기:
grep '^app.version=' 파일 | cut -d= -f2 - 흔한 실수 1: 롤백 스크립트가 백업 파일 존재 확인 없이
cp를 실행하는 것. - 흔한 실수 2: 스크립트를 만들고 실행하지 않아 산출물(백업 파일, deploy.log)이 없는 것.
- 흔한 실수 3:
checklist.csv의expected열을 비워 두는 것. 기대 결과가 없으면 체크리스트가 아닙니다.
이행 계획서 작성
/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.properties 의 app.version 값을 2.0.0 으로 바꾸고,
/root/deploy/deploy.log 에 RELEASE 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 이 본문에 들어가야 합니다.
결과 보고서의 가치는 안정화 기간에 나옵니다. 백업 파일 이름과 배포된 버전을 그대로 적어 두세요. 나중에 '오픈 때 뭐 바꿨죠'에 답할 수 있는 유일한 문서입니다.