시장 데이터가 안 뜨는 이유를 추적하다 — 타임아웃, 미배포 스키마, 그리고 권한 체크박스 하나
오늘 하루는 "왜 market-data 페이지가 안 갱신되지?"라는 단순한 질문 하나에서 시작해서, 자동화 타임아웃 버그 → 배포 누락 → 잘못된 가설(하이픈) → 진짜 원인(권한 기본값)까지 층층이 파고 들어간 하루였다.
1. 증상: 브리핑은 돌았는데 데이터가 안 바뀜
KR 아침 브리핑 자동화가 오늘도 실행되긴 했는데 sunnypoint.net의 시장 데이터가 갱신되지 않았다. langalpha DB를 직접 열어보니 원인이 바로 나왔다 — 자동화가 **타임아웃(3200초 제한인데 20580초까지 안 잡힘)**으로 실패해서 당일 브리핑이 발행 큐에 아예 안 들어간 상태였다. 마침 이날 코스피가 장중 -8%대까지 밀리며 사이드카·서킷브레이커가 발동한 날이라, 장 마감을 기다렸다가 최종 수치로 브리핑을 직접 작성해 발행 큐에 넣었다.
2. 두 번째 문제: 애초에 배포된 적이 없었다
브리핑은 발행됐는데 이번엔 market-snapshot 싱글타입 업서트가 405 Method Not Allowed로 실패했다. 원인을 보니 어이가 없었다 — backend/src/api/market-snapshot/ 디렉터리가 git에 커밋된 적이 없어서 NAS의 실제 Strapi에는 이 content-type 자체가 배포돼 있지 않았다. 로컬에서만 존재하던 기능이었던 것.
커밋하고 push하고 NAS에서 pull + rebuild까지 했는데도 404 NotFoundError가 계속됐다. 이름에 하이픈이 들어간 게 원인인가 싶어(strapi/strapi#23348 같은 사례를 찾음) market-snapshot → marketsnapshot으로 개명까지 했는데, 이것도 근본 원인은 아니었다.
3. 진짜 원인: 그냥 체크박스 하나
몇 시간을 판 끝에 진짜 원인을 찾았다. Strapi에서 새 content-type을 만들면 Public 역할의 모든 액션이 기본적으로 꺼진 채로 시작한다. 보통은 어드민 UI에서 체크박스 하나 켜주면 끝나는 일인데, 하필 그 UI 자체가 1주째 고장나 있어서 이 평범한 설정을 할 방법이 없었던 거다.
어드민 로그인 API로 직접 들어가서 Public 역할의 marketsnapshot.find 권한을 켜자 바로 해결됐다. 코드도, 배포도, 이름도 전부 정상이었고 문제는 시작부터 권한 체크박스 하나였다.
4. 부산물: 어드민 UI 자체도 고쳤다
이 과정에서 Content Manager 화면이 로그인 후 계속 무한 로딩에 걸리는 걸 발견했다(1주째 방치돼 있던 문제). Strapi를 5.48.0 → 5.50.0으로 올리니 이건 깔끔하게 해결됐다. 다만 richtext/JSON 필드 편집 화면에서 나는 별개의 CodeMirror 관련 에러(strapi/strapi#23348, Strapi 쪽에서 "not planned"로 닫힌 이슈)는 업그레이드로도 안 풀렸다.
5. 그 김에: CMS를 계속 써도 되는지 점검
편집 화면이 막히는 김에 WordPress/Payload/Directus까지 훑어봤다. 결론은 의외로 — 셋 다 비슷한 급의 무한로딩·에디터 버그가 각자의 GitHub 이슈로 존재했다. Strapi가 유독 나쁜 게 아니라 React 기반 헤드리스 CMS 어드민이라는 카테고리 자체의 약점에 가까웠다. 지금 당장 이전할 이유는 없다고 판단, 결론은 보류.
겸사겸사 실제 콘텐츠 상태도 확인했다. 차트는 생각보다 잘 되고 있었다(시장 관련 글 229개 중 177개, 77%에 차트 데이터 있음). 반면 이미지는 시스템 전체에 업로드된 파일이 0개 — 발행 파이프라인에 이미지 생성 단계 자체가 없다는 뜻이었다. 이건 CMS 선택과 무관한 별개의 숙제로 남겨뒀다.
요약
한 줄로 요약하면: 겉보기엔 복잡해 보였던 문제가 실은 "권한 체크박스 하나"였고, 그걸 찾기까지 오히려 더 큰 버그(어드민 UI 자체 고장)를 하나 더 발견해서 고쳤다. 가끔은 제일 평범한 원인이 제일 늦게 발견된다.