먼저 받은 항목이 구독 주소인지, 단일 공유 링크인지, 코어 실행 설정인지 구분한 다음 가져오기 메뉴를 선택하세요. 노드를 옮기거나 구독 형식 오류를 해결하려는 사용자를 위한 안내입니다. Base64 인코딩과 프로토콜 매개변수를 구별하고, v2rayN에서 구독을 가져오거나 노드를 내보내는 방법을 살펴봅니다. JSON을 공유 링크로 바꿀 때 라우팅, DNS, 복수 아웃바운드 설정이 보존되지 않을 수 있다는 점도 알아봅니다.
먼저 구분하기: 구독 주소, 공유 링크, 실행 설정
텍스트의 첫 부분부터 확인하고 확장자를 먼저 바꾸지는 마세요. https://로 시작하는 주소는 구독 주소일 수도 있고 계정 웹페이지일 수도 있습니다. vmess:// 또는 vless://로 시작하는 텍스트는 보통 단일 노드 공유 링크입니다. 중괄호로 시작하고 inbounds와 outbounds가 포함된 JSON은 코어 실행 설정일 수 있습니다. 파일명만으로 판단하지 말고 내용도 확인하세요.
구독 주소
권장클라이언트가 주소에 요청을 보내면 서비스 제공자가 현재 제공하는 노드 목록을 가져옵니다. 노드가 바뀌면 다시 업데이트할 수 있지만, 반환 형식은 클라이언트와 호환되어야 합니다.
적합한 경우: 장기간 사용하거나 노드 및 설정 업데이트를 받으려는 경우
단일 노드 공유 링크
서버 주소, 인증 정보, 전송 매개변수를 하나의 텍스트로 묶습니다. 가져온 뒤에는 독립된 노드가 되므로 원래 제공자가 설정을 바꿔도 자동으로 반영되지 않습니다.
적합한 경우: 임시 테스트, 소수 노드 이전, 매개변수별 확인
기본 JSON 설정
코어의 실행 방식을 직접 지정하며, 수신 포트, DNS, 라우팅, 여러 아웃바운드가 포함될 수 있습니다. 해당 코어와 설정 문법이 맞는지 함께 확인해야 합니다.
적합한 경우: 실행 로직 전체를 유지하거나 관리자가 제공한 사용자 지정 설정을 사용하는 경우
여기서 구독 주소를 권장하는 이유는 지속적인 업데이트가 필요한 일상적인 사용에 적합하기 때문이지, JSON보다 더 완전해서가 아닙니다. 구독은 보통 노드를 배포하고, 전체 설정은 실행 동작을 정의합니다. 두 형식의 용도는 다릅니다.
Base64 구독: 인코딩 대상은 노드 목록이지 암호화 터널이 아닙니다
일반적인 기존 V2Ray 구독은 여러 공유 링크를 줄바꿈으로 이어 붙인 뒤 전체 텍스트를 Base64로 인코딩합니다. 디코딩하면 VMess 링크와 VLESS 링크가 한 줄씩 나올 수도 있고, 모두 같은 프로토콜일 수도 있습니다. Base64는 바이트를 출력 가능한 문자로 표현하는 인코딩 방식일 뿐, 노드 인증 정보를 보호하거나 연결 프로토콜을 바꾸지는 않습니다.
“구독 응답이 긴 문자열로 나온다”고 해서 내용이 손상된 것은 아닙니다. 반대로 브라우저에서 구독 주소가 열린다고 형식이 올바른 것도 아닙니다. 서버가 로그인 페이지, 만료 안내 또는 접근 확인 페이지를 반환하면 클라이언트는 노드 목록으로 파싱할 수 없습니다.
- 먼저 주소 출처를 확인하세요: 서비스 제공자의 클라이언트 구독 메뉴에서 복사하고, 브라우저 주소창의 계정 페이지 주소는 복사하지 마세요.
- 다음으로 응답 형식을 확인하세요: 반환된 내용을 로컬에서 살펴보세요.
<html이나 로그인 안내가 보이면 계정 및 주소 문제부터 해결하세요. - 두 단계의 인코딩을 구분하세요: 기존 구독 전체에 Base64 인코딩이 적용될 수 있고, 그 안의 기존 VMess 공유 링크도 페이로드에 별도의 Base64 인코딩을 사용할 수 있습니다.
- 반복해서 디코딩하지 마세요: 읽을 수 있는 공유 링크가 나오면 멈추세요. 여러 번 처리하면 매개변수가 손상되거나 정상 텍스트를 깨진 문자열로 오인할 수 있습니다.
VMess와 VLESS 공유 링크에는 각각 무엇이 들어 있나요?
기존 VMess 공유 형식은 보통 vmess:// 뒤에 Base64로 인코딩된 JSON이 붙습니다. JSON에는 add, port, id, net 등의 필드가 사용됩니다. 이 JSON은 “공유 정보”이지, 인바운드와 라우팅이 포함된 코어 전체 설정이 아닙니다. 공유 정보의 v는 보통 공유 형식 버전을 뜻하며 v2rayN 프로그램 버전이 아닙니다.
VLESS 공유 링크는 일반적으로 URI 구조를 사용합니다. 인증 정보는 주소 앞부분에, 전송 및 보안 옵션은 쿼리 매개변수에, 메모는 # 뒤에 들어갑니다. 아래는 예시 도메인과 테스트용 UUID를 사용한 설명용 샘플이며 실제 연결 서비스를 제공하지 않습니다.
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=node.example.com&path=%2Fgateway&sni=node.example.com#format-demo
| 필드 | 샘플 값 | 확인 사항 |
|---|---|---|
| 서버 및 포트 | node.example.com:443 | 서버의 수신 주소를 가리킵니다. 로컬 프록시 포트와는 다릅니다. |
| encryption | none | VLESS 프로토콜 계층의 암호화 설정을 나타냅니다. 이 예시에서는 TLS가 전송 보호를 별도로 제공합니다. |
| security 및 sni | tls、node.example.com | 전송 보안 방식과 TLS 서버 이름을 결정합니다. 서버 측 요구사항과 일치해야 합니다. |
| type 및 path | ws、%2Fgateway | WebSocket을 선택합니다. 경로를 디코딩하면 /gateway입니다. |
| host | node.example.com | 이 예시에서 WebSocket에 사용하는 Host입니다. 모든 배포 환경에서 서버 주소로 그대로 복사해서는 안 됩니다. |
서버, 포트, UUID만 복사하지 마세요. SNI, 전송 경로 또는 Host가 빠지면 노드 가져오기는 성공해도 핸드셰이크 단계에서 실패할 수 있습니다. REALITY 설정에는 공개 키와 짧은 ID 같은 매개변수도 포함됩니다. 원본 링크의 값을 그대로 보존하고 선택한 코어가 지원하는지 확인하세요. security 값만 바꾸면 변환이 완료되는 것은 아닙니다.
출처에 맞는 v2rayN 가져오기 메뉴 선택
먼저 원본 텍스트를 보관한 다음 가져오세요. 아래 메뉴명은 v2rayN 한국어 인터페이스에서 흔히 볼 수 있는 표현을 기준으로 합니다. 버전에 따라 명령이 상단 메뉴나 마우스 오른쪽 버튼 메뉴에 있을 수 있습니다. 메뉴 문구가 조금 다르면 ‘구독 그룹’, ‘클립보드에서 여러 URL 가져오기’, ‘사용자 지정 설정’이라는 용도를 기준으로 찾고 서로 다른 가져오기 메뉴를 혼용하지 마세요.
- 구독 주소 가져오기: 「구독 그룹」→「구독 그룹 설정」을 열고 그룹을 추가한 뒤 메모와 구독 주소를 입력하고 저장하세요. 이어서 「구독 그룹」에서 「현재 구독 업데이트(프록시 사용 안 함)」를 실행합니다. 이미 사용 가능한 프록시를 통해 구독 서버에 접속해야 한다면 「현재 구독 업데이트(프록시 사용)」를 선택하세요.
- 공유 링크 가져오기: 전체
vmess://또는vless://텍스트를 복사한 다음 「서버」→「클립보드에서 여러 URL 가져오기」를 여세요. 여러 개를 가져올 때는 한 줄에 하나씩 넣고 채팅 시간, 번호, 설명 문구는 섞지 마세요. - 전체 JSON 가져오기: 설정이 Xray용인지 V2Fly용인지 먼저 확인한 뒤 「서버」의 「사용자 지정 설정 서버 추가」에서 설정 파일을 선택하고 코어 유형을 확인하세요. 전체 JSON을 구독 주소 입력란에 붙여 넣지 마세요.
- 결과 확인: 먼저 목록에 표시된 노드 수를 확인한 다음 노드 편집 창에서 주소, 포트, 전송 및 보안 매개변수를 확인하세요. 노드 하나를 선택해 활성 서버로 설정하고 로그에 설정 파싱 오류나 핸드셰이크 오류가 있는지 살펴보세요.
공유 링크, Base64, JSON 간 변환의 한계
먼저 유지해야 할 정보가 무엇인지 정하세요. 노드 목록을 Base64로 바꾸는 것은 보통 텍스트 포장 방식만 바꾸는 일입니다. 전체 JSON을 단일 공유 링크로 바꾸는 것은 실행 구성을 노드 하나로 축소하는 작업입니다. 이 두 변환은 같은 것으로 볼 수 없습니다.
| 변환 방향 | 방법 | 손실될 수 있는 정보 |
|---|---|---|
| 공유 링크 → Base64 목록 | 전체 링크를 줄바꿈으로 이어 붙이고 UTF-8 텍스트를 Base64로 인코딩합니다. | 인코딩 자체로 필드가 손실되지는 않지만, 업데이트 가능한 구독 서비스를 자동으로 만들어 주지는 않습니다. |
| Base64 목록 → 공유 링크 | 외부 인코딩을 로컬에서 디코딩하고 각 줄의 프로토콜 접두사와 매개변수를 보존합니다. | 줄바꿈을 직접 편집하거나 텍스트를 자르고 문자를 바꾸면 링크가 손상될 수 있습니다. |
| 공유 링크 → 코어 JSON | 클라이언트에서 파싱한 뒤 로컬 인바운드, DNS, 라우팅을 반영해 실행 설정을 생성합니다. | 생성 결과는 클라이언트 설정에 따라 달라지며, 하나로 고정된 결과가 아닙니다. |
| 코어 JSON → 공유 링크 | 표현 가능한 단일 프록시 아웃바운드를 선택하고 해당 공유 형식에 맞게 변환합니다. | 수신 설정, DNS, 라우팅, 여러 아웃바운드 간 연결 관계는 대개 모두 보존할 수 없습니다. |
v2rayN에서 노드를 내보내 다른 곳으로 옮기기
서버 목록에서 원하는 노드를 선택하고 마우스 오른쪽 버튼 메뉴의 「서버 공유」에서 「공유 URL을 클립보드에 복사」를 선택하세요. 일부 버전에서는 공유 명령이 오른쪽 버튼 메뉴에 바로 표시됩니다. 여러 노드를 공유한 뒤 로컬 텍스트 편집기에서 줄 수를 확인하고 대상 기기로 가져오세요. 사용자 지정 설정 노드는 표준 공유 링크로 내보내지 못할 수 있습니다.
- 한 개를 확인한 뒤 일괄 처리하세요: 먼저 노드 하나를 내보내 테스트 그룹에 다시 가져온 다음 전송 유형, SNI, 경로, 메모를 비교하세요.
- 노드와 구독의 관계를 구분하세요: 공유 링크를 가져오면 보통 독립된 노드가 만들어지며 원래 구독 주소와 업데이트 일정은 함께 옮겨지지 않습니다.
- 프로토콜 접두사만 바꾸지 마세요:
vmess://를vless://로 바꿔도 프로토콜이 변환되지는 않습니다. 서버도 해당 프로토콜과 인증 설정을 제공해야 합니다.
아무 JSON이나 vmess://로 바꿀 수 없는 이유
둘 다 JSON을 사용한다고 해서 필드 구조까지 같은 것은 아닙니다. 아래는 Xray 설정의 아웃바운드 일부이며, 실행 가능한 전체 설정도 기존 VMess 공유 페이로드도 아닙니다. 이를 Base64로 인코딩하고 프로토콜 접두사를 붙이더라도 클라이언트가 올바른 공유 필드를 얻는 것은 아닙니다.
{
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "node.example.com",
"port": 443,
"users": [
{
"id": "b85a420b-f879-44e5-88eb-7ddc1d26908e",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "ws",
"security": "tls",
"tlsSettings": {
"serverName": "node.example.com"
},
"wsSettings": {
"path": "/gateway",
"headers": {
"Host": "node.example.com"
}
}
}
}
]
}
PC와 Android 간 이전: 원본은 재사용하고 기능은 각각 확인
여러 기기에서 사용하려면 서비스 제공자가 안내한 원본 구독 주소를 먼저 보관한 뒤 각 기기에 따로 가져오세요. v2rayN은 데스크톱 클라이언트입니다. Android용 v2rayNG는 Xray 코어를, v2flyNG는 V2Fly 코어를 사용합니다. 구독을 파싱할 수 있는지와 각 노드가 현재 코어에서 지원되는지는 별도로 확인해야 합니다.
이전 방법: 일반 노드와 사용자 지정 설정을 따로 처리
일반 구독 및 공유 노드
- 대상 기기에서 원본 구독 주소를 다시 추가합니다.
- 노드 몇 개만 옮길 때는 전체 공유 링크를 내보냅니다.
- 시스템 프록시, 앱별 프록시 또는 라우팅을 각각 설정합니다.
전체 JSON 및 사용자 지정 라우팅
- 대상 클라이언트가 지원하는 설정 가져오기 방법을 먼저 확인합니다.
- 코어 유형, 파일 경로, 수신 포트를 확인합니다.
- VLESS, REALITY 등의 기능을 사용한다면 코어 지원 여부를 항목별로 확인합니다.
구독 출처를 공유한다고 모든 설정까지 공유되는 것은 아닙니다. 기기별 수신 설정, DNS, 라우팅을 따로 확인해야 합니다.
전체 설정은 데스크톱의 절대 경로나 로컬 리소스를 참조할 수 있습니다. Android 기기로 옮길 때 해당 경로를 그대로 복사할 수는 없습니다. 양쪽에서 같은 코어를 사용하더라도 코어 버전과 설정 필드의 호환성을 확인하세요. 파일이 열린다는 사실만으로 실행까지 검증된 것은 아닙니다.
구독 형식 자주 묻는 질문과 문제 해결 순서
구독 업데이트가 성공했는데 목록이 비어 있는 이유는 무엇인가요?
먼저 해당 구독 그룹으로 전환하고 목록 필터를 해제한 다음 로그에서 유효한 노드 수를 확인하세요. 응답이 로그인 페이지, 빈 콘텐츠 또는 지원되지 않는 설정 형식이라면 다운로드에 성공해도 가져올 노드가 없을 수 있습니다. 서비스 제공자 메뉴에서 현재 클라이언트에 맞는 구독 주소를 다시 복사하세요.
긴 Base64 문자열을 받았는데 어디에 붙여 넣어야 하나요?
먼저 로컬에서 디코딩해 내용을 확인하세요. 한 줄에 하나씩 공유 링크가 나온다면 디코딩한 전체 목록을 복사해 「서버」→「클립보드에서 여러 URL 가져오기」를 사용하세요. 전체 JSON이 나온다면 해당 코어의 사용자 지정 설정으로 처리하고 프로토콜 접두사를 더 붙이지 마세요.
링크로 변환한 뒤 가져오기는 되는데 연결에 실패하는 이유는 무엇인가요?
원본 노드와 새 노드의 편집 창을 열고 보안 유형, SNI, Host, 경로 및 관련 프로토콜 매개변수를 하나씩 비교하세요. 특히 %2F가 %252F로 중복 인코딩되지 않았는지, 메신저가 & 뒤의 쿼리 매개변수를 잘라 내지 않았는지 확인하세요.
구독을 업데이트하면 직접 수정한 노드가 덮어써지나요?
같은 구독 그룹의 노드는 업데이트 과정에서 교체되거나 다시 생성될 수 있습니다. 수정한 상태를 오래 보관해야 한다면 공유 링크를 내보낸 뒤 별도의 수동 그룹으로 가져오고, 다음 업데이트 후 결과를 확인하세요. 구독 항목을 안정적인 로컬 설정 백업으로 여기지 마세요.
노드 목록을 Base64로 만들면 자동 업데이트되나요?
아니요. Base64는 텍스트 표현만 바꿉니다. 자동 업데이트를 하려면 클라이언트가 접근할 수 있는 구독 주소와 해당 주소에서 지속적으로 관리되는 호환 콘텐츠를 제공해야 합니다. 로컬에 인코딩된 텍스트만 있다면 정적 노드 목록으로 가져와야 하며, 서비스 제공자의 후속 변경이 반영될 것으로 기대할 수 없습니다.
마지막으로 “출처가 올바른가 → 반환 콘텐츠가 호환되는가 → 필드가 모두 있는가 → 코어가 지원하는가” 순서로 점검하세요. 먼저 형식 문제를 해결한 뒤 연결을 확인하세요. 원본 구독과 민감 정보를 가린 오류 기록을 보관하면 여러 변환 방식을 반복해서 시도하는 것보다 원인을 찾기 쉽습니다.