워드프레스에서 갑자기 '응답이 올바른 JSON 응답이 아닙니다' 오류가 발생하는 경우

오늘 워드프레스에서 글을 작성하고 저장하려는데 '업데이트에 실패했습니다. 응답이 올바른 JSON 응답이 아닙니다' 오류가 발생하면서 저장이 되지 않는 문제가 생겼습니다. 이틀 전까지만 해도 아무 문제 없이 저장이 잘 되었는데 갑자기 이런 증상이 나타나니 당황스러웠습니다.

이처럼 갑자기 이 오류가 발생한다면 몇 가지 원인을 의심해볼 수 있습니다. 최근에 플러그인을 새로 설치했거나 기존 플러그인이 업데이트되었다면 해당 플러그인이 원인일 수 있고, 보안 플러그인이나 서버 방화벽 설정이 변경된 경우에도 이런 증상이 나타날 수 있습니다. 드문 경우지만 저처럼 브라우저 쿠키가 손상되어 발생하기도 합니다.

워드프레스 사이트에서 어느 날 갑자기 올바른 JSON 응답이 아니라는 에러 메시지가 표시되면서 글이 저장되지 않는 문제가 발생하는 경우 체크할 사항에 대해 살펴보겠습니다.

워드프레스에서 갑자기 '응답이 올바른 JSON 응답이 아닙니다' 오류가 발생하는 경우

'응답이 올바른 JSON 응답이 아닙니다' 오류

워드프레스가 버전 5.0으로 업데이트하면서 블록 에디터를 도입했습니다.

블록 에디터(구텐베르크)에서 글을 저장할 때 서버에 REST API 요청을 보내는데, 서버가 "이 요청을 처리할 권한이 없다" 고 거부하면 403 Forbidden 오류가 발생합니다. 이때 서버가 JSON 대신 HTML 에러 페이지를 반환하기 때문에 "올바른 JSON 응답이 아닙니다" 메시지가 함께 표시됩니다.

'응답이 올바른 JSON 응답이 아닙니다' 오류

403 오류의 원인은 다양하기 때문에 아래 순서로 확인하여 문제가 해결되는지 체크해보시기 바랍니다.

① 브라우저 쿠키 삭제 후 재로그인
가장 먼저 시도할 방법입니다. 브라우저에 저장된 쿠키가 손상된 경우 이것만으로 해결되는 경우가 많습니다.

② Wordfence 등 보안 플러그인 임시 비활성화
보안 플러그인의 방화벽이 REST API 요청을 차단하는 경우가 있습니다. 워드펜스를 비활성화했을 때 문제가 해결된다면 Wordfence의 설정을 체크하도록 합니다.

이와 관련하여 워드프레스 포럼에서는 워드프레스 관리자 페이지 » Wordfence » 모든 옵션 » 무차별 대입 공격(Brute Force) 방지 » 추가 옵션에서 "'/?author=N' Scan, oEmbed API, 워드프레스 REST API 및 워드프레스 XML 사이트맵을 통해 사용자 이름 검사 방지" (Prevent discovery of usernames through ‘/?author=N’ scans, the oEmbed API, the WordPress REST API, and WordPress XML Sitemaps) 옵션을 비활성화할 것을 권장합니다.

워드프레스 Wordfence 보안 플러그인

③ 호스팅사 웹 방화벽(WAF) 확인
공유호스팅 환경에서는 호스팅사의 웹 방화벽이 차단하는 경우가 있을 수 있습니다. 실제로 최근 가비아에서 호스팅 중인 워드프레스 사이트에서 SureRank SEO 설정을 저장할 때 이와 같은 오류가 발생하여 가비아 고객센터에 연락하니 담당자가 '웹 방화벽 영향으로 증상이 발생한 것으로 추정되어 방화벽 설정을 최소한으로 변경'한 후에 문제가 해결되었습니다.

가비아 호스팅

④ 플러그인 충돌 확인
플러그인 충돌로 인해 잘못된 JSON 응답 오류가 발생하기도 합니다. 플러그인을 하나씩 비활성화하며 문제를 일으키는 플러그인을 특정하도록 합니다.

⑤ LimitRequestFieldSize 설정 등 서버 문제

