들어가며

안녕하세요! 이번 글은 오랜만에 블로그 개발 일지입니다.

26년 6월 28일 새벽 3시경 제 블로그 DB가 몽땅 날아가 버리는 일이 있었는데요.

제 입장에서 정리한 이슈 발생 원인과 해결 과정, 그리고 간단한 회고글을 작성해 보겠습니다.

(팀원 입장에서 쓴 글도 있습니다~ 글은 팀원 개인 블로그 DB 날린 썰에서 봐주세요!)

<br>

1. 폭풍전야, 블로그 DB 날아가기 30분 전

사이드 프로젝트를 진행하고 있었는데, 팀원이 CI/CD를 구축하던 중 sudo 권한을 달라고 했습니다.

사이드 프로젝트의 서버는 블로그 서버를 이용해 구축하기로 했었고, 블로그 데이터와 서버 다운 방지를 위해 팀원에게 우선 sudo 권한을 제외한 권한을 주었습니다.

그리고 CI/CD 구축을 위해 sudo 권한이 필요하다고 해서 저는 아무 의심 없이 sudo 권한을 넘겨주었습니다.

<br>

2. 블로그가 안 된다?

어? 이상합니다.

시간이 지나고 사이드 프로젝트 CI/CD를 점검하며 잠깐 블로그에 들어갔는데, 블로그 데이터가 몽땅 사라졌습니다.

저는 이전까지 MySQL을 건드린 적이 없었고, 팀원에게 혹시 MySQL과 관련해 작업한 게 있냐고 물어보았습니다.

<br>

3. 범인을 찾았습니다.

팀원이 CI/CD를 구축하면서 MySQL을 삭제했다가 재설치했다고 이실직고했습니다.

순간 저도 패닉이 왔고, 혹시 백업해 둔 게 있나 하고 복구 방법을 찾고 있었습니다.

이때 팀원이 무언가를 찾았습니다.

<br>

4. 1년 전 박성열 매드무비

생각해 보니 작년 8월에 블로그를 오픈하고 뭔가 불안해서 매일 새벽 2시에 DB가 백업되도록 스크립트를 만들어 놓았던 것이 지금까지 잘 작동하고 있었습니다ㅠㅠ

데이터베이스 자동 백업 스케줄링 관련 글

결과적으로 6월 28일 새벽 2시 DB 상태로 롤백했고, 블로그를 다시 띄울 수 있었습니다.

<br>

5. 뭐가 문제였을까?

문제를 잘 해결했으니 이제 회고를 해보겠습니다.

협업자는 기존 인프라 환경과 맥락을 모른다.

팀원은 서버에 MySQL이 띄워져 있는지 몰랐습니다. 사전에 제가 인프라에 대한 맥락을 공유했다면, 팀원이 MySQL을 삭제하는 일은 일어나지 않았을 것입니다.

따라서 협업을 할 때는 맥락을 공유하기 위한 문서가 중요하다는 것을 배웠습니다.

소통이 중요하다.

이번 일의 시작은 팀원에게 sudo 권한을 주면서 시작되었습니다. 만약 sudo 권한을 주기 전에 왜 필요한지 물어보았다면, 이 일을 미연에 방지할 수 있었을 것입니다.

따라서 앞으로는 팀원에게 받은 업무의 이유를 물어보고, 잘 소통하는 자세를 키우려고 합니다.

권한은 필요한 것만 주자.

리눅스에는 최소 권한 원칙이 있습니다. 저도 리눅스에 대해 잘 몰라 처음에는 지나치게 보수적으로 권한을 주었고, 이후에는 과하게 주었습니다.

다음에는 팀원이 하는 작업과 그 작업에 필요한 권한 정도를 명확히 파악해 주어야겠습니다. 리눅스도 공부하자..

모니터링은 필수다.

DB가 날아간 뒤, 블로그가 잘못된 것을 제가 직접 접속해서 알았습니다.

상황을 늦게 파악할수록 원인과 멀어지고, 해결에 더 많은 시간이 소요될 것 같습니다.

따라서 모니터링을 추가해 블로그에서 발생하는 오류와 사용량을 실시간으로 확인하고, 알림을 받을 수 있도록 하는 것이 좋을 것 같습니다.

<br>

6. 추가로 해야 할 일

이번에는 DB만 날아가 서버 안에 있는 백업본을 이용해 복구할 수 있었지만, 만약 랜섬웨어처럼 서버 전체가 복구 불가능한 상황이 온다면 지금과 같은 방식으로는 해결이 불가능할 것입니다.

작년에도 "설마 백업본을 사용할 일이 있겠어?"라고 생각하며 설정해 두었습니다.

하지만 이렇게 한 번 일이 생기고 나니, 블로그 운영 기간이 늘어날수록 걱정하는 일은 반드시 일어날 것이라는 생각이 들었습니다.

그래서 이번 방학 동안 블로그에 추가 작업을 진행하겠습니다.

이미지 백업 시스템 구축

현재 블로그에 첨부되어 있는 모든 이미지는 서버 내 파일 시스템에 저장되고 있습니다. 따라서 이를 주기적으로 백업하는 시스템을 구축하겠습니다.

외부 백업 저장소 구축

내부에서 백업되고 있는 기존 구조를 외부 저장소로 옮기겠습니다. 이미지도 모두 백업해 더 안전한 서비스를 만들겠습니다.

모니터링 구축

서버의 상태를 실시간으로 확인하고, 문제 발생 시 알림을 받을 수 있는 모니터링을 구축하겠습니다.

마치며

블로그를 운영하며 항상 속된 말로 캐삭빵을 염두에 두고 있습니다. 블로그 글이 전부 날아간다든지, 서버가 다운된다든지..

제 생각과 글들이 쌓여가고, 독자분들도 한 번씩 와주시며 소통(좀 해주시죠.)? 하는 소중한 공간이 되고 있고, 작년보다 그 가치가 점점 더 커지고 있습니다.

하지만 블로그의 가치가 커질수록 예전에 무시하고 넘어갔던 기술 부채들이 하나씩 보이고 있습니다.

앞으로 새로운 기능도 추가하겠지만, 우선은 현재 보이는 기술 부채를 해결하여 더 안전한 블로그를 만들기 위해 만전을 다하겠습니다.

다들 26년 상반기도 수고하셨습니다~!🌊

7월도 파이팅.