Xray와 V2Fly 코어 차이: 버전 관계 정리와 클라이언트 선택 가이드

Project V 생태계의 V2Fly와 Xray 코어 계열의 분기 과정, 프로토콜 지원 차이와 유지보수 현황을 정리하고 v2rayN·v2rayNG·v2flyNG에 적합한 코어를 안내합니다.

이 글 빠르게 보기

Xray와 V2Fly는 비슷한 코드 기반에서 출발했지만, 현재는 각각 독립적으로 유지보수되고 배포·발전하는 두 코어 계열로 나뉘었습니다. 클라이언트를 선택하거나 구독 호환성을 확인하고 시작 오류를 해결하려는 사용자에게 적합한 글입니다. 노드 프로토콜, 클라이언트 종류와 로그를 기준으로 사용할 코어를 판단할 수 있으며, 이름만 보고 추측할 필요가 없습니다.

먼저 클라이언트·코어·구독의 관계부터 이해하기

v2rayN, v2rayNG, v2flyNG는 그래픽 인터페이스를 제공하는 클라이언트입니다. 노드를 저장하고 구독을 갱신하며 시스템 프록시를 전환하고 실행 설정을 생성한 뒤 로그를 보여줍니다. Xray와 V2Fly는 실제 연결을 처리하는 코어로, 로컬 포트를 열고 라우팅 규칙을 실행하며 프로토콜 핸드셰이크를 수행한 다음 트래픽을 원격 서버로 보냅니다. 인터페이스가 정상적으로 열렸다고 해서 코어가 성공적으로 시작된 것은 아닙니다.

구독은 두 요소의 중간에 있습니다. 구독 서비스가 노드 목록을 반환하면 클라이언트는 링크에 포함된 프로토콜, 주소, 포트, 전송 계층과 TLS 매개변수를 코어 설정으로 변환합니다. 같은 구독을 서로 다른 클라이언트에 가져와도 최종 JSON은 다를 수 있습니다. 클라이언트가 로컬 인바운드, DNS, 로그와 라우팅 설정을 추가하기 때문입니다.

따라서 “V2Ray 노드”는 일반적으로 생태계 전반을 가리키는 표현일 뿐, 하위에서 반드시 V2Fly가 실행된다고 단정할 수 없습니다. VLESS, REALITY, XTLS Vision 매개변수가 포함된 노드는 Xray에 더 적합한 편입니다. 전통적인 VMess, WebSocket, TLS 조합은 대체로 두 코어 모두에서 성숙한 구현을 찾을 수 있지만, 필드와 버전은 반드시 확인해야 합니다.

2020
두 유지보수 노선이 점차 분명해지다
1.x
Xray의 주요 버전 계열
v4 / v5
V2Fly 설정 체계 식별자
10808
일반적인 로컬 SOCKS 포트

판단 순서: 노드 매개변수를 먼저 확인한 뒤 클라이언트 이름을 보기

노드에 REALITY, shortId, spiderX 또는 XTLS Vision 플로우 제어 매개변수가 있다면 우선 Xray를 사용하세요. VMess, WebSocket, TLS 같은 일반 필드만 있다면 현재 클라이언트와 설정 호환성을 기준으로 선택하면 됩니다.

V2Fly와 Xray의 버전 관계

두 코어 모두 초기 Project V 생태계와 관련이 있지만, 오늘날 Xray를 V2Fly의 “고급 모드”로 이해해서는 안 되며 V2Fly를 Xray의 구버전으로 보아서도 안 됩니다. 각자 배포 주기, 기능 선택과 버그 수정 경로가 다릅니다. 설정 형식이 여전히 많은 부분에서 비슷한 이유는 인바운드, 아웃바운드, 라우팅과 전송 계층 모델을 서로 가까운 기반에서 계승했기 때문입니다.

V2Fly는 V2Ray 커뮤니티의 유지보수 노선을 이어가며, 전통적인 설정 모델의 연속성을 유지하고 v5 설정 체계를 발전시키는 데 중점을 둡니다. 일반적인 설정은 여전히 inbounds, outbounds, routing, dns, log 등의 부분으로 구성됩니다. 기존 VMess 배포, 표준 전송 계층 조합과 V2Fly 동작에 의존하는 환경에서는 대체로 이 노선을 우선 고려합니다.

Xray는 유사한 코드 기반에서 독립적으로 발전했으며 버전 번호는 1.x 계열을 사용합니다. 주요 기능으로 VLESS, REALITY와 XTLS Vision 등이 있습니다. V2Fly와 일부 JSON 필드가 같아 보여도 새로 추가된 모든 필드를 서로 바꿔 쓸 수 있는 것은 아닙니다. Xray 설정을 그대로 V2Fly에 넘기면 알 수 없는 필드, 프로토콜 구현 누락 또는 인식되지 않는 플로우 제어 값이 발생하는 경우가 많습니다.

