구독 주소는 서버에서 목록을 가져오고 업데이트하는 데 쓰이며, Base64는 데이터를 인코딩하고 공유 링크는 단일 노드를 설명합니다. 전체 JSON은 코어의 실행 설정을 담습니다. 복사한 내용을 가져올 수 없거나 기기 간 이전을 준비 중이라면, 먼저 형식을 확인한 뒤 올바른 가져오기 메뉴를 선택하세요. 변환 과정에서 누락되기 쉬운 전송 방식, TLS, 라우팅, DNS 설정도 확인해야 합니다.
먼저 구독 주소, 응답 본문, 노드 링크를 구분하세요
‘V2Ray 구독’이라는 단일 파일 확장자가 있는 것은 아닙니다. 일반적인 구독 주소는 토큰이 포함된 HTTPS URL이며, 클라이언트가 해당 주소에 요청을 보내야 노드 목록을 받아옵니다. 응답 본문은 공유 링크가 줄마다 나열된 형식일 수도 있고, 링크 전체를 Base64로 인코딩한 텍스트일 수도 있습니다. 주소는 데이터를 가져오는 경로이고, 실제로 파싱할 데이터는 응답 본문입니다. 둘을 혼동해 입력하지 마세요.
| 형식 | 식별 방법 | 일반적인 내용 | 가져오기 위치 |
|---|---|---|---|
| 구독 주소 | 액세스 토큰이 포함될 수 있는 HTTPS 주소 | 원격 업데이트 경로 | 구독 그룹 설정 |
| Base64 구독 본문 | 디코딩하면 여러 줄의 프로토콜 링크가 나오는 인코딩 텍스트 | 여러 노드의 연결 정보 | 구독 파싱 과정에서 처리하며, 직접 다룰 때는 먼저 디코딩 |
| 공유 링크 | vmess://、vless://、trojan:// | 단일 노드와 일부 연결 설정 | 클립보드에서 가져오기 |
| 전체 코어 JSON | inbounds, outbounds 등의 필드 포함 | 인바운드, 아웃바운드, 선택적 라우팅 및 DNS | 사용자 지정 설정 가져오기 |
‘중괄호로 시작한다’는 이유만으로 전체 설정이라고 판단하지 마세요. VMess 공유 링크는 디코딩하면 JSON이 되는 경우가 있지만, 보통 add, port, id, net 같은 노드 필드만 포함하며 코어 전체 설정의 계층 구조는 갖추지 않습니다. 구독 API가 관리 플랫폼 자체의 JSON을 반환하는 경우도 있는데, 이를 Xray에 그대로 전달해 실행할 수는 없습니다.
세 가지 형식 중 무엇을 선택할까: 업데이트는 구독, 단일 노드는 링크
구독 주소 및 노드 목록
권장서비스 제공자가 노드 주소를 관리하는 환경에서 일상적으로 사용하기 좋습니다. 클라이언트에 구독 주소를 저장해 두면 노드 목록을 다시 가져올 수 있습니다. Base64는 흔히 쓰이는 응답 인코딩 형식일 뿐, 지원 프로토콜을 결정하지 않습니다.
적합한 경우: 여러 기기에서 사용하거나 노드 주소가 바뀔 수 있어 계속 업데이트해야 할 때
단일 공유 링크
복사, QR 코드 스캔, 임시 이전이 간편합니다. 가져온 노드는 대개 로컬에 저장되므로 원래 제공자가 설정을 바꿔도 자동으로 동기화되지 않습니다.
적합한 경우: 특정 노드 점검, 임시 이전, 설정을 하나씩 대조할 때
전체 JSON 설정
로컬 수신 포트, 아웃바운드 선택, 규칙을 명시할 수 있지만 대상 코어와 버전에 따라 호환성이 달라집니다. 실행 설정이지 여러 클라이언트에서 공통으로 쓸 수 있는 백업 형식은 아닙니다.
적합한 경우: 사용자 지정 인바운드, 복잡한 라우팅, 특정 코어 설정을 보존해야 할 때
요점: 지속적인 업데이트가 필요한지 먼저 확인하세요
서비스 제공자의 업데이트를 계속 받으려면 양쪽 기기에 구독 주소를 각각 저장하세요. 노드 하나만 옮기려는 경우에만 공유 링크를 내보내면 됩니다. 한 번 내보낸 노드 목록은 자동 업데이트되는 구독이 아닙니다.
Base64는 기밀성을 제공하지 않습니다. 구독 주소의 토큰이나 공유 링크에 포함된 UUID·비밀번호는 모두 인증 정보로 취급해야 합니다. 스크린샷, 로그, 클립보드 동기화 과정에서 노출될 수 있으니 주의하세요. 문제 해결 시에는 필드 이름만 남기고 실제 인증 정보는 온라인 변환 사이트에 입력하지 마세요.
Base64와 공유 링크: 디코딩한 다음 필드까지 확인하세요
일반적인 Base64 구독은 여러 공유 링크를 줄바꿈으로 연결한 뒤 전체 텍스트를 인코딩합니다. 이는 vmess:// 뒤에 적용된 Base64 인코딩과 다른 단계입니다. 전자는 노드 목록 전체를 감싸고, 후자는 흔히 쓰이는 VMess 공유 형식에서 단일 노드의 JSON을 감쌉니다. 바깥쪽 인코딩을 풀고 나면 먼저 접두사를 확인하세요. 전체 내용을 반복해서 디코딩하지 마세요.
- 복사 과정에서 섞인 앞뒤 공백을 제거하고 원본 텍스트를 따로 백업하세요.
- 처음부터 프로토콜 접두사가 보이면 링크로 파싱하고, 전체 내용을 다시 디코딩하지 마세요.
- 인코딩된 본문이라면 한 번 디코딩한 뒤 여러 줄의 프로토콜 링크가 나오는지 확인하세요.
- 디코딩 결과가 HTML 로그인 페이지나 오류 메시지라면 인코딩을 계속 ‘수정’하지 말고 구독을 가져오는 단계부터 확인하세요.
아래는 예약된 예시 도메인을 사용한 VLESS 링크입니다. 필드 설명용이며 실제로 연결할 수 있는 노드가 아닙니다. 포트는 443, 전송 방식은 TCP, 보안 계층은 TLS이고, 조각 부분은 표시용 메모입니다.
vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=example.net#format-demo
encryption=none은 VLESS 프로토콜 관련 설정이며 TLS를 끈다는 뜻이 아닙니다. 보안 계층은 security=tls로 지정합니다. 실제 노드가 WebSocket을 사용한다면 type=ws, 경로, Host도 보존해야 합니다. REALITY를 사용하는 경우에는 공개 키, 짧은 ID, 서버 이름, 지문 등의 설정을 확인하세요. 각 설정을 인식하는지는 클라이언트 가져오기 기능과 선택한 코어에 따라 달라집니다.
v2rayN과 v2rayNG에서 가져오기·내보내기
버전에 따라 메뉴 이름이 조금씩 다를 수 있으므로, 아래에서는 일반적인 메뉴 경로를 기준으로 설명합니다. 작업을 시작하기 전에 받은 항목이 구독 주소인지, 공유 링크인지, 전체 설정 파일인지 확인하세요. 원격 주소를 일반 서버 목록에 잘못 가져오는 일을 방지할 수 있습니다. 데스크톱에서는 현재 선택된 코어도 확인해야 합니다. Android용 v2rayNG는 Xray 코어를 사용하지만, 그렇다고 모든 형식을 자동으로 변환할 수 있는 것은 아닙니다.
작업 방법: 데이터 형식에 맞는 메뉴 선택
데스크톱: v2rayN
- 구독 주소: 「구독 그룹」→「구독 그룹 설정」을 열고 그룹을 추가한 뒤 주소를 입력하세요. 저장하고 「현재 구독 업데이트」를 실행하면 됩니다.
- 공유 링크: 링크 전체를 복사한 다음 메인 창에서 「클립보드에서 URL 일괄 가져오기」를 사용하세요. 일반적인 단축키는 Ctrl+V입니다.
- 노드 내보내기: 일반 노드를 선택하고 마우스 오른쪽 버튼 메뉴에서 공유 또는 URL을 클립보드로 내보내는 항목을 선택한 뒤, 출력된 접두사를 확인하세요.
- 전체 JSON: 사용자 지정 설정 서버 추가 메뉴에서 파일을 선택하세요. 파일 내용을 구독 주소 입력란에 붙여 넣지 마세요.
Android: v2rayNG
- 구독 주소: 메뉴에서 「구독 그룹 설정」을 열고 그룹을 추가해 주소를 저장하세요. 메인 화면으로 돌아와 「구독 업데이트」를 실행합니다.
- 공유 링크: 오른쪽 위의 「+」→「클립보드에서 가져오기」를 누르세요. QR 코드는 해당 스캔 메뉴에서 가져오면 됩니다.
- 노드 내보내기: 노드 항목의 공유 메뉴에서 클립보드 복사나 QR 코드 표시를 선택하세요. 일부 버전에서는 항목을 먼저 길게 눌러야 합니다.
- 전체 JSON: 「+」 메뉴에서 설정 파일 가져오기 항목을 선택하세요. 사용자 지정 설정 항목은 일반 노드와 공유 기능이 다를 수 있습니다.
두 클라이언트에서 같은 구독 주소를 사용할 수 있지만, 노드 사용 가능 여부는 각 클라이언트의 파서, 코어 버전, 네트워크 환경에 따라 달라집니다.
가져온 뒤 먼저 노드 하나를 편집해 주소, 포트, UUID 또는 비밀번호를 확인한 다음 전송 및 TLS 설정을 점검하세요. 노드를 선택하고 서비스를 시작한 뒤 연결 테스트와 코어 로그를 확인합니다. 가져오기 도구에 노드 이름이 표시되더라도 텍스트가 인식되었다는 뜻일 뿐, 원격 인증·인증서·전송 설정이 모두 올바르다는 의미는 아닙니다.
- 구독 연결 유지: 노드를 수동으로 복사하면 원래 구독 그룹의 업데이트 연결이 보존되지 않는 경우가 많습니다.
- 중복 가져오기 방지: 새 그룹에서 먼저 확인한 뒤 기존 항목을 정리하세요. 이름이 같은 항목이 여러 개 생겨 혼동할 수 있습니다.
- 로컬 설정은 별도 저장: 시스템 프록시, TUN, 앱별 프록시, 사용자 지정 라우팅은 노드 링크 하나만으로 옮길 수 없습니다.
전체 JSON을 링크 하나로 바꿀 수 없는 이유
공유 링크는 주로 ‘특정 아웃바운드에 연결하는 방법’을 나타냅니다. 전체 설정은 ‘로컬에서 어떤 트래픽을 받고, 도메인을 어떻게 해석하며, 어떤 아웃바운드로 보낼지’까지 설명합니다. JSON 파일에는 여러 아웃바운드와 도메인별 분기 규칙이 들어갈 수 있으므로, 모든 내용을 담을 수 있는 단일 링크는 없습니다. JSON을 Base64로 인코딩한 뒤 vmess:// 접두사를 붙여도 올바른 VMess 공유 링크가 되지 않습니다.
아래는 Xray 형식의 학습용 설정입니다. 로컬 127.0.0.1:10808에서 SOCKS 포트를 수신합니다. 예시 도메인과 UUID를 사용하므로 실제 연결에는 사용할 수 없습니다. 노드 링크에 없는 설정 계층을 보여주기 위한 예제이며, V2Ray나 다른 코어에서 통용되는 설정 템플릿으로 사용해서는 안 됩니다.
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"tag": "local-socks",
"listen": "127.0.0.1",
"port": 10808,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
}
],
"outbounds": [
{
"tag": "proxy",
"protocol": "vless",
"settings": {
"vnext": [
{
"address": "example.net",
"port": 443,
"users": [
{
"id": "c2a183e4-5f61-4b8b-91ea-7a820ae42f61",
"encryption": "none"
}
]
}
]
},
"streamSettings": {
"network": "tcp",
"security": "tls",
"tlsSettings": {
"serverName": "example.net"
}
}
},
{
"tag": "direct",
"protocol": "freedom"
}
],
"routing": {
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "direct"
}
]
}
}
이 예시의 원격 연결 필드는 앞에서 본 VLESS 링크에 대응하지만, 로컬 SOCKS 포트와 사설 주소 직접 연결 규칙은 링크에 포함되지 않습니다. 예시에 사용된 geoip:private는 실행 환경에 해당 규칙 데이터가 있어야 사용할 수 있습니다. 전체 설정을 옮길 때는 코어 문법, 필요한 데이터 파일, 포트 사용 여부를 함께 확인하세요.
| 변환 방향 | 일반적으로 보존되는 항목 | 별도 처리가 필요한 항목 |
|---|---|---|
| 링크 목록 → Base64 본문 | 원본 링크 텍스트와 배열 순서 | 인코딩만으로 구독 업데이트 주소가 생기지는 않음 |
| 공유 링크 → 클라이언트 노드 | 가져오기 도구가 지원하는 프로토콜 및 연결 필드 | 알 수 없는 매개변수는 무시될 수 있음 |
| 클라이언트 노드 → 공유 링크 | 대상 링크 형식으로 표현할 수 있는 설정 | 로컬 라우팅, DNS, TUN 설정 |
| 전체 JSON → 공유 링크 | 인식 가능한 특정 아웃바운드 설정 | 그 밖의 아웃바운드·인바운드·규칙 및 코어 확장 필드 |
변환이 실패하면 형식만 반복해서 바꾸지 말고 증상에 맞춰 확인하세요
구독 주소를 복사했는데 유효한 설정이 없다고 나오는 이유는 무엇인가요?
먼저 「클립보드에서 가져오기」를 잘못 사용하지 않았는지 확인하세요. HTTPS 구독 주소는 「구독 그룹 설정」의 주소 입력란에 붙여 넣고 저장한 뒤 업데이트해야 합니다. 그래도 실패하면 로그인 페이지나 토큰 만료 메시지가 반환되는지, 네트워크 시간 초과가 발생하는지 확인하세요. 웹페이지 본문을 노드 목록으로 취급하면 안 됩니다.
Base64를 디코딩했는데도 인코딩된 문자열이 남아 있는 이유는 무엇인가요?
먼저 접두사를 확인하세요. 디코딩 결과가 vmess://로 시작한다면 뒤에 남은 인코딩 부분은 단일 노드 JSON일 수 있으며 정상적인 구조입니다. 결과가 vless://라면 URI 매개변수로 파싱하세요. 여러 링크가 들어 있는 텍스트 전체를 무작정 다시 디코딩하지 마세요.
가져오기는 성공했지만 연결되지 않습니다. 변환 도구에서 무엇을 놓쳤을까요?
원본과 비교해 원격 포트, TLS 서버 이름, WebSocket 경로와 Host, REALITY 설정을 확인하세요. 서비스를 중지했다가 다시 시작한 뒤 새 로그를 확인합니다. 로컬 포트가 이미 사용 중이라는 메시지가 나오면 설정의 10808 등 실제 수신 포트를 살펴보세요. 이 문제 때문에 원격 포트 443을 바꾸면 안 됩니다.
기기를 바꾼 뒤 노드는 보이는데 우회 규칙이 사라진 이유는 무엇인가요?
노드 공유는 앱 전체 설정을 동기화하지 않습니다. 원래 기기에서 라우팅, DNS, 시스템 프록시, 앱별 프록시 설정을 각각 기록한 뒤 새 기기에서 복원하세요. 전체 JSON을 옮긴다면 대상 기기에서 같은 종류의 코어와 호환 버전을 사용하는지도 확인해야 합니다. 파일 확장자만 같다고 호환되는 것은 아닙니다.
마지막으로 일부만 먼저 검증하세요. 노드 하나를 옮겨 설정 필드가 일치하는지, 서비스가 시작되는지, 대상 서버에 연결되는지 확인한 다음 나머지를 일괄 처리합니다. 구독 업데이트가 기존 항목을 덮어쓸 수 있으므로 수동으로 수정한 노드는 먼저 백업하세요. 변환 결과의 원본 파일도 보관해 알 수 없는 필드가 누락된 경우 되돌릴 수 있도록 합니다. 라우팅과 DNS 설정을 더 알아보려면 사이트의 고급 설정을 참고하세요.