v2rayN, v2rayNG 또는 v2flyNG에서 구독이 업데이트되지 않거나 업데이트 완료 후 노드가 보이지 않는 경우에 유용합니다. 요청, 응답, 파싱, 필터링 중 어느 단계에서 문제가 생겼는지 먼저 확인한 다음 구독 주소, 업데이트 네트워크, 응답 형식과 그룹 필터를 점검하세요. 한 번에 설정 하나만 바꾸고 기존에 사용 가능한 설정은 그대로 보존하세요.
1. 요청 실패와 파싱 결과 없음을 구분하기
‘구독 업데이트 실패’는 한 가지 원인으로만 발생하지 않습니다. 클라이언트가 먼저 구독 주소에 HTTP 요청을 보내고, 응답을 받은 뒤 형식을 판별해 파싱한 노드를 그룹에 추가하고 화면에 표시합니다. 요청 시간 초과는 콘텐츠를 받지 못했을 가능성이 있고, 파싱 오류는 받은 콘텐츠가 유효한 구독 형식이 아닐 수 있다는 뜻입니다. 목록이 비어 있다면 그룹 선택이나 검색 조건이 원인일 수도 있습니다.
문제를 확인할 때는 클라이언트 로그나 업데이트 결과 메시지를 열어 첫 번째 오류와 발생 시각을 기록하세요. 노드 연결 시의 코어 로그를 구독 다운로드 로그로 오해하지 마세요. 구독은 클라이언트 자체 네트워크 구성 요소가 가져올 수 있고, 노드 연결은 선택한 코어가 처리하므로 두 경로의 오류는 서로를 대신하지 않습니다.
- 오래 기다린 뒤 시간 초과: 구독 도메인의 DNS 조회, 네트워크 연결 상태, 업데이트 요청의 프록시 경유 여부를 먼저 확인하세요.
- 곧바로 파싱 오류 발생: 응답이 로그인 페이지나 오류 페이지인지, 지원되지 않는 설정 형식인지 먼저 확인하세요.
- 업데이트 완료로 표시되지만 목록이 비어 있음: 대상 그룹을 선택하고 검색 조건을 지운 다음 필터 규칙을 확인하세요.
- 노드는 표시되지만 연결 실패: 구독 가져오기는 대체로 완료된 상태입니다. 서버 주소, 포트, 프로토콜 매개변수와 TLS 설정을 별도로 점검하세요.
2. 구독 주소와 계정 상태 확인하기
구독 주소는 서비스 제공업체의 홈페이지나 로그인 후 관리 페이지 주소가 아닙니다. 제공업체에서 ‘구독 링크 복사’를 선택하거나 클라이언트에 해당하는 메뉴에서 주소를 다시 복사한 뒤 구독 그룹의 URL 입력란에 붙여 넣으세요. 링크에는 보통 접속 자격 증명이 포함되므로 전체 주소를 공개 게시판에 올리거나 온라인 디코딩·구독 변환 사이트에 입력하지 마세요.
-
기존 설정 보존
먼저 클라이언트 설정을 백업하거나 기존 구독 그룹을 남겨 두세요. 새 링크가 유효한지 확인하기 전에 유일하게 사용 가능한 노드를 삭제하거나 목록을 비운 뒤 계속 다시 가져오지 마세요.
-
링크 다시 복사
서비스 제공업체 계정 페이지에서 구독 기간과 이용 권한을 확인하고 클라이언트 호환 구독 주소를 다시 복사하세요. 구독 초기화를 실행했다면 이전 주소가 더 이상 유효하지 않을 수 있습니다.
-
문자 확인
주소의 시작과 끝, 쿼리 매개변수를 로컬에서 확인하고 복사 과정에서 붙은 공백, 줄바꿈, 따옴표를 제거하세요. 물음표 뒤의 매개변수를 임의로 지우거나 반각 기호를 전각 기호로 바꾸지 마세요.
-
그룹 하나만 업데이트
v2rayN에서는 ‘구독 그룹’에서 ‘구독 그룹 설정’을 열어 URL을 확인할 수 있습니다. v2rayNG에서는 사이드 메뉴의 ‘구독 그룹 설정’을 여세요. 저장한 다음 점검할 그룹 하나만 업데이트해 다른 구독의 오류가 섞이지 않도록 하세요.
버전에 따라 메뉴 이름이 조금 다를 수 있으므로 현재 화면의 구독 그룹 편집 항목을 기준으로 확인하세요. v2flyNG의 메뉴와 옵션도 별도로 확인해야 합니다. 화면이 비슷하다고 업데이트 방식까지 같다고 단정하지 마세요. 채팅 메시지에서 링크를 복사했다면 끝에 중국어 마침표가 붙지 않았는지, 웹페이지 소스에서 복사했다면 매개변수 구분자가 &로 잘못 복사되지 않았는지도 확인하세요.
3. 업데이트가 사용할 수 없는 프록시에 의존하는지 확인하기
업데이트 요청이 프록시를 경유하는 것 자체는 오류가 아닙니다. 문제는 현재 프록시를 사용할 수 있는지 여부입니다. 사용할 수 없는 노드를 통해 새 구독을 내려받으려 하면 기존 노드 연결과 구독 요청이 모두 시간 초과되는 의존성 문제가 생깁니다. 반대로 일부 네트워크에서는 구독 도메인에 직접 연결할 수 없어 강제 직결로 해결되지 않을 수도 있습니다.
오류: The operation has timed out
원인과 해결: 정해진 시간 안에 요청이 완료되지 않았다는 뜻일 뿐, 계정이 만료됐다고 단정할 수는 없습니다. 프록시를 사용하지 않는 업데이트와 사용 가능한 프록시를 통한 업데이트를 각각 시험한 뒤 구독 도메인에 연결할 수 있는지 확인하세요.
오류: No such host is known
원인과 해결: 요청에 필요한 호스트 이름을 확인할 수 없다는 뜻입니다. 로그에 표시된 호스트가 구독 서버인지 프록시 서버인지 확인하고, 이름의 철자와 현재 네트워크의 DNS를 점검하세요. 노드 프로토콜을 바로 변경하지 마세요.
오류: Connection refused
원인과 해결: 대상 포트가 연결을 거부했습니다. 오류가 원격 구독 서버를 가리키는지 로컬 프록시 수신 포트를 가리키는지 확인하세요. 로컬 포트 문제라면 클라이언트 코어가 실행 중인지, 포트와 프록시 설정이 일치하는지 점검하세요.
해당 메뉴가 있는 v2rayN 버전에서는 ‘구독 그룹’에서 ‘프록시를 사용하지 않음’이라고 표시된 업데이트 항목을 선택해 ‘프록시를 통해 업데이트’ 항목과 비교할 수 있습니다. v2rayNG 설정에 ‘프록시를 통해 구독 업데이트’ 옵션이 있다면 현재 상태를 기록한 뒤 한 번 전환해 현재 그룹을 업데이트하세요. 해당 옵션이 없는 버전에서는 다른 클라이언트의 메뉴 경로를 그대로 따라 하지 마세요.
- 프록시 없이 업데이트되지만 프록시를 통하면 실패한다면 현재 선택된 노드와 로컬 프록시 수신 상태를 먼저 확인하세요.
- 사용 가능한 프록시를 통하면 업데이트되지만 직접 연결은 실패한다면 사용할 수 있는 업데이트 경로를 유지하고 로컬 네트워크의 도메인 조회나 접속 제한을 확인하세요.
- 두 방식 모두 실패한다면 HTTP 상태와 응답 콘텐츠를 확인하세요. 경로 모드를 계속 바꾸며 우연히 해결되기를 기대하지 마세요.
- TUN도 활성화되어 있다면 ‘프록시를 사용하지 않음’은 보통 애플리케이션 계층의 요청 방식을 가리킬 뿐, 패킷이 가상 네트워크 인터페이스를 반드시 우회한다는 뜻은 아닙니다. 필요하다면 현재 상태를 기록하고 TUN을 잠시 끈 뒤 결과를 비교하세요.
4. 상태 코드와 응답 콘텐츠로 실패 원인 확인하기
구독 도메인의 홈페이지가 열린다고 해서 구독 API가 유효한 것은 아닙니다. HTTP 200도 요청이 성공 응답을 받았다는 뜻일 뿐, 콘텐츠를 파싱할 수 있다는 보장은 아닙니다. 로그에 상태 코드가 표시되면 아래 표를 기준으로 원인 범위를 좁히세요. 클라이언트에 응답 본문이 표시되지 않는다면 서비스 제공업체에 API 오류 설명을 요청하세요. 로컬에서 응답을 확인해야 한다면 신뢰할 수 있는 기기에서만 처리하고 자격 증명이 포함된 콘텐츠를 동기화하거나 전달하지 마세요.
| 확인 결과 | 일반적인 의미 | 다음 조치 |
|---|---|---|
| HTTP 401 | API에 유효한 인증이 필요하지만 현재 자격 증명이 승인되지 않음 | 로그인한 계정에서 제공하는 구독 링크를 다시 복사하고 이용 권한을 확인하세요 |
| HTTP 403 | 서버가 요청을 거부했거나 접속 정책이 적용됨 | 서버 오류 안내를 확인하고 계정 만료로 단정하지 마세요 |
| HTTP 404 또는 410 | API가 없거나 리소스가 삭제됨 | 이전 구독 메뉴가 이동했는지 확인하고 현재 주소를 다시 받으세요 |
| HTTP 429 | 업데이트 요청이 너무 잦거나 요청 제한에 걸림 | 연속 업데이트를 멈추고 응답의 Retry-After 값이나 서비스 제공업체 안내에 따라 기다리세요 |
| HTTP 5xx | 서버 또는 중간 게이트웨이 처리 오류 | 로컬 노드는 유지하고 잠시 후 다시 시도한 다음 서버 상태를 확인하세요 |
| HTTP 200, 응답 본문은 HTML | 로그인 페이지, 인증 페이지 또는 오류 페이지일 수 있음 | 구독 전용 주소를 사용하고 API가 브라우저 조작 없이 작동하는지 확인하세요 |
| HTTP 204 또는 응답 본문 없음 | 파싱할 응답 콘텐츠가 없음 | 구독 이용 권한, 서버의 노드 할당과 API 응답을 확인하세요 |
요약: 먼저 구독 응답을 받았는지 확인한 뒤 파싱을 점검하세요
로그인 페이지, 접속 거부 또는 빈 응답이 반환되면 먼저 API와 이용 권한을 확인하세요. 응답에 클라이언트가 지원하는 노드 정보가 실제로 포함된 경우에만 인코딩과 필터 규칙을 점검하면 됩니다.
브라우저에서는 접속되는데 클라이언트에서 실패한다면 브라우저에 로그인 쿠키가 저장되어 있거나 웹 인증이 자동으로 완료됐거나, 두 프로그램이 서로 다른 네트워크 경로를 사용할 수 있습니다. 이때 브라우저 주소창의 페이지 링크를 복사해도 대개 해결되지 않습니다. 로그에 인증서 오류가 있다면 시스템 시간, 요청 도메인과 서버 인증서를 확인하세요. 인증서 검증을 꺼서 구독 API 문제를 숨기지 마세요.
5. Base64, 공유 링크와 설정 형식 확인하기
구독은 콘텐츠를 배포하는 방식이지 통일된 파일 문법이 아닙니다. 응답에는 줄마다 정리된 노드 공유 링크나, 링크 목록 전체를 Base64로 인코딩한 텍스트가 포함되는 경우가 많습니다. 형식 지원은 클라이언트 버전에 따라 다르며 서비스 제공업체의 ‘범용 구독’이 모든 클라이언트에 적합한 것도 아닙니다.
- 구독 전체 인코딩: 일부 구독은 여러 줄의 공유 링크 전체를 Base64로 인코딩합니다. 디코딩해야
vmess://,vless://등의 접두사가 보입니다. 원문에서 접두사가 보이지 않는다고 콘텐츠가 손상됐다고 단정하지 마세요. - 개별 공유 링크: 기존 VMess 공유 형식은 보통 접두사 뒤에 Base64로 인코딩된 JSON을 포함합니다. VLESS 공유 링크는 일반적으로 URI 매개변수를 사용합니다. 모든 프로토콜에 일괄적으로 ‘두 번 디코딩’을 적용하지 마세요.
- 인코딩 변형: 표준 Base64와 URL 안전 변형은 사용하는 문자 집합이 다르고, 끝부분의 패딩도 다를 수 있습니다. 이런 형식을 허용하는지는 파서에 따라 달라지므로 문자를 임의로 바꿔 해결하려 하지 마세요.
- 전체 설정 파일: 코어의 JSON 설정은 구독 링크 목록과 다릅니다. 전체 설정을 가져올 수 있는 메뉴라고 해서 ‘구독 업데이트’에서도 같은 콘텐츠를 읽을 수 있는 것은 아닙니다.
- 기타 형식: 응답이 YAML 필드, 웹페이지 태그 또는 오류 문구로 시작하는데 현재 메뉴가 공유 링크를 요구한다면 서비스 제공업체가 제공하는 호환 구독 메뉴로 바꾸세요.
인코딩을 확인해야 한다면 로컬 도구를 사용하고 구조만 점검하세요. 디코딩한 결과를 제3자 서비스에 업로드하지 마세요. 디코딩 후에도 HTML 로그인 페이지가 나온다면 문제는 여전히 응답 콘텐츠에 있습니다. 링크에 서버 주소, 포트 또는 필수 매개변수가 빠져 있다면 구독 제공업체에 수정을 요청해야 합니다. 실제 설정 대신 누락된 항목을 수동으로 채우지 마세요.
6. 업데이트는 성공했지만 목록이 비어 있다면 필터와 표시 상태 확인하기
필터링은 보통 콘텐츠를 가져온 다음에 적용됩니다. 구독에 노드가 포함되어 있고 클라이언트가 이를 인식해도 그룹의 포함·제외 규칙이나 화면 검색으로 모든 결과가 숨겨질 수 있습니다. 먼저 메인 화면의 검색어를 지우고 방금 업데이트한 그룹을 선택하세요. 다른 빈 그룹을 보고 업데이트 결과를 판단하지 마세요.
-
그룹 확인
구독 그룹 이름과 저장된 URL을 확인해 업데이트 메시지가 현재 보고 있는 그룹에 해당하는지 확인하세요. 이름이 같거나 오래된 다른 그룹일 수 있습니다.
-
필터 임시 해제
클라이언트의 그룹 편집 항목에서 기존 필터 내용을 기록한 다음 잠시 지우세요. 모든 버전에 같은 필터 항목이 있는 것은 아니므로 해당 항목이 없다면 검색 조건부터 확인하세요.
-
그룹 하나만 다시 업데이트
현재 그룹만 업데이트하고 로그를 확인하세요. 노드가 다시 표시되면 구독 주소를 계속 초기화할 것이 아니라 필터 규칙의 의미를 점검해야 합니다.
-
조건 하나씩 복원
조건을 하나씩 복원할 때마다 목록을 다시 확인하세요. 먼저 필드가 ‘일치 항목 유지’인지 ‘일치 항목 제외’인지 확인한 다음 일반 텍스트를 쓰는지 정규식을 쓰는지 점검하세요.
필드가 정규식을 명시적으로 지원하는 경우에만 ^$는 보통 빈 문자열과 일치하고 .*는 보통 길이와 관계없이 모든 문자와 일치합니다. 전자를 포함 조건에 넣으면 이름이 비어 있지 않은 항목이 모두 제외될 수 있고, 후자를 제외 조건에 넣으면 모든 항목이 제외될 수 있습니다. 일반 키워드만 지원하는 필드에 정규식을 붙여 넣지 말고, 여러 키워드의 구분자가 모든 버전에서 같다고 가정하지 마세요.
요약: 조건을 지운 뒤 규칙을 하나씩 복원하세요
필터와 검색 조건을 지운 뒤 노드가 표시된다면 구독 주소와 업데이트 경로는 그대로 두고 필터 조건만 수정하세요. 그래도 목록이 비어 있다면 응답 콘텐츠와 형식을 다시 확인하세요.
7. 재현 정보를 정리하고 설정을 반복해서 바꾸지 않기
위 단계를 거쳐도 원인을 찾지 못한다면 설정 전체를 캡처하는 것보다 간단한 재현 정보가 더 유용합니다. 클라이언트 업데이트로 파싱 호환성이 달라질 수 있으므로 ‘최신 버전’이라고만 적지 말고 전체 버전 번호를 기록하세요. 업그레이드할 예정이라면 먼저 기존 설정을 보존한 다음 설치 파일 페이지에서 해당 플랫폼의 클라이언트를 선택하세요. 제거 후 재설치를 첫 번째 조치로 삼지 마세요.
- 환경: 클라이언트 이름과 전체 버전, 운영체제, TUN 사용 여부.
- 문제 재현 방법: 그룹 하나만 업데이트했는지 전체 구독을 업데이트했는지, 직접 연결 또는 프록시를 사용했는지, 매번 같은 문제가 발생하는지.
- 요청 결과: 원본 오류 문구, HTTP 상태 코드, 응답이 비어 있는지 웹페이지인지 구독 텍스트인지.
- 표시 결과: 검색과 필터를 지운 뒤에도 목록이 비어 있는지, 다른 기존 그룹은 정상인지.
- 수행한 조치: 링크를 다시 받았는지, 이용 권한을 초기화했는지, 네트워크를 전환하거나 업데이트 경로를 변경했는지 기록하세요. 정보를 공유하기 전에 주소에 포함된 자격 증명과 노드 접속 매개변수를 삭제하세요.
마지막으로 ‘주소 유효성, 요청 연결, 응답 적합성, 형식 호환성, 필터 타당성’ 순서로 확인 범위를 좁히세요. 한 단계를 확인하면 해당 단계의 설정은 더 바꾸지 마세요. DNS, 라우팅, 코어와 구독 메뉴를 한꺼번에 변경하면 문제가 해결되더라도 어떤 조치가 효과가 있었는지 알 수 없습니다.