이 글의 핵심

Shadowrocket 구독 문제는 링크, 요청, 응답 내용, 목록 표시의 네 단계로 나눠 확인해야 합니다. 이미 이용 중인 서비스 제공업체와 구독이 있다는 전제하에, 링크가 온전한지 확인하고 시간 초과와 파싱 실패를 구분하는 방법, Settings → Subscribe에서 업데이트 방식을 확인하는 방법, 기존 설정을 보존한 채 복구 여부를 검증하는 방법을 안내합니다.

파싱 실패와 목록이 비어 있는 경우 구분하기

구독 업데이트는 먼저 데이터를 가져온 다음 서버 항목으로 파싱합니다. 요청이 완료되지 않거나 서버가 로그인 페이지를 반환하거나 응답 내용을 인식할 수 없으면 새 항목을 가져오지 못할 수 있습니다. 목록이 비어 있는 경우에는 검색 필터, 접힌 구독 그룹, 서버에서 실제로 반환한 내용이 비어 있는 상황도 원인일 수 있습니다. 최종 목록만 보고 어느 단계에서 문제가 생겼는지 판단할 수는 없습니다.

링크 확인 데이터 요청 응답 확인 항목 파싱 목록 확인

먼저 Home으로 돌아가 검색 조건을 지우고 해당 구독 그룹을 펼친 다음, 모든 항목이 없는지 특정 그룹에만 항목이 없는지 확인하세요. 이번 업데이트에서 표시된 전체 안내 문구와 발생 시각을 기록하세요. 기존 항목이 남아 있다면 일단 보존하세요. ‘업데이트 실패’를 ‘기존 설정이 더 이상 유효하지 않음’으로 간주해서는 안 됩니다.

구독 링크 확인: 전체 주소와 인증 매개변수

이용 중인 서비스 제공업체의 계정 페이지에서 Shadowrocket에 사용할 구독 주소를 다시 복사한 뒤, 앱에 저장된 주소와 항목별로 비교하세요. 계정 홈, 요금제 안내 페이지, 개별 서버 공유 정보는 구독 주소와 다릅니다. 복사할 때 전체 내용이 선택됐는지 확인하고, 특히 물음표 뒤의 인증 매개변수를 빠뜨리지 마세요.

https://example.com/sub?token=xxxx

위 주소는 가져오기에 사용할 수 없는 예시입니다. 여기서 https://는 프로토콜 부분, example.com은 도메인, /sub는 경로, ?token=xxxx는 쿼리 매개변수를 나타냅니다. 실제 주소의 경로와 매개변수 이름은 서비스 제공업체가 정하므로 예시를 그대로 따라 수정하면 안 됩니다. 구독 주소의 token은 일반적으로 접근 권한과 연결되므로 계정 자격 증명처럼 보호하세요.

  1. 주소 앞뒤에 따옴표, 공백, 줄바꿈 또는 메신저가 덧붙인 문장 부호가 들어가지 않았는지 확인하세요. URL에 원래 포함된 유효한 인코딩 문자는 삭제하지 마세요.
  2. ?, &, = 등의 구분자가 온전한지 확인하세요. 웹페이지 소스에서 텍스트를 복사했다면 매개변수 구분자가 문자 그대로 &로 잘못 저장되지 않았는지도 살펴보세요.
  3. 원래 token의 대소문자와 인코딩 형식을 유지하세요. %2F를 임의로 디코딩하거나 더하기 기호를 바꾸거나 서명된 매개변수의 순서를 바꾸지 마세요.
  4. 서비스 제공업체에서 구독 주소를 재설정했다면 새 주소를 다시 복사하세요. 이전 주소는 겉보기에 비슷해도 이미 폐기됐을 수 있습니다.

브라우저에서 주소를 열어 확인할 수는 있지만, 그것만으로 결론을 내려서는 안 됩니다. 브라우저는 로그인된 계정의 Cookie를 사용할 수 있어 앱의 구독 요청과 로그인 상태가 다를 수 있습니다. 반대로 브라우저에 긴 인코딩 텍스트가 표시되거나 파일 저장이 시작된다고 해서 응답에 문제가 있다는 뜻은 아닙니다. 확인해야 할 것은 해당 주소가 앱에서 지원하는 구독 내용을 별도 로그인 없이 반환하는지 여부입니다.

응답 확인: 시간 초과, 인증 실패, 형식 불일치

도메인에 접속할 수 있다고 구독 인터페이스가 정상이라는 뜻은 아니며, 응답을 받았다고 유효한 구독 데이터를 받은 것도 아닙니다. 앱 안내, 진단 기록 또는 서비스 제공업체의 응답에 HTTP 상태 코드가 있다면 발생 시각과 함께 기록하세요. 아래는 표준 HTTP 상태 코드 또는 네트워크 오류 용어이며, 매번 Shadowrocket에 정확히 같은 문구로 표시된다는 뜻은 아닙니다.

HTTP 401 Unauthorized