공유호스팅 환경에서는 Apache 서버의 LimitRequestFieldSize 설정으로 인해 동일한 오류가 발생할 수 있습니다. 이 설정은 HTTP 요청 헤더의 최대 크기를 제한하는 역할을 하는데, 기본값이 8,190 bytes로 설정되어 있을 수 있습니다. 워드프레스에 로그인하면 브라우저는 로그인 인증 쿠키(wordpress_logged_in_)를 비롯한 여러 쿠키를 저장하고 서버에 요청을 보낼 때마다 이 쿠키들을 헤더에 담아 함께 전송합니다. WP Dark Mode 플러그인처럼 별도의 쿠키를 생성하는 플러그인이 여러 개 설치되어 있으면 쿠키 크기가 커져 Apache의 제한을 초과하게 되고, 이 경우 Apache가 WordPress에 요청을 전달하기도 전에 차단하면서 JSON 오류가 발생합니다.

브라우저 쿠키를 삭제하면 일시적으로 해결될 수도 있지만 쿠키가 다시 쌓이면 재발할 수 있으므로, 근본적인 해결을 위해서는 호스팅사에 연락하여 LimitRequestFieldSize 값을 16,384 이상으로 상향 조정해 달라고 요청해야 합니다.

브라우저 쿠키 손상으로 인한 잘못된 JSON 응답 오류

오늘 갑자기 JSON 응답 오류로 인해 글이 저장되지 않는 문제가 발생하여 먼저 최근 업데이트된 Object Cache Pro 플러그인을 비활성화했지만 문제가 해결되지 않았습니다. 또한, 서버 문제인가 싶어서 클라우드웨이즈에서 서버를 재부팅해도 아무런 소용이 없었습니다.

다음 조치로 Wordfence에서 워드프레스 담당자가 권장한 '/?author=N' Scan, oEmbed API... 관련 옵션을 비활성화고 심지어 워드펜스 보안 플러그인을 비활성화해도 오류가 계속 발생했습니다.

구글 크롬 개발자 도구에서 오류 메시지를 체크해서 브라우저에 저장된 쿠키가 손상된 것이 이번 오류의 원인이었던 것으로 추정되었습니다.

쿠키를 열쇠에 비유하면 이해하기 쉽습니다.

워드프레스 관리자 페이지에 로그인하면 브라우저는 "이 사람은 관리자로 로그인했다"는 정보를 쿠키라는 형태로 저장합니다. 이후 글을 저장할 때마다 이 쿠키를 열쇠처럼 서버에 제시하여 "나 관리자 맞아요, 저장해 주세요"라고 요청합니다.

그런데 어느 시점에 이 열쇠(쿠키)가 구부러져 버렸습니다. 서버에 열쇠를 제시했지만 모양이 달라져서 서버가 "이 열쇠는 우리 거 아닌데요?"라며 거부한 것이 바로 403 오류입니다.

실제로 이번 케이스에서 쿠키 내부를 들여다보면 아래처럼 비정상적인 패턴이 발견되었습니다.

# 정상
editor=html&libraryContent=browse

# 손상된 상태 (& 기호가 비정상적으로 반복 중복됨)
editor=html&ampampampampampampampamp;libraryContent=browse

& 기호 하나가 들어가야 할 자리에 ampampampampampampampamp가 반복적으로 중복 삽입되어 쿠키 값이 엉망이 된 것을 볼 수 있습니다. 워드프레스 서버는 이 손상된 쿠키를 정상적으로 읽지 못해 로그인 상태를 확인할 수 없었고, 결국 글 저장 요청을 거부한 것입니다.

특정 글만 저장이 안 되는 경우 - WAF(웹 방화벽)에 의해 요청이 차단되어 문제 발생

아바다 테마의 보안 취약점 패치에 대한 글을 작성하여 저장을 누르니 이 오류가 발생했습니다. 아마 본문에 포함된 특정 string을 웹 방화벽에서 악성코드로 인식해서 차단한 것으로 추정됩니다.

의심되는 string을 삭제하고 다른 표현으로 대체하니 문제가 재발하지 않았습니다. 만약 특정 글만 저장이 안 된다면 WAF에 의해 요청이 차단된 것이 원인일 수 있습니다.

본문에 포함된 경로 순회 패턴(../../), 공격용 파라미터명, 취약 함수명 등을 네이버 서버의 방화벽이 실제 공격 시도로 인식했습니다. 요청 자체를 차단하거나 변조하면서 서버가 정상적인 JSON 응답을 돌려주지 못했고, 클라이언트 측에서 "올바른 JSON 응답이 아님" 오류로 표시된 것입니다.