Xray 코어

추천

VLESS, REALITY, XTLS Vision 등 최신 설정을 폭넓게 지원하며, 현재 구독 노드를 중심으로 사용하는 환경에 적합합니다.

적합한 경우: 새 설정, 주력 연결, REALITY 노드가 필요한 경우

V2Fly 코어

V2Ray 커뮤니티 노선을 이어가며, 기존 VMess 설정, v4 JSON 설정 또는 V2Fly 사용이 명시된 배포 환경에 적합합니다.

적합한 경우: 기존 설정, 전통적인 프로토콜 조합, V2Fly 서버

두 코어 환경 유지

데스크톱에서 사용할 설정을 코어별로 따로 저장하고 로그와 실제 연결 결과로 검증하세요. 서로 다른 코어 전용 필드를 하나의 파일에 섞지 않는 것이 좋습니다.

적합한 경우: 여러 노드 그룹 관리, 기존 설정 마이그레이션, 호환성 테스트

버전 번호는 서로 비교할 수 없다

Xray 1.x와 V2Fly v5의 숫자는 같은 배포 순서에 속하지 않으므로 숫자 크기로 신구를 판단할 수 없습니다. 유효한 기준은 대상 프로토콜이 구현되어 있는지, 설정 필드를 인식하는지, 클라이언트에 포함된 코어 버전이 노드 요구 사항을 충족하는지입니다.

프로토콜 지원과 설정 필드의 차이

VMess는 두 노선 모두에서 접할 수 있는 전통적인 프로토콜이지만, 구체적인 전송 계층, 암호화 옵션과 호환 동작은 버전에 따라 달라집니다. 기존 VMess + TCP 또는 VMess + WebSocket + TLS 노드를 마이그레이션할 때는 원래 주소, 포트, UUID, Host, 경로와 TLS 도메인을 먼저 유지하고 여러 매개변수를 동시에 바꾸지 마세요.

VLESS는 인증과 암호화 전송 계층을 분리해 설정합니다. 실제 클라이언트 환경에서 VLESS는 Xray의 REALITY 또는 XTLS Vision과 함께 사용되는 경우가 많습니다. 이런 노드는 서버 주소와 UUID 외에도 serverName, publicKey, shortId, spiderX, 지문과 xtls-rprx-vision 플로우 제어 값을 요구할 수 있습니다. 필수 항목 하나라도 빠지면 핸드셰이크 실패 또는 연결 후 유효한 트래픽이 흐르지 않는 문제가 발생할 수 있습니다.

라우팅 구조도 “겉보기에는 같은” 설정이라는 오판을 만들기 쉽습니다. 두 코어 모두 도메인, IP, 포트와 인바운드 태그에 따라 규칙을 실행할 수 있지만, 규칙 데이터 파일, 필드 확장과 DNS 동작은 버전에 따라 달라질 수 있습니다. routing.rules를 마이그레이션할 때는 domain, ip, port, network, outboundTag를 하나씩 확인하고 참조된 태그가 실제로 존재하는지도 확인하세요.

확인 항목 Xray V2Fly 선택 가이드
VMess 일반 설정 지원되지만 전송 필드 확인 필요 지원되며 기존 배포에서 흔함 서버 설정을 동일하게 유지하고 검증된 코어를 우선 사용
VLESS 기본 연결 일반적인 사용 사례 이름만으로 모든 확장 기능의 호환성을 판단할 수 없음 구독에 Xray 전용 매개변수가 있으면 Xray 선택
REALITY 기본 기능 노선 Xray 설정을 그대로 적용하지 말 것 Xray를 사용하고 공개 키와 짧은 식별자를 빠짐없이 입력
XTLS Vision 해당 플로우 제어 필드 사용 Xray 플로우 제어 설정으로 처리하지 않음 클라이언트와 서버에서 플로우 제어 값을 모두 확인
v5 설정 체계 V2Fly v5와 동일하지 않음 V2Fly의 발전 방향에 해당 V2Fly 문서에 따라 생성하고 필드를 기계적으로 치환하지 않기

v2rayN, v2rayNG, v2flyNG 중 무엇을 선택할까

Windows 데스크톱에서는 일반적으로 v2rayN을 우선 사용하고 클라이언트가 Xray 코어를 관리하도록 설정합니다. 구독 가져오기, 노드 일괄 테스트, 시스템 프록시, 라우팅 분할과 로그 확인에 적합합니다. 노드에 REALITY 또는 XTLS Vision이 포함되어 있다면 이 조합으로 설정 변환 과정의 불확실성을 줄일 수 있습니다.

