· 심화 지식 · 약 10분

Xray 코어와 V2Fly 코어 차이: 프로토콜 지원 및 설정 비교

Project V의 분기 역사를 바탕으로 Xray와 V2Fly의 VLESS·XTLS·REALITY 지원 및 설정 필드 차이를 비교하고, v2rayNG와 v2flyNG 중 무엇을 선택할지 안내합니다.

이 글 미리 보기

코어를 고를 때는 이름보다 서버 요구사항을 먼저 확인하세요. REALITY나 XTLS Vision이 필요하다면 해당 기능을 지원하는 버전의 Xray를 선택해야 합니다. 일반적인 VMess, WebSocket, TLS 조합은 두 계열 모두 구현을 제공합니다. 구독 정보를 받은 뒤 클라이언트를 고르거나 설정을 이전하려는 독자를 위해 프로토콜 구조와 설정 필드 차이, 가져온 설정에서 필수 항목이 누락되지 않았는지 확인하는 방법을 설명합니다.

클라이언트, 코어, Project V부터 구분하기

코어는 실제 연결을 수립하고 프로토콜을 처리하며 DNS 조회와 라우팅을 담당합니다. 클라이언트는 이러한 기능을 조작할 수 있는 화면으로 제공합니다. v2rayN, v2rayNG, v2flyNG는 클라이언트 이름이고, Xray-core와 V2Fly가 관리하는 v2ray-core는 코어입니다. 클라이언트 버전과 코어 버전은 별개이므로, 화면 프로그램을 업데이트해도 코어가 다른 종류로 바뀌는 것은 아닙니다.

Project V는 V2Ray를 중심으로 형성된 도구 및 프로토콜 생태계입니다. V2Fly 커뮤니티는 v2ray-core 개발을 이어 왔으며, Xray-core는 2020년 관련 코드 기반에서 분기한 뒤 별도의 기능 발전 경로를 밟았습니다. 두 프로젝트는 공통된 역사를 바탕으로 비슷한 JSON 구조를 공유하지만, 모든 설정 필드를 서로 바꿔 쓸 수 있는 것은 아닙니다.

구독 설정 클라이언트 파싱 코어 로드 라우팅 규칙 적용 서버 연결

이 흐름을 보면 “구독은 가져왔는데 연결되지 않는” 이유도 알 수 있습니다. 가져오기에 성공했다는 것은 클라이언트가 일부 데이터를 읽었다는 뜻일 뿐, 코어가 모든 기능을 지원하거나 서버 주소, 인증 정보, 전송 설정이 서로 맞는다는 뜻은 아닙니다.

프로토콜 지원 비교: VLESS와 REALITY는 다릅니다

하나의 연결에는 보통 프록시 프로토콜, 전송 방식, 보안 계층이 함께 사용됩니다. VLESS와 VMess는 프록시 프로토콜이고 TCP와 WebSocket은 전송 방식입니다. TLS와 REALITY는 연결 보안 방식에 해당합니다. XTLS Vision은 특정 흐름 제어 및 데이터 처리 방식을 가리키며, “TLS” 옵션의 이름만 바꾼 것이 아닙니다.

기능Xray 계열V2Fly 계열선택 시 확인 사항
VMess지원하며, TCP·WebSocket·TLS 조합에서 흔히 사용됩니다.지원하며, 두 계열 간 호환되는 일반적인 사용 사례입니다.인증 정보, 전송 설정, 서버 설정이 모두 일치해야 합니다.
VLESS 기본 프로토콜지원하며, 관련 흐름 제어 및 보안 조합도 제공됩니다.일부 버전과 설정 체계에서 지원합니다. 실제 빌드와 클라이언트 메뉴를 확인하세요.VLESS라는 이름만으로 노드 전체가 작동한다고 판단할 수 없습니다.
XTLS Vision해당 버전에서 xtls-rprx-vision 흐름 제어를 지원합니다.Xray Vision 설정을 그대로 사용할 수 없습니다.클라이언트와 서버 모두 해당 흐름 제어 및 조합을 지원해야 합니다.
REALITY해당 버전에서 REALITY 설정을 지원합니다.Xray의 REALITY 설정을 그대로 사용할 수 없습니다.서버 공개 키 정보, SNI, short ID, 지문 설정을 확인하세요.
WebSocket + TLS관련 구현을 제공합니다.관련 구현을 제공합니다.경로, Host, 인증서 이름, 설정 형식을 확인하세요.