FAQ (자주 묻는 질문)

Q1. 브라우저 쿠키를 삭제하면 워드프레스에서 로그인이 풀리나요?

A. 네, 쿠키를 삭제하면 로그인 상태가 해제되어 다시 로그인해야 합니다. 단, 작성 중이던 글은 워드프레스가 임시저장(자동 저장)해 두는 경우가 많으므로 재로그인 후 글 편집 화면으로 돌아가면 대부분 복구할 수 있습니다. 중요한 내용이라면 캐시와 쿠키를 삭제하기 전에 미리 내용을 복사하여 별도의 파일(텍스트 파일 등)로 저장하는 것이 안전합니다.

Q2. 쿠키를 삭제해도 문제가 해결되지 않으면 어떻게 해야 하나요?

A. 브라우저 쿠키/캐시 삭제 후에도 동일한 오류가 발생한다면 다른 브라우저나 시크릿 창으로 접속하여 테스트해 보시기 바랍니다. 여전히 해결되지 않으면 플러그인을 하나씩 비활성화하여 충돌 여부를 확인하고, 공유호스팅 환경이라면 호스팅사 고객센터에 웹 방화벽 설정 확인을 요청할 수 있습니다.

Q3. 이 오류가 발생할 때 작성 중이던 글이 사라지지는 않나요?

A. 워드프레스 블록 에디터는 기본적으로 60초마다 자동저장 기능이 작동하므로 글 내용이 완전히 사라지는 경우는 드뭅니다. 글 편집 화면 상단의 '개정판' 또는 임시저장 항목에서 이전 내용을 복구할 수 있습니다. 다만 오류 직전에 작성한 내용은 일부 유실될 수 있으므로 중요한 내용은 주기적으로 수동 저장하는 습관을 들이는 것이 좋습니다. (JSON 응답 오류로 저장이 안 되는 경우에는 작성한 내용을 텍스트 파일 등으로 저장해 놓으면 안심할 수 있습니다.)

Q4. 클래식 에디터(Classic Editor)를 설치하면 이 오류를 피할 수 있나요?

A. 글 작성 및 저장에 한해서는 임시방편이 됩니다. Classic Editor는 REST API 대신 전통적인 방식으로 글을 저장하기 때문에 블록 에디터에서 발생하는 JSON 오류를 우회할 수 있습니다. 그러나 SureRank, Yoast SEO 등 REST API를 사용하는 다른 플러그인은 여전히 동일한 오류가 발생할 수 있으므로 근본 원인을 찾아 해결하는 것이 바람직합니다.

Q5. 이런 오류가 재발하지 않으려면 어떻게 해야 하나요?

A. 쿠키 손상이 원인인 경우 특정 플러그인 업데이트나 설정 변경이 쿠키 값을 잘못 처리하면서 발생하는 경우가 많습니다. 재발 방지를 위해 플러그인 업데이트 후 이상 증상이 없는지 확인하고, 오류가 갑자기 발생하면 가장 먼저 브라우저 쿠키 삭제를 시도하는 것을 습관화하면 빠르게 대처할 수 있습니다. 또한, 보안 플러그인의 REST API 관련 설정이 과도하게 제한되어 있지 않은지 주기적으로 점검하는 것도 도움이 됩니다.

마치며

몇 년 전에만 해도 '응답이 유효한 JSON 응답이 아닙니다' 오류가 발생하는 사례가 자주 보고되었습니다만, 최근 들어서는 크게 줄어든 것 같습니다.

클래식 편집기(Classic Editor)를 설치하면 글쓰기 화면에서는 이 오류를 피할 수 있습니다. 그러나 클래식 편집기는 블록 에디터로의 전환 과정에서 임시로 제공되는 플러그인으로, 공식적인 지원이 언제까지 계속될지 불확실하기 때문에 적극적으로 권장하기 어렵습니다. 또한 SureRank SEO처럼 REST API를 활용하는 플러그인은 클래식 편집기 설치 여부와 관계없이 동일한 오류가 발생할 수 있어 근본적인 해결책이 되지 못합니다. 결국 클래식 편집기는 어디까지나 임시방편에 불과하므로 앞서 설명한 방법들을 통해 오류의 근본 원인을 찾아 해결하는 것이 바람직합니다.

참고

댓글 남기기

댓글 남기기