기존 노드를 보존한 뒤 구독 주소와 서버 응답을 확인하고, 네트워크 요청 실패와 콘텐츠 파싱 실패를 구분하세요. 이 글은 v2rayN 데스크톱과 v2rayNG 안드로이드에 적용됩니다. 링크, 업데이트 경로, 형식, 시스템 시간을 차례로 확인하면 문제가 발생한 단계를 파악할 수 있어 구독을 반복해서 삭제하거나 코어를 바꾸는 일을 피할 수 있습니다.
먼저 구분하기: 콘텐츠를 받지 못했나요, 파싱에 실패했나요?
‘업데이트 실패’는 결과일 뿐 원인은 아닙니다. 구독 업데이트는 일반적으로 클라이언트가 HTTP 요청을 보내고, 텍스트를 받은 뒤 노드를 파싱해 해당 그룹에 저장하는 과정입니다. 노드 연결 테스트나 Xray 또는 V2Fly의 정상 실행과는 별개입니다. 업데이트에 실패하면 로그에서 가장 먼저 나타난 오류를 확인하세요. 마지막 줄의 ‘가져오기 실패’만 보면 원인을 놓칠 수 있습니다.
- 본문을 받지 못한 경우: 도메인 확인, 연결 시간 초과, 프록시 경로, TLS 인증서, HTTP 상태를 먼저 점검하세요.
- 본문을 받았지만 가져온 노드가 없는 경우: 응답이 로그인 페이지, 오류 메시지, 빈 텍스트인지 또는 클라이언트가 지원하지 않는 구독 형식인지 확인하세요.
- 업데이트는 성공했지만 노드를 사용할 수 없는 경우: 서버 주소, 포트, 프로토콜 매개변수, 라우팅 규칙을 확인하세요. 이 문제는 구독 다운로드 실패와 구분해야 합니다.
첫 번째: 구독 주소를 다시 복사하고 권한 상태 확인
먼저 주소 자체의 문제부터 확인하세요. 구독 주소에는 대개 액세스 토큰이 포함되어 있으므로 계정 홈페이지, 구매 페이지, 단일 노드 공유 링크로 대체할 수 없습니다. 복사할 때 쿼리 매개변수가 누락되거나 줄바꿈이 섞이거나 반각 &가 텍스트 &로 바뀌면 인증에 실패하거나 다른 리소스를 요청할 수 있습니다.
-
기존 그룹 보존
기존 그룹 이름과 노드 수를 기록하세요. 먼저 구독 주소만 수정하고 서버 전체 삭제는 피해야 연결 가능한 기존 노드를 잃지 않습니다.
-
전용 링크 복사
구독 제공업체의 계정 페이지에서 구독 내보내기 메뉴를 찾아 v2rayN 또는 v2rayNG에 맞는 형식을 선택하세요. 채팅 화면의 캡처 이미지나 줄이 바뀐 텍스트에서 주소를 조합하지 말고 복사 버튼을 사용하세요.
-
링크 전체 확인
프로토콜, 도메인, 경로, 쿼리 매개변수가 모두 있는지 확인하고 앞뒤 공백과 따옴표를 제거하세요. 토큰이 재설정되었다면 기존 주소는 더 이상 사용할 수 없으므로 새로 복사해야 합니다.
-
해당 그룹만 업데이트
주소를 저장한 뒤 대상 그룹만 업데이트하고 전체 결과를 기록하세요. 여러 출처를 동시에 업데이트하면 시간 초과와 인증 오류가 로그에서 뒤섞일 수 있습니다.
신뢰할 수 있는 로컬 브라우저에서 구독 주소를 열어 텍스트나 파일이 반환되는지 확인할 수 있습니다. 다만 브라우저에는 로그인 쿠키가 포함될 수 있고, 프록시 설정이 다르거나 서버 응답이 달라질 수도 있습니다. 따라서 브라우저에서 열린다는 사실만으로 클라이언트에서도 성공한다고 볼 수 없습니다. 전체 주소를 온라인 디코딩·속도 측정·변환 사이트에 붙여 넣지 마세요.
두 번째: HTTP 상태 확인하기 — 로그인 페이지를 구독으로 착각하지 않기
HTTP 상태는 문제 범위를 좁히는 데 도움이 되지만, 콘텐츠가 올바르다는 것을 단독으로 증명하지는 않습니다. 아래 숫자는 표준 응답 상태이며 속도 측정 결과가 아닙니다. 클라이언트에 상태 코드가 표시되지 않으면 로그를 확인하세요. 제공업체 관리 페이지의 요청 기록도 참고할 수 있습니다.
| 응답 상태 | 우선 확인할 사항 | 다음 단계 |
|---|---|---|
200, 본문이 <!DOCTYPE html>로 시작 | 로그인·인증·오류 페이지가 반환되었을 수 있음 | 구독 전용 주소를 다시 발급받고 자동화 요청용 주소를 제공업체에 확인하세요. |
401 또는 403 | 인증 정보가 잘못되었거나 권한 제한 또는 접근 정책에 차단됨 | 토큰과 계정 상태를 확인하세요. 403을 곧바로 요금제 만료로 단정할 수는 없습니다. |
404 또는 410 | 경로가 없거나 리소스가 삭제됨 | 계정 페이지에서 현재 구독 주소를 다시 복사하세요. |
429 | 업데이트 요청이 너무 잦거나 서버의 요청 제한에 걸림 | 연속으로 다시 누르지 마세요. 응답에 Retry-After가 있으면 안내된 시간만큼 기다리세요. |
5xx | 서버 또는 상위 시스템 처리 실패 | 기존 노드를 보존하고 잠시 후 다시 시도한 다음 제공업체에 문의하세요. |
세 번째: 직접 연결과 프록시 연결로 각각 업데이트 테스트
구독 도메인과 노드 서버는 서로 다른 대상입니다. 노드가 작동한다고 구독 도메인에 직접 연결할 수 있는 것은 아니며, 구독을 다운로드할 수 있다고 노드 연결까지 되는 것도 아닙니다. v2rayN의 업데이트 메뉴에는 ‘프록시 사용 안 함’과 ‘프록시 사용’ 옵션이 있을 수 있습니다. 각각 테스트하고, 시스템 프록시만 전환한 뒤 요청 경로가 바뀌었다고 판단하지 마세요.
-
구독 설정 찾기
v2rayN에서 「구독 그룹」→「구독 그룹 설정」을 열고 대상 그룹의 주소를 확인하세요. 화면 버전에 따라 메뉴 이름이 조금 다를 수 있으니 현재 창에서 같은 기능의 메뉴를 찾으면 됩니다.
-
직접 연결로 업데이트 테스트
「구독 그룹」에서 「현재 구독 업데이트(프록시 사용 안 함)」를 선택하세요. 한 번만 테스트하고 시간 초과, 인증서 오류, HTTP 오류가 발생하는지 기록하세요.
-
프록시 연결 상태 확인
이전에 작동을 확인한 노드를 선택해 코어를 실행한 다음 「현재 구독 업데이트(프록시 사용)」를 선택하세요. 기존 노드가 모두 작동하지 않는다면 이 경로만으로 연결을 복구할 수 없습니다.
-
안드로이드 그룹 확인
v2rayNG 메인 화면 오른쪽 위 메뉴에서 「구독 그룹 설정」으로 이동해 주소를 확인하고 저장하세요. 메인 화면으로 돌아와 대상 그룹을 선택한 뒤 메뉴에서 「현재 그룹 구독 업데이트」를 실행합니다.
-
다시 시도하고 결과 비교
v2rayNG에서는 서비스가 중지된 상태와 기존의 작동하는 서비스를 실행한 상태에서 각각 다시 시도해 로그를 비교할 수 있습니다. VPN 상태만으로 구독 요청 경로를 판단하지 말고 현재 버전의 업데이트 옵션과 라우팅 설정도 확인하세요.
네 번째: 인코딩과 구독 형식이 맞는지 확인
일반적인 구독 본문은 여러 공유 링크를 담거나, 해당 링크들을 모은 텍스트를 Base64로 인코딩한 결과입니다. 클라이언트는 먼저 바깥 형식을 식별한 다음 각 노드를 파싱해야 합니다. 단일 vmess:// 링크의 데이터에는 별도의 인코딩 계층이 있을 수도 있습니다. 응답 전체를 ‘읽을 수 있는 문자가 나올 때까지’ 반복해서 디코딩하지 마세요.
- 공유 링크 목록: 디코딩한 텍스트에
vmess://,vless://,trojan://등 클라이언트가 지원하는 스킴이 포함되어 있는지, 각 항목이 완전한지 확인하세요. - 오류 응답: JSON 객체에
error,message같은 오류 필드만 있다면 보통 API 응답이므로 노드 목록으로 가져오면 안 됩니다. - 형식 불일치: YAML 설정이나 전체 코어 JSON 설정은 구독 링크 목록으로 파싱되지 않을 수 있습니다. 제공업체의 내보내기 메뉴에서 대상 클라이언트 형식을 선택하세요.
- 전송 데이터 손상: 잘린 Base64, 대체된 문자, 잘못된 인코딩 계층은 파싱 실패를 일으킬 수 있습니다. 문자를 직접 보충하지 말고 원본 응답을 다시 받으세요.
응답에 빈 줄, 안내 문구, 지원되지 않는 노드가 섞이면 클라이언트에 따라 일부만 가져오거나 오류를 표시할 수 있습니다. 업데이트 후 노드 수가 줄었다면 가져오기 로그와 제공업체가 현재 반환하는 내용을 확인하세요. 클라이언트가 노드를 삭제했다고 바로 단정하지 마세요.
구독 파싱은 클라이언트 기능이며, 노드 실행에 코어 기능이 필요합니다. VLESS 매개변수나 다른 프로토콜 필드를 인식하지 못한다면 클라이언트 버전과 내보내기 형식을 먼저 확인하세요. Xray를 V2Fly로 바꾸는 것만으로 웹 페이지 응답이나 손상된 Base64를 해결할 수는 없습니다.
다섯 번째: 실제 오류를 바탕으로 DNS·TLS·시간 문제 확인
아래는 네트워크 또는 디코딩 라이브러리에서 흔히 볼 수 있는 오류 문구입니다. 대소문자, 접두어, 추가 정보는 클라이언트 버전에 따라 달라질 수 있으며 모든 클라이언트에 동일하게 표시되는 것은 아닙니다. 오류가 발생한 단계를 확인해 코어 연결 로그와 구독 다운로드 로그를 혼동하지 마세요.
오류: No such host is known
원인: 도메인 이름을 확인하지 못했습니다. 주소 오타, 시스템 DNS 또는 네트워크 환경이 원인일 수 있습니다.
해결 방법: 먼저 구독 도메인을 확인한 뒤 같은 네트워크에서 다시 시도하세요. 필요하면 신뢰할 수 있는 다른 네트워크와 비교하고, 실제 요청 경로에 사용되는 DNS를 확인한 다음 조정하세요.
오류: Connection refused
원인: 대상 주소의 포트에서 연결을 거부했습니다. 대상이 로컬 주소라면 먼저 로컬 프록시가 요청을 수신 중인지 확인하세요.
해결 방법: 오류에 표시된 호스트와 포트를 확인해 구독 서버인지 로컬 프록시인지 구분한 뒤 원격 서비스 또는 로컬 코어의 실행 상태를 각각 점검하세요.
오류: x509: certificate has expired or is not yet valid
원인: 인증서 유효 기간과 기기의 현재 시간이 맞지 않습니다. 시스템 시간이 잘못되었거나 서버 인증서가 실제로 만료되었을 수 있습니다.
해결 방법: 시스템 날짜와 시간을 맞춘 뒤 다시 시도하세요. 시간이 정확한데도 실패하면 구독 제공업체에 인증서 처리를 요청하세요. 인증서 검증을 끄지 마세요.
오류: illegal base64 data at input byte 0
원인: Base64 디코더에 전달된 내용이 첫 부분부터 예상 형식과 다릅니다. 형식 오류나 웹 페이지 응답에서 흔히 발생합니다.
해결 방법: 응답 본문의 시작 부분과 내보내기 형식을 확인하고 전체 구독을 다시 받으세요. 실제 오류 메시지의 바이트 위치는 다른 숫자일 수도 있습니다.
Windows에서는 「설정」→「시간 및 언어」→「날짜 및 시간」으로 이동해 자동 시간 설정을 켜고 동기화를 실행하세요. Android에서는 시스템 「설정」의 「날짜 및 시간」에서 네트워크 제공 시간 사용을 켜세요. 제조사에 따라 메뉴 위치가 다를 수 있습니다. 시간대는 표시 방식에 주로 영향을 주므로 실제 날짜와 시각도 정확한지 확인하세요.
업데이트 성공 후: 그룹을 확인하고 노드를 테스트하세요
성공 메시지는 이번 업데이트 과정이 완료되었다는 뜻일 뿐입니다. 대상 그룹에 예상한 노드가 있는지, 다른 그룹을 보고 있지는 않은지, 중복 항목은 없는지 확인하세요. 노드를 선택해 연결 테스트를 진행하고 ‘구독 가져오기 완료’와 ‘서비스 접속 복구’를 각각 확인하세요.
- 그룹이 비어 있음: 다른 그룹을 선택한 것은 아닌지, 서버에서 빈 구독을 반환했는지, 로그에 모든 항목의 파싱 실패가 기록되었는지 확인하세요.
- 노드는 있지만 테스트에 실패함: 서버 주소, 포트, TLS 호스트 이름, 프로토콜 매개변수를 확인하세요. 구독 업데이트에 성공했다면 토큰을 반복해서 재발급하지 마세요.
- 일부 앱에서만 문제가 발생함: 시스템 프록시, TUN 또는 앱 자체의 프록시 설정과 라우팅 규칙을 확인하세요. 이는 구독 파싱 단계의 문제가 아닙니다.
- 도움이 필요한 경우: 클라이언트 이름과 실제 버전, 운영체제, 실패 시간, 업데이트 방식, 민감 정보를 가린 오류 로그를 제공하세요. 전체 구독 주소, 토큰, 노드 인증 정보, 계정 정보는 숨기세요.
문제 해결을 멈출 기준도 정해 두세요. 올바른 응답을 받고 가져오기에 성공했다면 구독 단계의 변경을 끝내면 됩니다. 권한 만료나 서버 오류로 확인되면 사용 가능한 설정을 보존한 뒤 제공업체에 문의하세요. DNS, 포트, 코어를 계속 바꾸면 문제 범위가 커질 수 있습니다.