v2rayN에서 코어 선택을 확인하려면 먼저 「설정」→「매개변수 설정」을 열고 코어, 기본 설정 또는 시작 매개변수와 관련된 항목을 확인하세요. 버전에 따라 항목 이름은 조금 다를 수 있습니다. 그런 다음 메인 창으로 돌아가 서비스를 다시 시작하고 즉시 로그를 확인합니다. 로그 첫 화면에 Xray 버전 정보가 표시된다면 현재 실행 중인 코어가 Xray라는 뜻이며, 프로그램 폴더의 파일명만 보고 추측할 필요가 없습니다.

Android에서는 코어 노선에 따라 v2rayNG와 v2flyNG 중에서 선택해야 합니다. v2rayNG는 Xray 코어와 함께 사용하며 VLESS, REALITY 또는 XTLS Vision이 포함된 구독에 적합합니다. v2flyNG는 V2Fly 코어와 함께 사용하며 V2Fly 동작에 명확히 의존하는 노드와 설정에 적합합니다. 두 앱의 조작 방식이 비슷하다고 해서 하위 프로토콜 확장까지 완전히 같은 것은 아닙니다.

추천 구성: 노드 프로토콜에 맞춰 데스크톱과 Android의 코어 통일

현재 주류 구독
  • 데스크톱에서 v2rayN과 Xray 사용
  • Android에서 v2rayNG 사용
  • REALITY와 Vision 매개변수 전체 유지
  • 양쪽에서 구독을 갱신한 뒤 노드 수 확인
기존 V2Fly 환경
  • 데스크톱에서 먼저 v2rayN이 필요한 코어 진입점을 제공하는지 확인
  • Android에서 v2flyNG 사용
  • 기존 VMess와 라우팅 필드 유지
  • 마이그레이션 전에 작동하는 설정을 하나 내보내기

같은 구독을 여러 클라이언트에서 읽을 수는 있지만, 대상 코어가 필드를 완전히 인식해야 노드가 실제로 호환된다고 할 수 있습니다.

로컬 포트도 함께 확인하기

로그로 현재 실행 중인 코어 확인

클라이언트 제목, 구독 이름과 노드 메모만으로는 실제 코어를 증명할 수 없습니다. 가장 신뢰할 수 있는 확인 지점은 시작 로그입니다. 서비스를 중지한 뒤 한 번 다시 시작하고 첫 줄부터 버전 식별자, 설정 로드 경로, 수신 주소와 오류 정보를 확인하세요. 마지막 줄의 “시작 실패”만 캡처하지 마세요. 실제 원인은 대개 그보다 앞에 표시됩니다.

정상적인 시작 과정은 일반적으로 설정 생성, 설정 파싱, 인바운드 포트 수신 대기와 서비스 실행 단계를 거칩니다. 파싱 단계에서 중단되면 JSON 문법과 필드를 우선 확인하세요. 127.0.0.1:10808에서 이미 수신 대기 중인데 이후 원격 연결이 실패한다면 주소, 포트, TLS, SNI, REALITY 공개 키와 라우팅 규칙을 점검해야 합니다.

시작 확인 순서
1. 코어 이름과 버전 줄 확인
2. 설정 파일이 성공적으로 로드되었는지 확인
3. 127.0.0.1:10808에서 수신 대기를 시작했는지 확인
4. 노드 테스트 또는 웹 요청 한 번 실행
5. 첫 warning / error부터 위쪽으로 올라가며 주변 로그 확인
  1. unknown field가 표시되는 경우: 현재 코어가 해당 설정 필드를 인식하지 못하는 것입니다. 먼저 그 필드가 어느 코어 노선에 속하는지 확인한 뒤, 클라이언트가 호환되지 않는 확장 매개변수를 생성했는지 점검하세요.
  2. failed to listen이 표시되는 경우: 로컬 포트가 사용 중이거나 수신 주소가 잘못된 것입니다. 중복 실행 중인 클라이언트를 종료하거나 SOCKS 포트를 10808에서 사용하지 않는 포트로 변경하세요.
  3. invalid user가 표시되는 경우: UUID, 사용자 식별자와 프로토콜 유형을 확인하세요. VMess와 VLESS 링크는 프로토콜 이름만 바꾼다고 계속 사용할 수 없습니다.
  4. handshake failed가 표시되는 경우: 시스템 시간, 서버 이름, TLS 매개변수, REALITY 공개 키, 짧은 식별자와 클라이언트 지문을 확인하세요. 라우팅 규칙은 먼저 변경하지 않는 것이 좋습니다.
  5. 시작에는 성공했지만 트래픽이 없는 경우: 시스템 프록시, DNS와 아웃바운드 태그를 확인하세요. 라우팅 규칙이 존재하지 않는 outboundTag를 참조하면 특정 요청이 예상대로 전송되지 않을 수 있습니다.

