모두가 집으로 귀가해 집에서 각자 작업 혹은 잘 쉬고있던 마감 전 주 주말이었다. 토요일에 프론트엔드 은우님이 슬랙에 메시지를 남겨주셨다..(사건 발생..)
[ 상황설명 ]
1. 작업 상황
- 백엔드 npm run start / 프론트엔드 npm run dev로 작동 후 코드 작업 시작 - 문제 발생 전 DB에 데이터가 추가되고 수정되는 것을 직접 확인 - 작업하던 상태를 그대로 둔 채로 식사 후 다시 한 번 기능테스트를 하기 위해 진행 - 잘 되던 작업이 진행되지 않아서 프론트와 백엔드의 VSCODE 터미널을 확인 - 프론트엔드 터미널에서는 어떠한 오류도 발생하지 않았음 - 백엔드에서 많은 오류들이 한 번에 발생하면서 터미널에 오류 로그가 다량 발생 - 백엔드 서버를 끄고npx prisma db push 명령어 입력 후npm run start로 서버 재실행 - 서버는 정상적으로 작동하였으나 DB에 있던 데이터가 모두 날아감
2. 사후처리
- DB에 데이터가 모두 사라진 것을 캡쳐 후 팀원들과 상황 공유 - generate? generator? 가 들어간 명렁어를 사용하면 데이터가 날아갈 수 있다는 것을 알게되었음 - 하지만 알고있던 명령어가 아니고 입력한 적이 없기에 다른 원인이 아닐까 추측
은우님 : 제가 알고 있는 명령어가 이 두개가 다라서 까먹으면 복사 붙여넣기로 사용하고 있었습니다. 이것 외에는 없었습니다!
[원인 찾기]
1. 구글클라우드 BookTalk 프로젝트 > booktalk 인스턴스 > 로그 탐색기 검색
resource.type="cloudsql_database"
protoPayload.methodName="cloudsql.instances.update"
OR protoPayload.methodName="cloudsql.instances.restoreBackup"
OR protoPayload.methodName="cloudsql.databases.delete"
OR textPayload:("DROP DATABASE")
restoreBackup , databases.delete , DROP DATABASE 가 나오면 확정입니다 라는데, 전혀 없음을 확인
2. migrate dev 실행된 흔적 확인하기
package.json의 scripts 확인: postinstall, prepare, dev 등에 migrate 포함되어 있나?
DB를 다루는 백엔드 package.json 파일 scripts 에는 migrate가 포함된 내용이 어디에도 없음을 확인혹시몰라 프론트 package.json 파일까지 확인했으나, 전혀 없음을 확인
3. Cloud SQL에 자동 백업 복원 옵션이 켜져 있는지 확인
인스턴스 > 백업 > 자동 복원/스케줄 여부 확인
1. 매일 새벽에 백업이 자동으로 되어있는것 까지는 확인
2. 인스턴스 > 작업 탭에서 복원, restoreBackup 유형의 작업이 있었는지 확인하였으나, 백업완료 뿐임