원인: 서버가 현재 요청의 인증 정보를 승인하지 않았습니다. 만료된 token이나 인증 정보 누락이 원인일 수 있습니다.

해결 방법: 계정 페이지에서 구독 주소를 다시 복사하고, 서비스 제공업체에 해당 주소의 인증 상태를 확인해 달라고 요청하세요.

HTTP 403 Forbidden

원인: 서버가 현재 요청을 거부했습니다. 계정 권한, 접속 출처 제한 또는 접근 정책이 관련됐을 수 있으며, 상태 코드만으로 요금제가 만료됐다고 단정할 수는 없습니다.

해결 방법: 계정 상태를 확인하고 요청 시각과 상태 코드를 서비스 제공업체에 전달해 접속 제한 여부를 확인하세요.

HTTP 429 Too Many Requests

원인: 서버에서 요청 빈도를 제한했습니다. 연속으로 새로고침하면 문제 확인이 더 오래 걸릴 수 있습니다.

해결 방법: 반복 요청을 멈추고 서버가 안내한 대기 시간이나 서비스 제공업체의 설명에 따라 기다린 뒤 업데이트를 한 번만 실행하세요.

Request timed out

원인: 정해진 시간 안에 요청이 완료되지 않았습니다. 네트워크 경로나 구독 서버에 문제가 있을 수 있습니다.

해결 방법: 먼저 Wi-Fi와 셀룰러 네트워크에서 결과를 비교한 뒤, Update via Proxy를 사용하려면 이미 작동하는 프록시 연결이 필요한지 확인하세요.

응답이 계정 로그인 페이지, 점검 안내 또는 접속 확인 페이지라면 HTTP 상태가 200이어도 서버 목록으로 파싱할 수 있는 것은 아닙니다. 서비스 제공업체에 제공된 주소가 Shadowrocket에 맞는 구독 형식의 데이터를 반환하는지, 별도의 웹페이지 조작이 필요한 주소는 아닌지 확인하세요. 오류 페이지의 텍스트를 서버 매개변수로 직접 입력하지 마세요.

정리: 먼저 응답 내용을 확인한 뒤 파싱 관련 설정을 조정하세요

반환된 내용이 구독 데이터가 아니라면 같은 주소를 반복해서 가져와도 문제가 해결되지 않습니다. 먼저 이용 중인 서비스 제공업체에 응답 내용과 권한 상태를 확인한 뒤 다시 한 번 업데이트하세요.

Settings → Subscribe 및 업데이트 경로 확인

Settings → Subscribe에서 구독 업데이트 관련 설정을 확인하세요. 특히 Update via Proxy가 중요합니다. 이 설정은 업데이트 요청이 이동하는 경로에 영향을 줄 뿐, 주소 자체를 고치거나 지원하지 않는 응답을 유효한 구독으로 변환하지는 않습니다. 문제를 확인할 때는 한 번에 조건 하나만 바꾸고 업데이트 결과를 기록하세요.

2단계
설정 경로: Settings → Subscribe
2가지 경로
업데이트 요청 비교: 직접 접속과 Update via Proxy
1개
한 번에 조건 하나만 바꾸고 수동으로 업데이트
  1. 현재 설정을 유지한 채 먼저 한 번 업데이트: Home에서 해당 구독을 업데이트하세요. 예를 들어 아래로 당겨 새로고침한 뒤 오류 안내가 표시되는지 확인하고, 요청을 연속해서 여러 번 실행하지 마세요.
  2. 직접 접속에서 시간 초과가 발생할 때만 프록시 경로 검토: 이미 사용할 수 있는 서버가 있다면 먼저 선택해 연결한 뒤 Settings → Subscribe에서 Update via Proxy를 확인하고 활성화한 다음 다시 업데이트하세요.
  3. 프록시가 실제로 작동하는지 확인: Home의 Connectivity Test를 사용해 판단에 참고하세요. 테스트 결과가 있다는 것은 해당 테스트 조건에서 연결이 됐다는 뜻일 뿐, 구독 인터페이스에도 반드시 접속할 수 있다는 보장은 아닙니다.
  4. 프록시 경로가 실패하면 반대 조건으로 비교: 현재 네트워크에서 구독 인터페이스에 직접 접속할 수 있는 경우 Update via Proxy를 끈 뒤 다시 시도하세요. DNS, Global Routing, 구독 주소를 동시에 변경하지 마세요.

목록이 비어 있고 기존에 사용할 수 있는 서버도 없다면 Update via Proxy만 켜서는 연결할 수 없습니다. 이때는 먼저 직접 접속 경로를 확인하거나 이용 중인 서비스 제공업체에 구독 인터페이스의 접속 조건을 문의하세요. 구독 가져오기와 서버 연결은 서로 다른 단계입니다. 후자에 필요한 설정을 아직 확보하지 못했다면 스위치 하나로 전자를 건너뛸 수 없습니다.

업데이트 시점을 선택해 이전 결과를 새 오류로 오인하지 않기