결론: 전용 기능을 먼저 확인한 뒤 클라이언트를 선택하세요

구독 정보에 REALITY 또는 xtls-rprx-vision이 명시되어 있다면, 안드로이드에서는 해당 설정을 지원하는 v2rayNG를 우선 고려하세요. 일반적인 VMess + WebSocket + TLS만 사용한다면 현재 설정과의 호환성을 비교하면 됩니다. 이름만 바꾸기 위해 이전할 필요는 없습니다.

“V2Fly는 VLESS를 전혀 지원하지 않는다”거나 “VLESS만 지원하면 REALITY에도 연결할 수 있다”는 말은 모두 지나치게 단정적입니다. 전자는 버전 및 구현 차이를 간과하고, 후자는 프로토콜과 보안 계층을 혼동합니다. 오래된 자료의 XTLS 원본 흐름 제어를 Vision과 동일하게 취급해서도 안 되며, 특히 이전 값을 새 설정에 그대로 복사하지 마세요.

설정 비교: 자주 쓰는 두 조합에서 확인할 항목

아래 두 카드는 설정 필드를 확인하기 위한 표이며, 실제로 연결 가능한 노드나 서버 인증 정보를 제공하지 않습니다. 예시 경로 /proxy는 필드 위치를 설명하기 위한 것입니다. 실제 경로는 서버 설정에 맞춰 입력하세요. REALITY 카드는 일반적인 VLESS + TCP + Vision 조합을 예로 들며, 모든 VLESS에 Vision이 필요한 것은 아닙니다.

VLESS + REALITY

프록시 프로토콜
VLESS
전송 방식
TCP
보안 계층
REALITY
Flow
xtls-rprx-vision
인증 및 핸드셰이크
사용자 ID, 서버 공개 키 정보, SNI, short ID

해당 Xray 버전의 필드 정의를 기준으로 확인하고, 각 설정을 서버와 하나씩 대조하세요.

VMess + WebSocket + TLS

프록시 프로토콜
VMess
전송 방식
WebSocket
보안 계층
TLS
경로 예시
/proxy
인증 및 핸드셰이크
사용자 ID, Host, SNI, 유효한 인증서

두 코어 계열 모두 관련 구현을 제공하지만, 경로와 도메인 필드를 임의로 생략하거나 서로 바꿔서는 안 됩니다.

Host와 SNI는 같은 경우가 많지만 용도가 다릅니다. WebSocket의 Host는 HTTP 요청에 포함되는 대상 호스트 정보이고, SNI는 TLS 핸드셰이크에서 전달하는 서버 이름입니다. 연결 주소는 또 다른 필드로, 네트워크 연결을 시작할 대상을 지정합니다. 서버에서 이 세 값이 서로 다르게 요구된다면, 보기 좋게 정리한다는 이유로 모두 같은 값으로 바꾸면 안 됩니다.

JSON 설정: 비슷한 구조라고 전체 설정을 공유할 수 있는 것은 아닙니다

Xray와 V2Fly의 일반적인 설정에는 inbounds, outbounds, routing 같은 이름이 모두 등장합니다. V2Fly에는 서로 다른 설정 버전과 구조가 있으며, 클라이언트가 공유 링크를 먼저 읽은 뒤 자체 코어용 JSON을 생성하기도 합니다. 따라서 공유 링크가 같다는 것, 화면의 필드가 비슷하다는 것, 최종 코어 설정이 호환된다는 것은 각각 별개의 문제입니다.

아래는 기존 JSON 형식의 streamSettings 필드 일부로, WebSocket과 TLS의 계층 구조만 설명합니다. example.com은 문서용 예시 도메인이며 실제로 사용할 수 있는 서버 주소가 아닙니다. 이 조각에는 전체 인바운드, 아웃바운드, 인증 설정이 없으므로 단독으로 실행할 수 없습니다.