자주 묻는 선택 질문과 해결 방법

코어 선택은 한 번 정하고 끝나는 결정이 아닙니다. 구독 제공자가 노드 프로토콜을 변경하거나 클라이언트가 코어를 업그레이드하고 서버 설정이 이전되면 호환성을 다시 확인해야 할 수 있습니다. 검증된 노드 하나를 보관하고 사용한 프로토콜과 전송 매개변수를 기록해 두면 이후 문제 해결 시간을 크게 줄일 수 있습니다.

같은 구독을 v2rayNG와 v2flyNG에 동시에 가져올 수 있나요?

각각 가져올 수 있지만 노드 매개변수를 하나씩 확인해야 합니다. 먼저 구독 상세 정보에 REALITY, Vision 등 Xray 계열 필드가 포함되어 있는지 확인하고, 포함되어 있다면 v2rayNG에서 우선 테스트하세요. 양쪽에 노드 이름이 표시된다는 이유만으로 연결 기능이 같다고 판단하지 마세요.

v2rayN 업데이트 후 노드가 갑자기 시작되지 않으면 어떻게 하나요?

먼저 서비스를 중지한 뒤 로그에서 코어 버전 줄과 첫 번째 오류를 확인하세요. 「설정」→「매개변수 설정」으로 들어가 로컬 포트와 코어 관련 옵션을 확인한 다음 노드 하나만 테스트합니다. 알 수 없는 필드가 표시되면 구독을 다시 갱신하고 이전 버전에서 생성된 임시 설정을 계속 사용하지 마세요.

VMess 노드는 반드시 V2Fly를 사용해야 하나요?

그럴 필요는 없습니다. Xray도 일반적인 VMess 설정을 처리할 수 있습니다. 더 현실적인 방법은 현재 안정적인 조합을 유지하면서 주소, 포트, UUID, 전송 방식, Host, 경로와 TLS 도메인을 확인하는 것입니다. 명확한 호환성 차이가 있을 때만 코어를 변경하세요.

노드에 REALITY가 표시되는데 가져온 뒤에도 왜 실패하나요?

노드 편집 페이지를 열고 serverName, publicKey, shortId, spiderX, 지문과 Vision 플로우 제어를 하나씩 확인하세요. 그런 다음 클라이언트가 해당 필드를 지원하는 Xray 버전을 실행 중인지 확인하고 로그의 첫 번째 핸드셰이크 오류부터 점검합니다.

Xray의 config.json을 V2Fly에 그대로 복사해도 되나요?

그대로 복사하는 것은 권장하지 않습니다. 먼저 인바운드, 아웃바운드, DNS와 라우팅 부분을 나누고 대상 코어가 지원하지 않는 전용 필드를 삭제한 뒤 대상 코어의 설정 테스트 기능으로 확인하세요. 매번 아웃바운드 하나만 마이그레이션하고 성공한 뒤 라우팅 규칙을 추가합니다.

코어 선택 결론

현재 흔히 사용되는 구독이라면 v2rayN과 Xray, v2rayNG와 Xray 조합이 가장 직접적인 출발점이며 VLESS, REALITY와 XTLS Vision 노드에 특히 적합합니다. V2Fly를 명확히 사용하는 서버, 기존 VMess 설정 또는 v5 설정 체계라면 V2Fly 노선을 유지하고 Android 연결에는 v2flyNG를 사용해야 합니다.

정말 피해야 할 것은 “이름 호환성이 설정 호환성을 의미한다”는 생각입니다. 두 코어는 일부 역사와 구조를 공유하지만 전용 프로토콜, 확장 필드, 버전 체계와 실행 동작은 이미 분리되어 있습니다. 선택할 때마다 검증 가능한 세 가지를 확인해야 합니다. 노드 매개변수가 완전한지, 클라이언트가 실제로 어떤 코어를 시작했는지, 로그에서 설정 로드와 포트 수신 대기가 완료되었는지입니다.

최종 권장 사항: 새 설정은 기능이 맞는 코어로, 기존 설정은 검증된 동작을 기준으로

VLESS, REALITY 또는 Vision 설정을 새로 만들 때는 Xray를 우선 선택하세요. 기존 V2Fly 설정을 관리할 때는 버전 숫자를 맞추기 위해 무리하게 마이그레이션하지 않는 것이 좋습니다. 먼저 단일 노드로 시작, 핸드셰이크와 라우팅을 테스트한 뒤 구독을 일괄 가져오세요.

v2rayN 다운로드