구독 업데이트 실패, 가져온 후 노드 수가 0개로 표시되거나 기존 노드는 작동하지만 새로고침이 되지 않는 사용자를 위한 글입니다. 먼저 다운로드, 파싱, 노드 연결 중 어디에서 문제가 발생했는지 확인한 뒤 링크, 응답 내용, 클라이언트 설정과 네트워크 환경을 점검해 실행 가능한 해결책을 찾습니다.
먼저 실패 단계부터 확인하기
“구독을 사용할 수 없다”는 말은 하나의 고장만을 뜻하지 않습니다. 클라이언트가 구독을 업데이트하려면 구독 주소 읽기, DNS 및 TLS 연결 수립, 응답 본문 다운로드, 인코딩 확인, 노드 필드 파싱, 로컬 설정 저장의 여섯 단계를 차례로 완료해야 합니다. 노드가 목록에 저장된 후에야 서버 연결과 프로토콜 핸드셰이크 단계로 넘어갑니다.
업데이트를 누르자마자 주소 형식 오류가 나타나면 구독 링크를 우선 확인하세요. 몇 초 후 시간 초과가 표시되면 네트워크, DNS와 서버 응답을 점검해야 합니다. 업데이트 성공으로 표시되지만 노드 수가 0개라면 반환된 내용과 파싱 형식을 확인하세요. 노드는 정상적으로 표시되지만 지연 시간 테스트가 모두 실패한다면 이미 구독 파싱 단계를 벗어난 문제이므로 노드 매개변수, 서버 상태와 로컬 라우팅을 점검해야 합니다.
| 확인되는 현상 | 문제 발생 단계 | 우선 확인할 항목 |
|---|---|---|
| 업데이트를 누르자마자 오류 발생 | 링크 읽기 단계 | 링크 앞뒤, 프로토콜 접두사, 공백과 줄바꿈 |
| 약 10~30초 후 시간 초과 | 네트워크 요청 단계 | DNS, TLS, 시스템 시간과 프록시 방식 |
| 성공으로 표시되지만 노드가 0개 추가됨 | 내용 파싱 단계 | 응답 본문, Base64 인코딩과 클라이언트 버전 |
| 노드는 있지만 지연 시간 테스트 실패 | 노드 연결 단계 | 주소, 포트, 프로토콜 매개변수와 서버 상태 |
결론: 먼저 노드 수와 오류 발생 시간을 기록하세요
업데이트 전후 노드 수가 그대로이고 곧바로 오류가 발생하면 먼저 링크를 확인하세요. 노드가 삭제되거나 업데이트 후 0개로 표시되면 응답 내용을 먼저 점검해야 합니다. 파싱 성공을 확인하기 전에는 로컬 SOCKS 포트를 반복해서 변경하지 마세요.
구독 링크가 완전한지, 요청 가능한지 확인하기
구독 주소를 복사할 때 가장 흔한 문제는 채팅 창에서 링크 끝부분이 잘리거나, 앞에 설명 문구가 붙거나, 중간에 전각 문자가 섞이는 것입니다. 유효한 주소는 대개 https://로 시작하며 긴 경로, 쿼리 매개변수와 액세스 토큰을 포함할 수 있습니다. 쿼리 매개변수의 물음표, 등호와 연결 기호도 링크의 일부이므로 도메인만 남겨서는 안 됩니다.
먼저 링크를 일반 텍스트 편집기에 붙여넣고 앞뒤에 따옴표, 공백과 줄바꿈이 없는지 확인하세요. 주소에 포함된 액세스 토큰이 구독 조회 권한을 직접 결정할 수 있으므로 공개 온라인 디코더에 구독 주소를 입력하지 마세요. 응답을 확인해야 한다면 신뢰할 수 있는 네트워크에서 로컬 브라우저나 클라이언트 로그를 사용하세요.
원본 주소 확인
구독 제공처에서 전체 주소를 다시 복사하고, 시작 부분이
https://인지, 끝에 마침표·닫는 괄호·공백이 없는지 확인하세요.링크에 직접 접속
로컬 브라우저에서 주소를 여세요. 정상적인 경우 긴 인코딩 텍스트가 표시되거나 텍스트 파일이 다운로드되거나 구조화된 구독 데이터가 반환될 수 있습니다. 로그인 페이지나 인증 페이지는 노드 구독 본문이 아닙니다.
상태 응답 확인
401 또는 403이 표시되면 액세스 토큰이 만료되었거나 요청이 제한된 것입니다. 404는 경로가 존재하지 않는다는 뜻이고, 429는 짧은 시간에 요청이 너무 많다는 뜻이므로 업데이트를 잠시 중단한 후 다시 시도하세요.
구독 다시 저장
v2rayN 7.x에서 「구독 그룹」→「구독 그룹 설정」으로 이동해 기존 주소를 삭제하고 다시 붙여넣은 다음 「구독 그룹」→「모든 구독 업데이트」를 실행하세요.
오류: The remote server returned an error: (403) Forbidden
원인 및 해결 방법: 서버가 현재 구독 요청을 거부했습니다. 토큰 만료, 접근 출처 제한 또는 과도한 요청 빈도가 흔한 원인입니다. 유효한 주소를 다시 발급받고 제한이 해제된 후 업데이트하세요.
오류: Invalid URI: The hostname could not be parsed
원인 및 해결 방법: 링크에 프로토콜 접두사가 없거나 도메인이 완전하지 않거나 공백이 섞여 있습니다. 전체 주소를 다시 복사한 뒤 일반 텍스트 편집기에서 앞뒤 문자를 정리하세요.
오류: The operation has timed out
원인 및 해결 방법: 제한 시간 안에 클라이언트가 완전한 응답을 받지 못했습니다. 먼저 브라우저에서 접속되는지 확인한 다음 DNS, 시스템 프록시와 현재 네트워크를 점검하세요.
응답 내용과 인코딩 형식 확인
기존 구독은 여러 노드 링크를 줄마다 배치한 뒤 전체 텍스트를 Base64로 인코딩하는 경우가 많습니다. 디코딩하면 보통 vmess:// 또는 vless://로 시작하는 레코드를 확인할 수 있습니다. 다른 유형의 구독은 JSON이나 클라이언트 전용 구조를 직접 반환합니다. 클라이언트가 해당 형식을 인식해야 본문을 노드 목록으로 변환할 수 있습니다.
브라우저에서 구독 주소가 열린다는 것은 다운로드 단계가 대체로 작동한다는 뜻일 뿐, 현재 클라이언트가 내용을 반드시 파싱할 수 있다는 의미는 아닙니다. HTML 로그인 페이지, 오류 JSON, 빈 본문 또는 잘린 Base64 문자열이 반환되면 클라이언트는 HTTP 요청 성공으로 표시할 수 있지만 최종적으로 노드를 0개 가져올 수 있습니다.
파싱 가능한 줄 단위 내용 예시:
vless://[email protected]:443?encryption=none&security=tls&type=ws#Example-VLESS
계속 확인해야 할 응답:
<html><title>Sign in</title>...</html>
{"error":"subscription expired"}
빈 본문 또는 길이가 수십 바이트에 불과한 안내 문구
- 디코딩 후 각 노드에는 명확한 프로토콜 접두사가 있어야 하며, 일반적으로 각 레코드는 한 줄을 차지합니다.
- VMess 링크의 본문에는 보통 한 겹의 Base64 인코딩이 더 적용됩니다. 디코딩된 JSON은 완전한 문법을 갖춰야 하며, 필드의 따옴표나 닫는 괄호가 빠지면 파싱에 실패합니다.
- VLESS 링크는 URI 매개변수로 전송 및 보안 설정을 표현합니다. 주소의
&구분자, 퍼센트 인코딩과 조각 이름은 서식 있는 텍스트 편집기에서 바뀌지 않도록 해야 합니다. - 응답이 JSON으로 표시되지만 실제로 웹 페이지가 반환된다면 노드 프로토콜을 수동으로 수정하지 말고 접근 인증이나 구독 제공처 설정을 먼저 처리하세요.
- 응답 본문 크기가 수십 KB에서 갑자기 1KB 미만으로 줄었다면 완전한 노드 목록이 아니라 오류 안내가 반환되었을 가능성이 큽니다.
오류: Failed to parse subscription content
원인 및 해결 방법: 본문은 다운로드되었지만 지원되는 구독 구조로 인식되지 않았습니다. HTML, 오류 JSON 또는 불완전한 인코딩이 반환되었는지 확인하고 현재 유지 관리되는 최신 클라이언트로 다시 파싱하세요.
오류: Invalid character in a Base-64 string
원인 및 해결 방법: 인코딩된 텍스트에 공백, 웹 페이지 태그 또는 복사 과정에서 생긴 보이지 않는 문자가 섞였습니다. 원본 응답을 다시 다운로드하고 서식이 적용된 페이지에서 재복사하지 마세요.
오류: Unexpected end when deserializing object
원인 및 해결 방법: JSON 내용이 끝나기 전에 중단되었습니다. 응답이 완전히 다운로드되지 않았거나 원본 데이터 생성에 실패했을 수 있습니다. 다시 요청해 응답 길이를 비교하고, 문제가 계속되면 구독을 새로 생성하세요.
클라이언트 버전, 그룹과 업데이트 방식 확인
같은 구독이 한 클라이언트에서는 가져와지지만 다른 클라이언트에서는 비어 있다면 지원 프로토콜 필드, 코어 브랜치 또는 클라이언트 파서 버전이 원인일 수 있습니다. v2rayN은 데스크톱 환경용이고, v2rayNG는 Xray 코어를 사용하며, v2flyNG는 v2fly 코어를 사용합니다. 세 제품은 구독 메뉴와 설정 호환 범위가 완전히 같지 않으므로 앱 이름만으로 파싱 결과가 같을 것이라 판단해서는 안 됩니다.
문제를 확인할 때 클라이언트 전체 버전과 코어 버전을 먼저 기록하세요. 한 기기가 아직 v2rayN 6.x를 사용하고 다른 기기가 7.x를 사용한다면 먼저 같은 메이저 버전에서 재현해 보세요. Android에서도 v2rayNG 1.9.x와 v2flyNG 1.8.x를 구분해야 합니다. 버전은 파싱 기능을 비교하기 위한 정보이므로 실제 설치 버전을 무시하고 단순히 “최신 버전”이라고만 적지 마세요.
현재 버전 기록
클라이언트의 「정보」 또는 버전 정보 화면을 열어 클라이언트 버전, Core 유형과 코어 버전을 기록하세요. 노드 이름만 비교하지 않도록 주의합니다.
구독 그룹 확인
v2rayN 7.x에서 「구독 그룹」→「구독 그룹 설정」으로 이동해 주소가 활성화된 그룹에 있는지 확인하세요. 그룹 이름은 유효성을 판단하는 기준이 아닙니다.
업데이트 방식 전환
먼저 일반 업데이트를 실행하세요. 현재 네트워크에서 기존 노드를 거쳐야 주소를 읽을 수 있다면 클라이언트가 제공하는 프록시 업데이트 방식을 사용하세요. 두 방식을 짧은 간격으로 연속 요청하지 마세요.
필터 조건 확인
노드 목록의 키워드 필터를 지우고 전체 서버를 확인하세요. 구독이 저장되었더라도 이름 필터로 숨겨지면 목록이 비어 있는 것처럼 보일 수 있습니다.
현재 코어 재시작
업데이트가 성공하면 설정을 저장하고 현재 코어를 다시 시작한 뒤 노드 수와 로그를 확인하세요. 설정 창만 닫는 것으로는 실행 중인 설정이 다시 로드되지 않을 수 있습니다.
| 클라이언트 | 기록할 정보 | 중점 확인 항목 |
|---|---|---|
| v2rayN 7.x | 클라이언트 버전, Core 유형, 구독 그룹 | 그룹 활성화 여부, 업데이트 방식, 키워드 필터 |
| v2rayNG 1.9.x | 앱 버전, Xray 코어 버전 | 구독 그룹, 백그라운드 네트워크 권한, 파싱 로그 |
| v2flyNG 1.8.x | 앱 버전, v2fly 코어 버전 | 프로토콜 필드가 현재 코어와 호환되는지 |
DNS, TLS와 시스템 네트워크 환경 점검
구독 도메인은 먼저 접속 가능한 IP 주소로 해석된 후 TLS 연결을 수립해야 합니다. DNS가 잘못된 주소를 반환하거나, 기기 시간이 크게 어긋나거나, 인증서 체인을 검증할 수 없거나, 현재 네트워크가 요청을 차단하면 클라이언트는 본문을 받기 전에 중단됩니다. 이때는 노드 내용이 아직 다운로드되지 않았으므로 VMess나 VLESS 필드를 수정해도 소용이 없습니다.
먼저 같은 기기에서 브라우저와 클라이언트의 결과를 비교한 다음, 같은 구독을 서로 다른 네트워크에서 비교하세요. 예를 들어 가정용 네트워크에서는 계속 시간 초과가 발생하지만 모바일 네트워크에서는 약 2초 만에 응답한다면 현재 네트워크 경로에 가까운 문제입니다. 모든 네트워크에서 403이 반환되면 구독 권한 문제일 가능성이 높고, 브라우저는 정상인데 클라이언트만 실패하면 클라이언트의 프록시 업데이트 방식과 시스템 인증서 환경을 확인해야 합니다.
오류: No such host is known
원인 및 해결 방법: 구독 도메인에서 유효한 DNS 결과를 얻지 못했습니다. 안정적인 DNS 서비스로 전환하고 시스템 DNS 캐시를 삭제한 뒤 클라이언트를 다시 시작하세요.
오류: The SSL connection could not be established
원인 및 해결 방법: TLS 핸드셰이크 또는 인증서 검증에 실패했습니다. 먼저 시스템 날짜, 시간과 시간대를 맞춘 다음 현재 네트워크가 인증서를 교체하거나 암호화 연결을 끊는지 확인하세요.
오류: connection reset by peer
원인 및 해결 방법: 연결이 수립된 후 원격 서버나 중간 네트워크에서 연결을 재설정했습니다. 네트워크를 바꿔 다시 테스트하고 연속 업데이트 빈도를 낮춰 일시적인 제한인지 확인하세요.
- 시스템 날짜, 시간대와 자동 시간 동기화 상태를 맞추세요. 시간이 몇 분만 어긋나도 인증서 유효 기간 판단에 실패할 수 있습니다.
- 중복 실행 중인 프록시 프로그램을 종료하고 로컬 수신 포트가 충돌하지 않는지 확인하세요. v2rayN에서 흔히 사용하는 SOCKS 포트는 10808, HTTP 포트는 10809이지만 실제 값은 「설정」→「매개변수 설정」의 로컬 포트를 기준으로 해야 합니다.
- 일반 업데이트가 실패하면 현재 프록시를 통해 업데이트해야 하는지 확인하세요. 프록시 업데이트가 실패한 경우에도 프록시를 거치지 않는 일반 요청을 테스트해야 합니다.
- 두 네트워크 환경에서 각각 한 번씩 테스트하고 요청 시간, HTTP 상태와 응답 크기를 기록하세요. 단순히 “열림” 또는 “열리지 않음”이라고만 적지 마세요.
- 수정할 때마다 업데이트를 한 번만 실행하고 결과가 완전히 나올 때까지 기다리세요. 업데이트를 연속으로 클릭하면 429 제한이 발생해 기존 문제에 요청 빈도 제한까지 겹칠 수 있습니다.
결론: 브라우저가 정상이어도 클라이언트 경로가 정상이라는 뜻은 아닙니다
브라우저는 별도의 DNS, 기존 로그인 상태 또는 다른 프록시 경로를 사용할 수 있습니다. 클라이언트 로그에 구독 본문을 성공적으로 받고 노드가 0개보다 많이 파싱된 것으로 표시되어야 다운로드와 파싱 두 단계가 모두 통과했다고 확인할 수 있습니다.
결과에 따라 해결 방법 선택
앞선 점검을 마친 후 문제를 링크 권한, 네트워크 다운로드, 콘텐츠 인코딩, 클라이언트 호환성 또는 노드 연결 중 하나로 분류하세요. 한 번에 변수 하나만 변경하고 업데이트 전후 노드 수, 응답 상태와 오류 문구를 기록하세요. DNS, 클라이언트와 구독 주소를 동시에 바꾸면 실제 원인을 판단할 수 없습니다.
기존 노드는 연결되지만 구독 업데이트에서 401, 403 또는 만료 안내가 반환되면 유효한 구독 주소를 다시 발급받으세요. 주소에서 완전한 내용이 반환되지만 클라이언트가 0개로 파싱하면 클라이언트를 업그레이드하고 형식을 확인하세요. 노드는 파싱되지만 지연 시간 테스트가 실패하면 노드 서버, 포트, 전송 방식, TLS 매개변수와 라우팅 설정을 점검하세요.
응답 상태 확인
200, 401, 403, 404, 429 또는 시간 초과 결과를 기록하세요. 200이 아닌 응답은 권한, 경로와 요청 빈도를 우선 처리해야 합니다.
본문 유형 확인
Base64 텍스트, 줄 단위 노드 링크, JSON, HTML 페이지와 빈 응답을 구분해 다운로드 성공을 파싱 성공으로 잘못 판단하지 않도록 하세요.
노드 수 확인
업데이트 전후의 수를 비교하세요. 새로 추가된 노드가 0개라면 인코딩과 필터 조건을 확인하고, 수가 정상일 때 지연 시간 테스트를 진행하세요.
핵심 로그 보관
시간, 클라이언트 버전, 오류 원문과 응답 크기를 저장하세요. 추가 분석에 사용할 때는 전체 구독 주소, 노드 주소와 액세스 토큰을 삭제해야 합니다.
단일 항목만 수정
각 라운드에서 링크 재복사, 네트워크 전환, 클라이언트 업그레이드 또는 필터 삭제처럼 변수 하나만 처리한 후 다시 테스트하고 결과를 기록하세요.
현상: 업데이트 성공, 노드 수는 여전히 0개
원인 및 해결 방법: 요청은 성공했지만 본문이 비어 있거나 형식이 호환되지 않거나 노드가 필터로 숨겨졌습니다. 응답 유형을 확인하고 클라이언트를 업그레이드한 뒤 목록 필터를 삭제하세요.
현상: 기존 노드는 작동하지만 새 구독은 업데이트되지 않음
원인 및 해결 방법: 실행 중인 노드 연결과 구독 주소 조회는 서로 독립된 경로입니다. 기존 설정을 보존한 채 구독 토큰, 도메인 해석 또는 업데이트 경로를 점검하세요.
현상: 노드는 가져왔지만 지연 시간 테스트가 모두 실패
원인 및 해결 방법: 구독 파싱은 완료되었고 문제가 노드 연결 단계로 넘어갔습니다. 서버 주소, 원격 포트, UUID, 전송 유형, TLS와 시스템 라우팅을 확인하세요.