{
  "streamSettings": {
    "network": "ws",
    "security": "tls",
    "tlsSettings": {
      "serverName": "example.com"
    },
    "wsSettings": {
      "path": "/proxy",
      "headers": {
        "Host": "example.com"
      }
    }
  }
}

가장 안전한 이전 방법은 서비스 제공자가 제공한 전체 구독을 다시 가져온 뒤 생성된 설정을 확인하는 것입니다. JSON 전체를 직접 옮기는 방법은 출처 버전, 대상 버전, 설정 형식을 정확히 알고 있을 때만 사용하세요. 문법 검사에 통과하더라도 필드가 실제로 적용되었는지는 따로 확인해야 합니다.

포트와 라우팅: 로컬 진입점을 원격 기능과 혼동하지 마세요

코어가 라우팅을 처리하더라도 트래픽이 먼저 코어로 들어와야 합니다. 시스템 프록시는 해당 설정을 따르는 앱에만 영향을 줍니다. TUN은 가상 네트워크 인터페이스로 지정된 트래픽을 처리하며, 추가 권한이 필요한 경우가 많습니다. 둘 다 “프록시 아웃바운드를 선택했다”는 뜻은 아니며, 코어에 들어온 요청은 라우팅 규칙에 따라 분배되어야 합니다.

443
일반적으로 사용하는 원격 TLS 포트이며, 필수값은 아닙니다
10808
로컬 프록시 포트 예시이며, 실제 값은 설정을 확인하세요
127.0.0.1
로컬 루프백 주소이며 원격 서버가 아닙니다

이 숫자는 주소와 포트 예시일 뿐, 성능 측정 결과나 모든 클라이언트의 공통 기본값이 아닙니다. 앱에 127.0.0.1:10808을 입력했다면 클라이언트가 실제로 로컬의 해당 포트에서 연결을 수신하는지, 진입점의 프로토콜이 앱 요구사항과 맞는지 확인하세요. 포트 번호만으로 HTTP 프록시와 SOCKS 진입점을 구분할 수는 없습니다.

  1. v2rayN의 「설정」→「매개변수 설정」에서 로컬 수신 주소와 관련 옵션을 확인하세요. 버전에 따라 메뉴 이름이나 구성이 다를 수 있으므로 현재 화면을 기준으로 확인해야 합니다.
  2. 시스템 프록시나 앱 프록시가 실제 수신 주소를 가리키는지 확인하세요. 이전 클라이언트의 포트를 계속 가리키지 않도록 주의하세요.
  3. 현재 라우팅 모드와 적용된 규칙을 확인하세요. geosite:cn은 도메인 분류 참조이고 geoip:cn은 IP 분류 참조입니다. 둘 다 해당 데이터 파일이 있어야 작동합니다.
  4. 다른 코어로 이전한 뒤에는 규칙 파일 위치, 태그 이름, 아웃바운드 태그가 계속 일치하는지 확인하세요. 라우팅 항목만 복사해서는 충분하지 않습니다.

“직접 연결되는 사이트는 정상인데 프록시 사이트는 실패한다”면 요청이 특정 규칙에 들어갔지만 프록시 아웃바운드에 문제가 있을 가능성이 큽니다. “모든 앱에서 전환이 아무런 영향을 주지 않는다”면 진입점과 트래픽 처리 방식을 먼저 확인하세요. 연결 흐름을 따라 원인을 찾고, 곧바로 코어 속도 탓으로 돌리지 마세요.

안드로이드 클라이언트 선택: 구독 요구사항을 소규모로 검증하세요

