Android에서는 먼저 노드가 요구하는 코어를 확인한 다음 클라이언트 설정을 비교하세요. 구독에 VLESS, REALITY 또는 특정 XTLS Vision 설정이 포함되어 있다면 Xray 기반 v2rayNG를 우선 고려하세요. 기존 VMess 설정이 V2Fly 환경에서 생성된 경우에는 v2flyNG를 계속 사용할 수 있습니다. 이 글에서는 프로토콜 필드, 구독 가져오기, 라우팅 규칙 이전을 확인하는 방법을 안내합니다. 가져오기에 성공했다고 연결까지 된 것은 아닙니다.
코어와 클라이언트: 먼저 역할을 구분하세요
Project V는 관련 프록시 기술과 도구가 속한 생태계이며, V2Ray는 그 안의 주요 프로젝트입니다. V2Fly 커뮤니티는 v2ray-core를 이어서 유지 관리하고, Xray-core는 이 기술을 바탕으로 2020년에 분리된 코어 프로젝트입니다. 두 코어는 설정 관례를 공유하지만 이후 기능과 필드 해석, 릴리스 주기는 각기 발전했습니다. 이름만 바꾼 같은 프로그램으로 볼 수는 없습니다.
코어는 연결 프로토콜, 전송 방식, 보안 핸드셰이크, DNS, 라우팅을 처리합니다. 클라이언트는 구독 관리, 노드 편집, 서비스 시작, Android 네트워크 인터페이스 연동을 담당합니다. Android용 v2rayNG는 Xray 코어를, v2flyNG는 V2Fly 코어를 사용합니다. 클라이언트 화면에 옵션이 있다고 해서 모든 버전의 코어가 해당 옵션을 지원하는 것은 아닙니다. 반대로 코어가 기능을 지원하더라도 클라이언트 화면에 입력란이 없을 수 있습니다.
- 클라이언트 버전: 구독 파싱, 편집 화면, Android VPN 서비스 연동 방식을 결정합니다.
- 코어 버전: 설정 필드를 인식할 수 있는지, 실제로 어떤 핸드셰이크와 전송 구현을 사용하는지 결정합니다.
- 서버 설정: 클라이언트에 필요한 프로토콜, 보안 방식, 전송 매개변수, 인증 정보를 결정합니다.
- 구독 형식: 매개변수를 클라이언트로 온전히 전달할 수 있는지 결정합니다. 누락된 서버 정보까지 자동으로 채워 주지는 않습니다.
문제를 확인할 때는 앱 버전과 코어 버전을 따로 기록하세요. 먼저 앱의 ‘정보’ 화면을 확인한 다음 서비스 시작 로그에서 코어 버전을 확인합니다. 화면에 앱 버전만 표시된다면 이를 코어 버전으로 추정하지 마세요. 데스크톱용 v2rayN도 클라이언트와 코어가 분리되어 있습니다. 기기 간 비교 시 앱 이름이 아니라 현재 노드가 실제로 사용하는 코어를 확인해야 합니다.
프로토콜 호환성: VLESS, REALITY, 전송 방식을 각각 확인하세요
프로토콜 이름은 확인의 시작일 뿐입니다. 노드에는 전송 방식, 보안 계층, 추가 매개변수가 포함됩니다. 예를 들어 VMess에 WebSocket과 TLS를 조합하거나, VLESS에 REALITY와 지정된 flow를 조합할 수 있습니다. 연결하려면 클라이언트가 각 계층을 모두 이해해야 합니다. 아래 표는 선택을 돕기 위한 것으로, 특정 버전의 기능 확인을 대신하지 않습니다.
| 설정 요구 사항 | Xray / v2rayNG | V2Fly / v2flyNG | 확인할 항목 |
|---|---|---|---|
| VMess + WebSocket + TLS | 일반적인 지원 조합 | 일반적인 지원 조합 | UUID, 경로, Host, SNI, 보안 설정 |
| 기본 VLESS 연결 | 일반적인 지원 조합 | 프로토콜 이름만으로 사용 가능 여부를 단정하지 말고 코어와 클라이언트 구현을 확인하세요. | 전송 방식, 보안 계층, 사용 가능한 필드가 일치하는지 확인 |
| VLESS + REALITY | 우선 선택하고 코어 버전도 확인 | 그대로 대체할 수 있는 동등한 방법은 아닙니다. | serverName, 공개 키 매개변수, shortId, 지문 설정 |
| XTLS Vision | 서버 요구 사항에 맞게 flow를 입력 | flow 필드를 복사해도 동일한 지원을 확보할 수 없습니다. | xtls-rprx-vision을 명시적으로 요구하는지 확인 |
| 사용자 지정 JSON 설정 | Xray 설정 규격에 따라 확인 | V2Fly 설정 규격에 따라 확인 | 설정 형식, 필드 계층 구조, 아웃바운드 태그, 리소스 파일 |
VLESS와 REALITY는 같은 뜻이 아닙니다. VLESS는 프록시 프로토콜이고 REALITY는 연결에 사용하는 보안 방식입니다. Vision은 특정 데이터 흐름 처리와 관련됩니다. 보안 방식을 TLS로 바꾸거나 flow를 삭제하거나 REALITY 매개변수를 비우는 것은 ‘호환 모드로 전환’하는 것이 아니라 핸드셰이크 조건을 바꾸는 일입니다. 서버에 해당하는 연결 설정이 없다면 변경 후에도 연결되지 않습니다.
결론: 전체 매개변수 조합에 맞춰 코어를 선택하세요
노드가 REALITY 또는 xtls-rprx-vision을 요구한다면 v2rayNG를 우선 선택하고, 현재 코어가 해당 조합을 지원하는지 확인하세요. VMess처럼 두 코어가 공통으로 지원하는 기능만 사용한다면 구독 파싱과 기기 설정을 비교하면 됩니다. 이름만 바꾸려고 이전할 필요는 없습니다.
Android 코어 선택: 주력 앱과 대체 앱의 적합한 조건
새 설정을 시작한다면 대체로 v2rayNG를 먼저 고려하세요. 일반적인 VLESS·REALITY 설정이 Xray를 중심으로 구성되어 있어 해당 구독의 매개변수를 변환할 일이 줄어듭니다. 이는 호환성을 기준으로 한 권장이지, 모든 네트워크에서 속도가 더 빠르다는 뜻은 아닙니다. 지연 시간과 처리량은 서버 부하, 통신사 경로, 전송 방식, 기기 성능에도 영향을 받으므로 코어 이름만으로 성능 순위를 단정할 수 없습니다.
v2rayNG: Xray 기반
권장구독에 VLESS, REALITY 또는 Vision 요구 사항이 포함된 경우 사용하세요. 가져온 후에는 노드 이름만으로 프로토콜을 판단하지 말고 전송 방식, 보안 설정, flow를 확인하세요.
적합한 용도: Android 주력 클라이언트, Xray 기능을 명시적으로 요구하는 노드
v2flyNG: V2Fly 기반
기존 V2Fly 설정 절차를 사용하고 현재 연결이 안정적이며 프로토콜 매개변수가 지원되는 환경에 적합합니다. 기존 설정을 유지하려면 관리 출처와 서버 요구 사항을 확인할 수 있어야 합니다.
적합한 용도: 기존 V2Fly 설정 유지, 공통 프로토콜 호환성 확인
현재 v2flyNG의 VMess 노드가 정상 작동하고 새 프로토콜이 필요하지 않다면 그대로 사용해도 됩니다. 구독에 REALITY 노드가 추가되면 새 설정만 v2rayNG로 테스트하세요. 기존 앱이나 라우팅 규칙을 먼저 삭제할 필요는 없습니다. 두 앱에 각각 설정을 저장할 수 있지만 Android에서는 보통 한 번에 하나의 앱만 VPN 연결을 사용할 수 있습니다. 테스트할 때는 다른 앱의 연결을 먼저 중지하세요.
구독 이전: 목록에 표시되어도 설정이 완전한 것은 아닙니다
구독 링크는 설정을 가져오는 경로이지, 코어 간 호환성을 보장하지 않습니다. 응답에는 단일 노드 공유 링크, 인코딩된 링크 모음, 특정 형식의 설정 파일이 포함될 수 있습니다. 파서가 이름과 서버 주소를 읽더라도 새로운 보안 매개변수를 놓칠 수 있습니다. 따라서 ‘노드 목록이 표시되는 것’과 ‘코어가 핸드셰이크에 성공하는 것’을 따로 확인해야 합니다.
- 기존 설정 보관: 현재 프로토콜, 전송 방식, 보안 방식, DNS, 앱별 라우팅 규칙을 기록하세요. 구독 주소에 접근 토큰이 포함될 수 있으므로 공개 스크린샷이나 로그에 넣지 마세요.
- 구독 그룹 추가: v2rayNG의 ‘구독 그룹 설정’에서 항목을 추가하고 기존 구독 주소를 입력해 저장한 다음, 메인 화면에서 ‘구독 업데이트’를 실행하세요. 버전에 따라 메뉴 위치가 다를 수 있으므로 같은 이름의 기능을 찾으면 됩니다.
- 노드 편집 화면 열기: 주소, 포트, UUID, 전송 유형, 보안 설정을 하나씩 확인하세요. WebSocket은 경로와 Host를, TLS는 SNI를 확인해야 합니다. REALITY를 사용한다면 공개 키 관련 매개변수와 shortId도 확인하세요.
- flow 확인: 서버가 Vision을 명시적으로 요구한다면 클라이언트에
xtls-rprx-vision이 남아 있는지 확인하세요. 안내 메시지를 없애려고 해당 필드를 임의로 비우지 마세요. - 실행 후 로그 확인: 먼저 설정을 불러올 수 있는지 확인하고 핸드셰이크가 완료되는지 살펴본 다음, 실제 웹페이지와 프록시가 필요한 앱을 테스트하세요. 매번 한 필드씩만 수정해 DNS, 라우팅, 프로토콜을 동시에 바꾸지 않도록 합니다.
포트와 인증: 구체적인 필드로 오류를 찾으세요
로컬 프록시 포트, 서버 수신 포트, 프로토콜 인증 매개변수는 서로 다른 계층에 속합니다. 아래에서는 예시 포트 두 개와 VMess 매개변수 하나를 구분해 설명합니다. 포트는 예시일 뿐 모든 설치 환경의 기본값이 아닙니다. 실제 설정은 클라이언트 설정과 서버에서 제공한 정보를 따라야 합니다.
로컬 SOCKS 주소가 127.0.0.1:10808이라고 가정해 보겠습니다. 이 주소는 기기의 앱이 연결할 때만 사용하며 원격 노드의 ‘서버 포트’에 입력하면 안 됩니다. 마찬가지로 서버가 443 포트를 사용한다고 해서 반드시 TLS라는 뜻은 아닙니다. 포트 번호는 수신 위치일 뿐이며 실제 보안 방식은 설정으로 결정됩니다. Android VPN 모드에서는 일반적으로 앱마다 이 SOCKS 주소를 입력할 필요가 없습니다.
VMess AEAD 설정에서는 일반적으로 alterId=0을 사용합니다. 오래된 가이드에 나온 0이 아닌 값을 그대로 적용하지 말고, 서버가 제공하는 최신 설정을 가져오세요. 이 값은 VMess에만 해당하며 VLESS에 ‘호환 매개변수’로 추가할 수 없습니다.
- 알 수 없는 필드 또는 설정 파싱 오류: 먼저 설정 형식과 코어 버전을 확인하세요. 아직 네트워크 연결을 점검할 단계가 아닙니다.
- 연결 거부 또는 시간 초과: 먼저 서버 주소, 수신 포트, 네트워크 경로를 확인하세요. 곧바로 인증서 문제라고 단정하지 마세요.
- 인증서 검증 실패: 시스템 시간, SNI, 인증서가 서로 일치하는지 확인하고 인증서 검증은 유지하세요.
- 연결은 됐지만 일부 앱이 작동하지 않음: 인증 정보를 바꾸기 전에 앱별 프록시, DNS, 라우팅 규칙을 확인하세요.
라우팅과 기기 간 이전: 설정을 재사용할 수 있는 범위
두 코어 모두 도메인이나 IP 등의 조건으로 라우팅할 수 있지만, 이름이 같은 규칙이라고 설정 파일 전체를 그대로 옮길 수 있는 것은 아닙니다. 규칙에서 참조하는 아웃바운드 태그가 존재해야 하고 도메인·IP 데이터 리소스를 읽을 수 있어야 합니다. DNS 확인 정책도 최종 규칙 적용에 영향을 줍니다. 이전할 때는 최소 설정으로 노드 연결을 먼저 확인한 다음 라우팅 규칙을 복원하세요. 모든 규칙을 한꺼번에 가져오는 것보다 문제를 찾기 쉽습니다.
이전 순서: 노드 설정부터 맞춘 뒤 로컬 규칙 복원
데스크톱: v2rayN
- 현재 노드의 프로토콜, 전송 방식, 코어를 기록합니다.
- 시스템 프록시 또는 TUN이 실제로 처리하는 범위를 확인합니다.
- 사용자 지정 DNS와 라우팅 설정을 따로 저장합니다.
Android: v2rayNG 또는 v2flyNG
- 같은 구독을 가져온 뒤 보안 및 전송 필드를 다시 확인합니다.
- ‘설정’ → ‘앱별 프록시’에서 적용할 앱을 확인합니다.
- 최소 규칙으로 먼저 테스트한 뒤 도메인·IP 라우팅을 복원합니다.
같은 구독에서 동일한 노드 정보를 받을 수는 있지만 시스템 프록시, VPN 권한, 앱별 목록, 모든 로컬 라우팅 설정까지 자동으로 동기화되지는 않습니다.
앱별 프록시는 특히 다시 확인해야 합니다. ‘선택한 앱만 프록시 사용’과 ‘선택한 앱은 프록시 우회’는 적용 결과가 정반대입니다. 새 클라이언트가 연결됐는데 브라우저 트래픽이 예상한 경로를 따르지 않는다면 먼저 목록 적용 모드와 브라우저 선택 여부를 확인한 다음 도메인 규칙을 살펴보세요. 테스트 중에는 기존 클라이언트의 VPN 서비스를 중지해야 현재 시스템 연결 상태를 새 코어의 동작으로 오해하지 않습니다.
결론: 새 프로토콜이 필요 없다면 이름만 바꾸려고 코어를 교체할 필요는 없습니다
기존 V2Fly 설정이 안정적이라면 그대로 사용하세요. REALITY나 Vision이 필요하면 v2rayNG로 전환하면 됩니다. 매개변수가 빠짐없이 설정되고 핸드셰이크가 성공하며 대상 앱과 라우팅이 기대한 대로 동작하는지가 이전 완료의 기준입니다. 구독 목록 표시만으로 완료를 판단하지 마세요.