서비스 제공업체가 계정 권한을 복구하거나 token을 재설정하거나 구독 내용을 변경했다면, 변경 사항이 적용됐는지 먼저 확인한 뒤 수동으로 업데이트하세요. 모든 구독의 새로고침 간격이 같다고 가정하지 말고, 앱을 전면에 둔 채 기다리는 것을 업데이트 완료로 간주하지도 마세요. 자동 업데이트 동작은 Settings → Subscribe의 현재 설정을 기준으로 확인해야 합니다.

업데이트 시점 및 확인 방법
현재 상황먼저 할 일이어서 확인할 항목
계정 상태가 방금 복구됨서비스 제공업체 계정 페이지에서 권한이 적용된 것을 확인수동 업데이트 후 예상한 항목이 추가됐는지 확인
구독 주소를 방금 재설정함앱에 저장된 주소를 새 주소로 교체이전 token에 연결된 주소로 계속 요청하고 있는지 확인
네트워크를 Wi-Fi에서 셀룰러로 방금 전환함현재 네트워크 연결이 안정될 때까지 기다리기새 네트워크에서도 같은 주소가 시간 초과되는지 확인
HTTP 429를 받음연속 새로고침을 멈추고 안내에 따라 기다리기다음 요청도 제한되는지 확인
서비스 제공업체에서 구독 내용 변경을 확인함수동 업데이트를 한 번 실행해당 그룹의 항목과 매개변수가 함께 변경됐는지 확인

업데이트에 실패해도 이전 항목이 계속 표시될 수 있으므로 ‘목록에 서버가 남아 있음’이 방금 업데이트에 성공했다는 뜻은 아닙니다. 반대로 항목 이름이 바뀌지 않았다고 업데이트되지 않은 것도 아닙니다. 서버에서 연결 매개변수만 수정했을 수 있습니다. 업데이트 안내, 실제 항목, 서비스 제공업체가 확인한 변경 사항을 함께 살펴보고 이름만으로 판단하지 마세요.

자주 묻는 질문과 문제 확인을 위해 전달할 정보

같은 주소가 브라우저에서는 열리는데 앱에서는 왜 파싱에 실패하나요?

먼저 브라우저에 어떤 내용이 표시되는지 확인하세요. 로그인 페이지나 계정 관리 화면은 구독 데이터를 받았다는 증거가 아닙니다. 구독 텍스트가 표시되더라도 해당 형식이 Shadowrocket에 적합한지 이용 중인 서비스 제공업체에 확인하세요. 브라우저에 표시된 페이지 전체를 서버 입력란에 그대로 붙여 넣지 마세요.

Update via Proxy를 켠 뒤 오히려 업데이트되지 않으면 어떻게 해야 하나요?

먼저 선택한 기존 서버로 연결할 수 있는지 확인하고 Home에서 Connectivity Test를 실행하세요. 프록시 경로를 사용할 수 없지만 구독 인터페이스에 직접 접속할 수 있다면 Settings → Subscribe에서 Update via Proxy를 끈 뒤 한 번만 업데이트하고 두 결과의 차이를 기록하세요.

목록이 비어 있으면 앱을 먼저 삭제한 뒤 구독을 다시 가져와야 하나요?

먼저 Home의 검색 조건을 지우고 그룹을 펼친 다음 구독 주소와 서비스 제공업체 계정 상태를 확인하세요. 앱을 다시 설치하면 기존 설정을 복구하는 일이 늘어날 뿐, 서버가 반환하는 내용은 바뀌지 않습니다. 기존 설정을 보존하면 실패 전후의 차이를 비교하기도 쉽습니다.

구독 업데이트에는 성공했는데 Connectivity Test가 계속 시간 초과되는 이유는 무엇인가요?

구독을 성공적으로 가져왔다는 것은 설정을 받아 파싱했다는 뜻이지, 모든 서버에 연결된다는 뜻은 아닙니다. Home에서 예상한 서버가 선택돼 있는지 확인한 뒤 주소, 포트, 프로토콜에 필요한 매개변수를 이용 중인 서비스 제공업체에 문의하세요. 연결 테스트가 실패했다고 구독 token을 임의로 수정하지 마세요.

서비스 제공업체에 추가 확인을 요청할 때는 문제를 파악하는 데 필요한 정보를 전달하되 구독 인증 정보는 보호하세요. 공개된 게시물이나 토론 공간에 전체 구독 주소, QR 코드 또는 token이 포함된 스크린샷을 올리지 마세요. 전체 주소는 꼭 필요한 경우에만 서비스 제공업체가 지정한 비공개 지원 채널로 전달하세요.

위 항목을 확인하면 다음 조치가 분명해집니다. 주소 오류는 주소를 수정하고, 권한 문제는 서비스 제공업체에 확인하며, 네트워크 시간 초과는 업데이트 경로를 점검하고, 형식 문제는 응답 내용을 확인하세요. 원인이 분명하지 않은 상태에서 여러 설정을 동시에 바꾸면 성공이나 실패의 원인을 파악하기 어렵습니다.