사용 중인 노드에서 Xray REALITY나 Vision을 명시적으로 요구한다면, 해당 기능을 지원하는 v2rayNG를 선택하는 편이 간편합니다. 현재 서비스가 V2Fly와 함께 검증된 설정을 제공한다면 v2flyNG를 계속 사용해도 됩니다. 전용 기능이 필요하지 않다면 설정을 온전히 가져올 수 있는지, 로그를 확인하기 쉬운지, 기존 라우팅을 유지할 수 있는지를 우선 고려하세요.

  1. 환경 기록: 클라이언트 버전, 코어 버전, 프로토콜, 전송 방식, 보안 계층, TUN 사용 여부를 기록하세요. “최신 버전”이라고만 적어 두지 마세요.
  2. 기존 설정 보관: 이전 전에 구독 그룹과 사용자 지정 라우팅을 백업하세요. 민감한 구독 주소를 공개된 게시판에 올리지 마세요.
  3. 테스트 항목 하나만 가져오기: 원본 설정과 포트, SNI, 경로, Flow, REALITY 관련 필드를 대조하세요. 필수 필드가 빠졌다면 테스트를 중단하고 먼저 확인하세요.
  4. 동시에 트래픽을 처리하지 않기: 다른 클라이언트를 테스트하기 전에 기존 클라이언트의 프록시나 가상 네트워크 연결을 중지해 진입점 충돌을 줄이세요.
  5. 한 번에 하나만 변경하기: 같은 네트워크, 같은 서버, 같은 대상 요청을 유지한 채 연결 결과를 비교하세요. DNS, 노드, 라우팅 모드를 동시에 바꾸지 마세요.

결론: 한 번의 지연 시간보다 프로토콜 호환성이 우선입니다

먼저 대상 조합이 정상적으로 로드되고 안정적으로 연결되는지 확인한 뒤, 같은 조건에서 사용 경험을 비교하세요. 한 번 측정한 지연 시간으로 특정 코어가 전반적으로 더 빠르다고 판단할 수 없으며, 프로토콜과 설정 호환성 확인을 대신할 수도 없습니다.

자주 묻는 질문: 가져오기 성공, 핸드셰이크 실패, 업데이트 순서

구독을 가져오는 데 성공했는데 설정을 지원하지 않는다고 표시되는 이유는 무엇인가요?

클라이언트가 공유 링크의 프로토콜 헤더는 인식했지만 확장 매개변수를 모두 변환하지 못했을 수 있습니다. 현재 어떤 코어가 호출되는지, 실제 생성된 설정은 무엇인지, 로그에 처음 나타난 설정 로드 오류는 무엇인지 확인하세요. 알 수 없는 필드나 지원하지 않는 전송 방식이 나타나면 먼저 버전을 확인하세요. 오류가 사라지도록 필드를 삭제해 억지로 실행하지 마세요.

REALITY 연결에 실패하면 인증서 검증을 꺼야 하나요?

검증을 끄는 것을 일반적인 해결책으로 삼아서는 안 됩니다. 먼저 클라이언트와 서버 버전, 사용자 ID, 공개 키 정보, SNI, short ID, 지문, 시스템 시간을 확인하세요. REALITY의 인증 방식은 일반 TLS와 다릅니다. 일반 TLS용 문제 해결 옵션을 무작정 적용하면 문제가 해결되지 않을 뿐 아니라 실제 매개변수 오류를 놓칠 수 있습니다.

클라이언트와 코어 중 무엇을 먼저 업데이트해야 하나요?

먼저 현재 클라이언트가 지원하는 코어 범위와 업데이트 안내를 확인한 다음, 클라이언트에서 제공하는 방법으로 업데이트하세요. 화면에서 새 필드를 생성할 수 없다면 코어만 교체해도 새 기능을 사용할 수 없을 수 있습니다. 되돌릴 수 있도록 설정을 보관하고, 업데이트 후에는 기존 노드로 먼저 확인한 뒤 새 프로토콜 조합을 테스트하세요.

VMess를 VLESS로 바꿀 때 프로토콜 이름만 수정하면 되나요?

아니요. 서버에 해당 프로토콜을 위한 인바운드가 있어야 하며, 인증 정보와 프로토콜 전용 필드도 일치해야 합니다. VLESS 자체는 데이터를 암호화하지 않으므로 실제로 배포할 때는 적절한 보안 전송과 함께 구성하는 경우가 많습니다. 이름만 바꾸는 것은 완전한 이전이 아니며, 기존 구독에 REALITY 매개변수를 임의로 추가할 수도 없습니다.

v2rayN 다운로드플랫폼에 맞는 클라이언트 선택