실수로 프로덕션 데이터베이스의 전체 데이터 세트를 지웠습니다. 다음은 다음과 같습니다.
9417 단어 showdevwebdevcareerjavascript
전에 세부 사항에 들어가기 전에. 제 자신에 대해 조금 말씀드리자면 저는 React, Nodejs를 전문으로 하는 풀스택 엔지니어입니다. 프로덕션에서 Nodejs, Postgres를 사용하는 스타트업에서 일하고 있습니다.
최근에 저는 데이터베이스 테이블을 업데이트하는 API에서 작업하고 있었습니다. 테이블은 이런 구조를 가지고 있습니다
module.exports = (sequelize, Sequelize) => {
const User = sequelize.define("user", {
name: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
data : Sequelize.JSON,
});
return User;
};
여기서 주목해야 할 중요한 사항은 JSON 구조에 있는
data
입니다. 내가 빌드한 API는 테이블의 데이터 개체를 업데이트해야 합니다.예를 들어 GET 요청에 대한 데이터 구조는 다음과 같습니다.
여기에는
data
, phone
, address
및 country
와 같은 필드가 있는 JSON 구조의 postal code
가 포함됩니다.그래서 데이터 내부에 전화번호를 변경하는 API를 작성해야 합니다. 나는 그것이하기 쉬운 일이라고 생각했고 몇 단계 만에 그렇게했습니다.
app.post('/phone-number/update/:id',async (req,res) => {
try {
const id = req.params.id;
const phonenumber = req.body.phonenumber
const user = await User.update({ "data.phone" : phonenumber },{
where : {
id
}
})
res.status(200).json(user)
}
catch(e){
res.status(500).json(null)
}
})
데이터 개체 내부의 전화 번호를 업데이트합니다. 지금까지 모든 것이 좋아 보입니다. 그 후 업데이트된 전화번호가 DB에 저장되는 시나리오를 커버하기 위해 테스트 케이스를 작성했고 통과했습니다.
지금까지는 모든 것이 좋아 보입니다. 그래서 제작에 들어갔습니다. 나는 프로덕션에서 일어날 재난을 깨닫지 못했습니다. 나는 내 집에 있었다.
다음은 프로덕션에서 발생한 일입니다. API는 JSON 데이터를 완전히 지우고
phone number
로 대체했습니다. 나는 이것을 보고 충격을 받았고,예를 들어 API 전후의 데이터는 다음과 같습니다.
API 업데이트 후,
그런 다음
JSON
의 postgres 업데이트가 이와 같이 작동해서는 안된다는 것을 깨달았습니다. 운 좋게도 이것이 발생하기 전에 데이터베이스가 백업되었습니다. 그래서 데이터베이스 데이터를 롤백하고 이 API의 기능을 주석 처리했습니다.하지만 제 CTO가 이 문제를 지적하고 이 문제를 해결하는 데 도움을 주었습니다. 그동안 API 기능을 수정하는 다른 방법을 찾았습니다. 그것은 다음과 같을 것입니다.
app.post('/phone-number/update/:id',async (req,res) => {
try {
const id = req.params.id;
const phonenumber = req.body.phonenumber
let user = await User.findOne({ id })
user.data = { ...user.data,phone : phonenumber }
await user.save()
res.status(200).json(user)
}
catch(e){
res.status(500).json(null)
}
})
나는 그것이 효과적인 해결책처럼 보이지 않는다는 것을 압니다. 하지만 그 순간에 배포되어야 하는 작업 솔루션을 원했습니다. 시나리오를 커버하기 위해 테스트 케이스를 빠르게 작성하고 PR을 올렸습니다. CTO가 직접 이 코드를 살펴보고 검토한 후 피드백을 주었습니다. 마침내 그날 패치가 프로덕션에 병합되었습니다.
작고 어리석은 문제처럼 보일 수 있습니다. 그러나 전체 데이터 세트를 지울 가능성이 있습니다. 이 사건에 대해 걱정하는 대신. 나는 그것을 나에게 좋은 배움으로 받아들였다. 그들은,
이 실제 경험에서 무언가를 배웠기를 바랍니다. 같은 상황을 겪지 않고도 그 경험을 얻을 수 있도록 제 경험을 공유하고 싶었습니다. 우리는 또 다른 실시간 경험에서 보게 될 것입니다. 그때까지 해피코딩 :-)
Reference
이 문제에 관하여(실수로 프로덕션 데이터베이스의 전체 데이터 세트를 지웠습니다. 다음은 다음과 같습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ganeshmani/i-accidentally-wiped-the-entire-dataset-in-the-production-database-here-s-what-happened-next-l7d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)