Xray 코어와 V2Fly 코어 선택 가이드: 버전 차이·프로토콜 지원·클라이언트 비교
Xray와 V2Fly의 REALITY 등 프로토콜 지원과 업데이트 차이를 비교하고, v2rayNG·v2flyNG의 내장 코어와 노드별 선택 기준을 안내합니다.
먼저 코어와 클라이언트 구분하기
Xray와 V2Fly 중 하나를 선택할 때 첫 단계는 인터페이스를 비교하는 것이 아니라 ‘코어’와 ‘클라이언트’를 나누어 보는 것입니다. 코어는 프로토콜 핸드셰이크, 전송, 암호화, DNS, 라우팅 규칙 매칭, 인바운드·아웃바운드 연결을 담당합니다. 클라이언트는 구독 관리, QR 코드 가져오기, 노드 목록, 시스템 프록시 전환, 로그 표시를 담당합니다. 사용자가 평소 조작하는 것은 클라이언트 화면이지만, VMess·VLESS·REALITY 등의 설정을 실제로 해석하는 것은 하위 코어입니다.
이 구분은 흔히 발생하는 한 가지 현상을 설명해 줍니다. 같은 공유 링크가 어떤 클라이언트에서는 인식되어 노드 목록에 표시되더라도 연결까지 성공한다고 보장할 수는 없습니다. 가져오기 단계에서는 링크 필드만 해석하면 되지만, 연결 단계에서는 해당 프로토콜과 전송 조합을 코어가 구현해야 합니다. 반대로 코어에 특정 기능이 있더라도 클라이언트가 관련 필드를 실행 설정에 빠짐없이 기록해야 정상적으로 사용할 수 있습니다.
따라서 ‘어느 클라이언트가 더 편해 보이는가’와 ‘어느 코어가 현재 노드를 실행할 수 있는가’는 서로 다른 선택 문제입니다. 인터페이스 선호도는 나중에 고려하고, 프로토콜 호환성부터 확인해야 합니다. 특히 security=reality, flow=xtls-rprx-vision 또는 특정 전송 매개변수가 포함된 VLESS 노드에서는 코어의 지원 여부가 결과를 바로 좌우합니다.
Xray와 V2Fly: 같은 뿌리에서 갈라진 두 구현 경로
V2Fly는 Project V 계열의 범용 프록시 및 라우팅 기능을 이어받았으며, 설정 구조도 인바운드·아웃바운드·DNS·라우팅·정책 모듈을 중심으로 구성됩니다. V2Ray 설정에 익숙한 사용자는 V2Fly의 JSON 구조도 대체로 빠르게 이해할 수 있습니다. 예를 들어 inbounds는 로컬 접속 방식을 정의하고, outbounds는 원격 연결을 정의하며, routing.rules는 트래픽의 경로를 결정합니다.
Xray는 유사한 기술 기반에서 독립적인 코어 계열로 발전했으며 VLESS, XTLS Vision, REALITY 등의 기능을 계속 확장해 왔습니다. 두 프로젝트에는 비슷한 개념이 많지만 단순히 ‘같은 프로그램의 다른 버전’으로 볼 수는 없습니다. 프로토콜 필드, 전송 구현, 설정 기능이 각각 발전하면서 같은 이름의 필드라도 지원 범위, 기본 동작, 조합 제한이 달라질 수 있습니다.
실제 선택에서는 이름을 기준으로 ‘누가 누구를 대체하는가’를 따질 필요가 없습니다. 더 효과적인 방법은 노드 요구 사항을 확인하는 것입니다. 서버가 어떤 프로토콜을 제공하는지, 공유 링크에 어떤 매개변수가 포함되어 있는지, 클라이언트 코어가 해당 조합을 구현하는지를 살펴보세요. 서버와 로컬 코어의 프로토콜 스택이 맞아야 연결을 수립할 수 있습니다. 코어가 최신이라고 해서 오래된 설정까지 자동으로 더 잘 작동하는 것은 아니므로, 안정적으로 실행 중인 VMess 노드를 이름만 바뀌었다는 이유로 자주 이전할 필요는 없습니다.
프로토콜 지원 차이: REALITY가 가장 뚜렷한 기준
두 코어 계열 모두 일반적인 프록시·라우팅·DNS 환경을 처리할 수 있지만, 새로운 프로토콜과 보안 계층 확장에서는 분명한 차이가 있습니다. 가장 쉽게 확인할 수 있는 예가 REALITY입니다. REALITY는 Xray 계열의 보안 전송 기능으로, VLESS 및 Vision 플로우 컨트롤과 함께 사용되는 경우가 많습니다. 노드 정보에 REALITY 매개변수가 명시되어 있다면 Xray 코어와 해당 설정을 정확히 생성할 수 있는 클라이언트를 선택해야 합니다.
REALITY 설정에는 보통 단순한 스위치 하나만 있는 것이 아니라 서버 이름, 공개 키, 짧은 ID, 핑거프린트, 플로우 컨트롤 등의 필드가 포함될 수 있습니다. 서버 주소·포트·사용자 ID만 복사해서는 노드를 완전히 복원할 수 없습니다. 구독 변환이나 수동 편집 과정에서 핵심 필드 하나라도 빠지면 ‘노드는 가져왔지만 연결 실패’, ‘핸드셰이크가 즉시 종료됨’, ‘보안 계층 매개변수가 불완전함’과 같은 문제가 발생할 수 있습니다.
VMess는 두 경로에서 공통으로 지원되는 대표적인 프로토콜입니다. 표준 VMess 노드에서는 코어 이름 자체보다 전송 방식, TLS 매개변수, 서버의 실제 설정을 확인하는 것이 더 중요합니다. 같은 VMess 노드가 코어에 따라 다르게 작동한다면 먼저 WebSocket·gRPC·TCP 등의 전송 설정과 경로, 호스트 이름, TLS 서버 이름, 시스템 시간을 점검해야 합니다. 문제를 곧바로 프로토콜 자체의 탓으로 돌려서는 안 됩니다.
VLESS는 더 신중하게 판단해야 합니다. 공유 링크가 vless://로 시작한다는 것은 기본 프로토콜 유형만 알려 줄 뿐, 전체 기능을 설명하지는 않습니다. security, flow, type 등의 매개변수도 계속 확인해야 합니다. 특히 보안 계층이 REALITY이거나 플로우 컨트롤이 Vision으로 지정되어 있다면 Xray 노드로 처리해야 합니다. 서버와 클라이언트가 해당 조합을 동일하게 지원해야 하며, ‘VLESS 링크를 해석할 수 있다’고 해서 ‘모든 VLESS 조합을 실행할 수 있다’고 볼 수는 없습니다.
| 노드 특징 | 우선 선택 | 확인할 핵심 사항 |
|---|---|---|
| 일반 VMess 노드 | Xray 또는 V2Fly | 전송 방식·TLS·경로·서버 설정 확인 |
| VLESS + REALITY | Xray | 공개 키·짧은 ID·서버 이름·핑거프린트·플로우 컨트롤 |
| VLESS + Vision | Xray | flow가 서버 설정과 일치하는지 확인 |
| 구독에 프로토콜 세부 정보가 표시되지 않음 | 먼저 노드 필드 확인 | 노드 이름이나 구독 그룹명만 기준으로 판단하지 않기 |
버전 차이와 업데이트 주기: 호환성은 구체적인 버전으로 판단
Xray와 V2Fly는 각각 별도로 버전을 관리하므로 출시 시점과 기능 우선순위가 일치하지 않습니다. 한 코어에 새 필드가 추가되었다고 해서 다른 코어 계열이 같은 시기에 동일한 구현을 제공한다는 뜻은 아닙니다. 클라이언트 버전과 코어 버전도 같지 않습니다. 클라이언트가 인터페이스·구독 로직·권한 처리를 업데이트하는 동안 내장 코어 버전은 그대로일 수 있고, 반대로 코어만 업그레이드되어 인터페이스 변화가 거의 없을 수도 있습니다.
문제를 해결할 때는 클라이언트 버전과 코어 버전을 따로 기록해야 합니다. 자동 업데이트 경로, 설치 패키지 출시 시점, 로컬 파일 교체 여부가 다를 수 있으므로 ‘이미 최신 버전입니다’라는 말만으로는 정보가 부족합니다. 로그 시작 부분에는 대개 코어 이름과 버전이 표시되며, 연결 장애를 판단할 때는 인터페이스 버전보다 이 정보가 더 유용합니다.
업데이트 주기가 빠른 코어는 새 프로토콜 필드를 더 일찍 지원하는 대신 설정 제약을 조정하거나 오래된 문법을 폐기하고, 경계 사례의 동작을 수정할 수도 있습니다. 반면 업데이트가 안정적인 환경에서는 기존 설정을 계속 사용할 수 있는지가 더 중요합니다. 운영 환경이나 장기간 실행하는 환경에서는 현재 작동하는 설정을 보관하고, 구독 필드와 라우팅 규칙의 호환성을 확인한 뒤 업데이트하는 것이 좋습니다. 업그레이드 후 문제가 생기면 업데이트 전후의 코어 버전, 설정 출력, 로그를 비교해야 하며 관련 없는 옵션을 여러 개 연달아 바꾸어서는 안 됩니다.
버전을 비교할 때는 서버도 함께 확인해야 합니다. 클라이언트 코어가 특정 기능을 지원한다는 것은 로컬에서 구현할 수 있다는 뜻일 뿐입니다. 서버 버전, 서버 프로토콜 설정, 중간 네트워크 환경도 서로 맞아야 합니다. 프로토콜 이름이 같아도 매개변수 조합이 다르면 연결되지 않을 수 있습니다. 가장 신뢰할 수 있는 기준은 노드 제공자가 안내한 전체 매개변수와 호환 정보이며, 포트 번호나 노드 메모만 보고 추측해서는 안 됩니다.
v2rayN·v2rayNG·v2flyNG의 코어 대응
데스크톱: v2rayN
v2rayN은 데스크톱용 그래픽 관리 도구로, 공유 링크 가져오기, 구독 관리, 지연 시간 테스트, 시스템 프록시 전환, 실행 로그 확인 등에 사용됩니다. v2rayN을 선택할 때도 실제로 활성화된 코어와 노드 설정을 확인해야 합니다. VLESS·REALITY·Vision 등 Xray 기능을 사용하려면 실행 경로가 해당 필드를 지원하는 Xray 코어를 사용하는지 확인하세요.
데스크톱 환경에서는 로그와 설정을 확인하기가 편리합니다. 노드 연결에 실패하면 먼저 코어가 정상적으로 시작되었는지 확인한 뒤 DNS 실패, 연결 시간 초과, TLS 또는 REALITY 핸드셰이크 실패, 라우팅 오분류 등을 구분해야 합니다. 같은 구독을 반복해서 삭제하고 다시 가져오지 마세요. 구독 내용이 바뀌지 않았다면 반복 가져오기로 누락된 매개변수가 보완되지 않습니다.
안드로이드: v2rayNG
v2rayNG는 Xray 코어를 탑재하여 Xray 프로토콜 기능이 필요한 안드로이드 환경에 적합합니다. 구독에 VLESS·REALITY·Vision 노드가 포함되어 있다면 일반적으로 v2rayNG를 우선 고려합니다. 가져온 뒤에도 앱 버전과 코어 버전이 충분히 최신인지 확인하고, 공유 링크의 핵심 필드가 빠짐없이 보존되었는지 점검해야 합니다.
노드에는 연결되지만 앱 트래픽이 예상대로 프록시를 통과하지 않는다면 프로토콜 문제와 라우팅 문제를 나누어 확인해야 합니다. 프로토콜 핸드셰이크가 성공했다는 것은 원격 채널이 수립되었다는 뜻일 뿐입니다. 앱별 프록시, 로컬 네트워크 우회, DNS 정책, 라우팅 규칙에 따라 실제 트래픽의 경로가 달라집니다.
안드로이드: v2flyNG
v2flyNG는 V2Fly 코어를 탑재하여 V2Fly 계열과 호환되는 설정을 사용하는 안드로이드 환경에 적합합니다. 기존 구독이 일반 VMess 노드 중심이고 서버가 오랫동안 V2Fly 설정으로 운영되어 왔다면 v2flyNG를 선택해 클라이언트와 서버의 구현 경로를 일치시킬 수 있습니다.
구독에 나중에 REALITY 노드가 추가되었다고 해서 v2flyNG에서 몇 가지 필드만 수동으로 보완해서는 안 됩니다. REALITY는 코어 기능의 차이에 해당하므로, 인터페이스에 같은 이름의 매개변수를 추가해도 호환되지 않는 코어가 해당 기능을 갖게 되지는 않습니다. 이 경우 Xray 코어를 탑재한 v2rayNG로 전환하고 전체 노드 정보를 다시 가져와야 합니다.
노드 프로토콜에 따른 코어 선택: 실행 가능한 판단 절차
-
노드 프로토콜을 확인합니다.
원본 공유 링크의 시작 부분이나 클라이언트의 노드 상세 정보를 확인하세요.
vmess://와vless://는 기본 분류이며, 구독 이름에 포함된 ‘고속’, ‘전용 회선’ 같은 문구는 프로토콜을 판단하는 근거가 아닙니다. -
보안 계층과 플로우 컨트롤을 확인합니다.
VLESS 노드는
security와flow를 추가로 확인하세요.reality또는xtls-rprx-vision이 나타나면 Xray 기능을 기준으로 선택합니다. -
전송 필드를 확인합니다.
type, 경로, 호스트 이름, 서버 이름 등을 대조하세요. 코어가 기본 프로토콜을 지원하더라도 임의의 전송 매개변수가 생략되어도 된다는 뜻은 아닙니다. - 클라이언트 코어를 대조합니다. 안드로이드는 v2rayNG와 v2flyNG의 코어 대응 관계에 따라 선택하고, 데스크톱은 v2rayN의 로그나 설정에서 실제 실행 중인 코어를 확인합니다.
- 로그로 검증합니다. 먼저 코어가 정상적으로 시작되었는지 확인한 다음 연결 단계를 점검하세요. 설정 해석 오류, 핸드셰이크 오류, 시간 초과, DNS 실패는 서로 다른 계층을 가리키므로 한꺼번에 처리해서는 안 됩니다.
구독에 VMess와 REALITY 노드가 함께 포함되어 있다면, 보통 더 높은 프로토콜 요구 사항까지 지원하는 Xray 코어를 선택하는 것이 가장 간편합니다. 노드를 전환할 때 클라이언트까지 함께 바꿀 필요가 없기 때문입니다. 다만 기존 V2Fly 환경에서 안정적인 일반 VMess 노드만 사용한다면 이름을 통일하려고 이전할 필요는 없습니다. 추상적으로 ‘기능이 더 많다’를 좇기보다 현재 노드 구성을 잘 지원하는지가 중요합니다.
팀이나 여러 기기에서 사용할 때는 ‘VMess + WebSocket + TLS’ 또는 ‘VLESS + REALITY + Vision’처럼 노드에 필요한 기능을 설정 문서에 기록하는 것이 좋습니다. 클라이언트 이름만 적어 두지 마세요. 클라이언트는 업데이트되고 코어 버전도 바뀌지만, 연결을 재현하는 핵심 정보는 프로토콜 조합입니다.
코어 전환 전후의 설정 및 문제 해결 절차
V2Fly 경로에서 Xray 경로로 전환할 때는 클라이언트가 생성한 실행 설정을 직접 복사하지 말고 원본 공유 링크나 구독을 다시 가져오는 것이 좋습니다. 생성된 설정에는 클라이언트 전용 로컬 인바운드 포트, DNS 규칙, 라우팅 태그가 포함될 수 있어 다른 환경으로 옮기면 필드 충돌이 발생하기 쉽습니다. 원본 노드 정보가 서버의 실제 요구 사항에 더 가깝습니다.
전환이 끝나면 먼저 단일 노드로 테스트하고 복잡한 라우팅 규칙은 잠시 줄이세요. 원격 채널이 정상적으로 작동하는 것을 확인한 뒤 분할 라우팅, DNS, 앱별 설정을 복원합니다. 이렇게 하면 ‘코어가 노드에 연결할 수 있는가’와 ‘트래픽이 규칙에 따라 노드로 들어가는가’를 나누어 확인할 수 있습니다. 처음부터 구독·코어·DNS·라우팅을 동시에 조정하면 로그 결과를 어느 변경과 연결해야 할지 알기 어렵습니다.
문제 해결 순서
1. 클라이언트가 코어를 정상적으로 시작했는가
2. 노드 프로토콜과 보안 계층이 지원되는가
3. 주소·포트·사용자 ID가 완전한가
4. REALITY 공개 키·짧은 ID·서버 이름이 일치하는가
5. 전송 유형·경로·호스트 이름이 일치하는가
6. DNS가 사용 가능한 결과를 반환하는가
7. 라우팅 규칙이 대상 트래픽을 올바른 아웃바운드로 보내는가
8. 시스템 프록시 또는 로컬 트래픽 가로채기가 적용되었는가
‘연결 후 인터넷이 되지 않는’ 상황에서 바로 코어를 바꾸지 마세요. 먼저 로그에서 원격 연결이 완료되었는지 확인합니다. 핸드셰이크는 성공했지만 웹 페이지가 열리지 않는다면 DNS·라우팅·시스템 프록시 계층의 문제일 가능성이 큽니다. 코어가 설정을 읽는 단계에서 필드 오류를 보고한다면 프로토콜 지원과 설정 형식을 우선 점검해야 합니다. 계속 시간 초과가 발생한다면 서버 주소·포트와 현재 네트워크에서의 접근 가능성도 확인해야 합니다.
구독 업데이트로 노드의 기능이 바뀔 수도 있습니다. 업데이트 전후에 같은 노드 이름이 VMess에서 VLESS로 변경되거나 REALITY 매개변수가 추가될 수 있습니다. 클라이언트에 이전 캐시가 남아 있으면 겉으로는 이름이 같아 보여도 실제 설정은 달라집니다. 서버에서 프로토콜 업그레이드를 안내했다면 수동으로 저장한 이전 노드를 계속 사용하지 말고 구독을 새로 고친 뒤 노드 상세 정보를 확인하세요.
결론: 코어 이름보다 프로토콜 호환성이 우선
Xray와 V2Fly의 선택은 ‘노드가 요구하는 프로토콜 조합을 완전히 구현할 수 있는 코어를 선택한다’는 한 가지 규칙으로 정리할 수 있습니다. REALITY·Vision 등 Xray 기능이 명확히 포함되어 있다면 Xray를 선택하고, 일반 VMess와 기존 V2Fly 설정이 안정적으로 작동한다면 V2Fly를 그대로 사용하면 됩니다. 안드로이드에서는 v2rayNG가 Xray, v2flyNG가 V2Fly에 대응하며, 데스크톱에서 v2rayN을 사용할 때는 실제 코어를 다시 확인해야 합니다.
공유 링크를 가져올 수 있는지만 보거나 클라이언트 버전 번호만 확인해서는 안 됩니다. 프로토콜, 보안 계층, 플로우 컨트롤, 전송 필드, 클라이언트 코어, 서버 설정이 모두 하나의 호환성 체계를 이루어야 합니다. 이 순서대로 점검하면 ‘노드는 있지만 연결되지 않는’ 코어 선택 문제의 대부분을 빠르게 찾아낼 수 있습니다.