web
error
strapi

2025-01-29

문제

Strapi에서 Dynamic zone ‘content’를 만들었다. markdown rich text field인 ‘text’와 media field인 ‘media’를 자유롭게 넣기 위해서.

그런데 내가 ‘text’라고 이름을 지었어야 할 것을 ‘content’라고 지어서 api 이름이 ‘content.content’가 되어 버렸다. 보여지는 이름은 text로 고칠 수 있었지만 api id는 Strapi 인터페이스로 고칠 수가 없었다.

그래서 코드 에디터에서 content.content와 contentContent, 그리고 관련된 것으로 보이는 모든 것을 검색해서 content.text, contentText 따위로 바꿨다.

하지만 도저히 이름을 바꿀 수가 없었고 에러만 계속 났다. 그리고 api 엔드포인트에 접근하려 해도 서버 에러 같은 것만 돌아왔다.

error: Metadata for "content.content" not found

content.content는 모조리 찾아서 text로바꿨는데 대체 어디에 흔적이 남아있길래 이런 에러가 뜨는 건지 궁금해하며 여러 번 build를 다시 했다.

그러다 포기하고 아무것도 Commit하지 않은 채 변경 기록을 다 삭제했다.

그런데 갑자기 해당 컴포넌트에 들어있던 데이터가 몽땅 증발했다. Commit도 안 했는데 말이다.

해당 컴포넌트(content.content)를 삭제하고 새로 content.text를 만들었는데도 유령처럼 content.content를 찾는 에러가 계속되었다.

그리고 content.text에 데이터를 쓰려고 하니 internal server error가 뜨면서 안됐다.

컴포넌트 api 이름 하나 바꾸려다가 한 field의 데이터를 잃었는데 이제는 며칠간 작업해놓은 CMS 자체를 못쓰게 될 위기에 처한 것이다.

그러다 이 버그 리포트를 찾았는데 Tries to find Metadata after remove a component 내가 겪고 있는 상황인 것 같았다.

내가 지웠던 그 컴포넌트를, 잘못 이름 붙였던 그 이름 그대로 다시 만들어주니 에러가 사라졌다. 하지만 사라진 데이터는 돌아오지 않았다.

샘플데이터라도 내가 복사 붙여넣기에 시간을 얼마나 썼는데… 그래도 들어있던 게 샘플 데이터여서 망정이지 진짜데이터가 다 날아갔다면?…

교훈

  • 하지말라는거 하지 말자 (인터페이스에서 api 이름 바꿀 방법 안 줬는데 임의로 코드 건드려서 바꾸려 한 것)
  • 데이터베이스에 항상 접근할 수 있게 하자
  • 데이터베이스 백업을 해놓자

이제 Strapi에게 속죄하는 차원에서 똑같은 샘플 데이터를 3번째 다시 복붙하는 노동을 하러 가야겠다.

…하지만 이상한 일은 그게 끝이 아니었다

같은 이름을 공유하는 Dynamic Zone의 text들이 알 수 없는 이유로 서로 뒤섞여서 이 콘텐츠 타입에 쓴 글이 저 콘텐츠 타입에 들어가 있고 아주 난장판이었다. 인터넷에서도 이런 경우를 찾기 힘들었다. 그래서 그냥 Dynamic Zone을 하나만 남기고 다 없애 버렸더니 괜찮아졌다.