Xray 코어와 V2Fly 코어 차이: VLESS·XTLS·REALITY 지원 비교

Xray와 V2Fly 코어의 계보와 프로토콜·전송 방식·설정 필드 차이를 비교해 v2rayNG와 v2flyNG 중 알맞은 클라이언트를 선택할 수 있도록 안내합니다.

이 글 한눈에 보기

코어를 고를 때는 클라이언트 이름보다 노드 설정을 먼저 확인하세요. 일반 VMess와 일부 VLESS 설정은 두 코어에서 모두 처리할 수 있지만, REALITY 또는 xtls-rprx-vision이 포함된 노드에는 해당 기능을 지원하는 Xray가 필요합니다. 구독을 가져온 뒤 연결되지 않거나, 안드로이드 클라이언트를 바꾸려 하거나, 설정을 옮기려는 사용자를 위해 프로토콜 호환 범위와 필드 확인 순서, 전환 후 점검 방법을 설명합니다.

1. Xray와 V2Fly: 코어와 클라이언트 화면은 다릅니다

V2Ray는 프록시 도구 프로젝트의 이름이며, 이런 도구를 통칭하는 말로도 쓰입니다. V2Fly는 V2Ray를 유지·관리하는 커뮤니티 프로젝트입니다. 코어는 인바운드 연결을 받고, 라우팅 규칙을 적용하고, 프로토콜을 처리해 아웃바운드 연결을 설정합니다. Xray는 V2Ray 코드 기반에서 분기되어 개발됐습니다. 두 코어는 같은 역사를 공유하지만 기능 개발 방향과 설정 규칙은 서로 달라졌습니다. Xray를 V2Fly의 이름만 바꾼 버전으로 보면 안 됩니다.

클라이언트는 구독 관리, 노드 편집, 시스템 네트워크 설정을 담당하고 코어는 실제 연결을 처리합니다. 안드로이드용 v2rayNG는 Xray 코어를, v2flyNG는 V2Fly 코어를 사용합니다. 데스크톱에서 v2rayN을 쓴다면 현재 설정이 어떤 코어를 호출하는지 확인해야 합니다. 메인 창의 제목만으로는 판단할 수 없습니다. 클라이언트를 업데이트한 뒤에는 시작 로그에서 실제로 로드된 코어 이름과 버전도 확인하세요.

구독 가져오기설정 생성코어 로드라우팅 규칙 적용원격 핸드셰이크

이 흐름을 보면 서로 다른 두 가지 문제를 구분할 수 있습니다. 노드가 목록에 보인다는 것은 클라이언트가 구독을 읽었다는 뜻일 뿐입니다. 코어가 설정을 불러오고 원격 서버와 핸드셰이크까지 완료해야 노드를 사용할 수 있습니다. 화면에 프로토콜 이름이 표시되더라도 현재 코어가 해당 조합의 모든 필드를 처리할 수 있다는 보장은 없습니다.

2. VLESS·XTLS·REALITY 지원 범위

프로토콜, 전송 방식, 보안 계층은 서로 다른 개념입니다. VMess와 VLESS는 프록시 프로토콜이고, TCP와 WebSocket은 데이터를 전달하는 전송 방식입니다. TLS와 REALITY는 연결 보안과 관련된 방식입니다. XTLS Vision은 특정 흐름 제어 방식으로 조건에 맞는 트래픽을 처리합니다. 노드 이름에 “VLESS”라고 적혀 있어도 사용할 코어를 결정하기엔 정보가 부족합니다. 보안 계층과 flow도 확인해야 합니다.

두 코어에서 일반적으로 지원하는 기능 비교
설정 기능XrayV2Fly확인할 항목
VMess지원지원UUID, 암호화 옵션, 전송 방식, TLS 매개변수가 일치해야 합니다
일반 VLESS지원지원 구현 있음실제 버전과 설정 형식을 확인하세요. 모든 VLESS 확장 기능을 지원한다는 뜻은 아닙니다
TCP / WebSocket + TLS일반적인 조합 지원일반적인 조합 지원도메인, 인증서 검증, 경로, Host가 서버 설정과 일치해야 합니다
XTLS Vision해당 조합 지원Xray의 Vision 구현은 지원하지 않음flow가 xtls-rprx-vision이면 호환되는 Xray를 선택하세요
REALITY지원Xray의 REALITY 방식은 지원하지 않음서버 이름, 공개 키, shortId, 지문을 확인하세요

VLESS 자체에는 페이로드 암호화 기능이 없으므로 일반적으로 TLS나 REALITY 같은 보안 방식과 함께 설정합니다. VLESS와 VMess는 단순히 “새 버전이 구버전을 대체하는” 관계가 아닙니다. 호환성을 판단할 때는 첫 항목만 비교하지 말고 “VLESS + TCP + REALITY + Vision”처럼 노드 설정 전체를 하나의 조합으로 살펴보세요.

결론: security와 flow를 기준으로 코어 선택

security가 reality이거나 flow가 xtls-rprx-vision이면 해당 조합을 지원하는 Xray를 우선 사용하세요. 일반적인 VMess + WebSocket + TLS 조합이라면 매개변수를 먼저 확인하면 됩니다. 코어를 바꾸기 위해 설정을 옮길 필요는 없습니다.

3. 설정 두 가지: 함께 확인해야 할 필드

아래 두 카드는 매개변수를 식별하기 위한 예시이며, 그대로 사용할 수 있는 노드 설정이 아닙니다. 도메인은 예시용 예약 도메인이고 경로와 포트도 설명을 위한 값입니다. 실제 연결에는 서버나 구독에서 제공한 매개변수를 사용하세요. 특히 한 노드의 UUID와 다른 노드의 공개 키, 또 다른 노드의 서버 이름을 조합해서는 안 됩니다.

VLESS + REALITY + Vision

전송 방식
TCP
보안 계층
reality
Flow
xtls-rprx-vision
지문
chrome (예시)
인증 매개변수
서버에 설정된 공개 키와 shortId

해당 조합을 지원하는 Xray를 사용하고, 노드 정보에 따라 서버 이름과 인증 매개변수를 입력하세요.

VMess + WebSocket + TLS

전송 방식
ws
경로
/proxy-ws (예시)
보안 계층
tls
서버 이름
node.example.com (예시)
VMess 암호화
auto

일반적인 조합은 두 코어 모두 처리할 수 있습니다. 경로, Host, 인증서 도메인은 서버 설정과 일치해야 합니다.

REALITY 클라이언트에는 서버의 개인 키를 입력하지 않습니다. 클라이언트에는 서버에 대응하는 공개 키 등 인증 정보가 필요하며, 서버 개인 키는 서버에 보관해야 합니다. shortId는 16진수로 표시되며 사용할 수 있는 값은 서버에서 정합니다. 이를 메모처럼 취급하거나 구독에 포함된 값을 임의로 바꾸지 마세요. 서버 이름은 보통 serverName 또는 링크 매개변수 sni에 지정하며 서버 설정과 일치해야 합니다.

클라이언트 설정의 “지문”은 보통 TLS ClientHello의 모의 특성을 뜻하며 기기 식별 코드가 아닙니다. fingerprint를 chrome으로 바꿔도 잘못된 공개 키, UUID, 포트는 해결되지 않습니다. REALITY를 쓴다고 해서 반드시 Vision을 활성화해야 하는 것도 아닙니다. 두 항목은 서로 다른 설정이며, 서버가 해당 조합을 사용하는 경우에만 알맞은 flow를 설정하세요.

4. 설정 이전: JSON 구조가 같아도 서로 호환되는 것은 아닙니다

Xray와 V2Fly의 기존 설정에는 inbounds, outbounds, routing 같은 구조가 있지만, 공통 구조가 있다고 해서 모든 필드를 서로 사용할 수 있는 것은 아닙니다. V2Fly도 설정 형식에 따라 차이가 있습니다. 설정을 이전할 때는 먼저 대상 코어가 어떤 형식을 지원하는지 확인한 뒤, 프로토콜과 전송 관련 필드를 점검하세요. Xray 설정 전체를 V2Fly에 그대로 넘기면 로드 단계에서 실패할 수 있습니다.

아래는 flow가 어느 계층에 있는지 확인하기 위한 Xray의 일반적인 VLESS + TLS + Vision 아웃바운드 예시입니다. 전체 설정이 아니며, 예시 도메인과 모두 0인 UUID는 실제로 사용할 수 없는 가짜 값입니다. 이 예시에는 REALITY 매개변수가 없으므로 tls를 reality로 바꾸는 것만으로 설정을 전환할 수 없습니다.

{
  "outbounds": [
    {
      "tag": "proxy",
      "protocol": "vless",
      "settings": {
        "vnext": [
          {
            "address": "node.example.com",
            "port": 443,
            "users": [
              {
                "id": "00000000-0000-0000-0000-000000000000",
                "encryption": "none",
                "flow": "xtls-rprx-vision"
              }
            ]
          }
        ]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "tls",
        "tlsSettings": {
          "serverName": "node.example.com",
          "allowInsecure": false
        }
      }
    }
  ]
}
  1. 먼저 기존 설정을 저장하세요. 클라이언트 버전, 코어 버전, 현재 노드, 라우팅 프리셋을 기록해 두세요. 백업 파일에 접속 정보가 포함될 수 있으므로 안전하게 보관해야 합니다.
  2. 노드 하나부터 이전하세요. 대상 클라이언트가 지원하는 노드 링크나 구독을 통해 다시 가져온 뒤 생성된 설정을 확인하세요. 전체 라우팅과 DNS 설정을 먼저 덮어쓰지 마세요.
  3. 코어가 시작되는지 먼저 확인하세요. 로그에 알 수 없는 프로토콜이나 보안 유형, 지원하지 않는 flow가 표시되면 설정을 수정하거나 호환되는 코어를 선택하세요. 네트워크 지연을 반복해서 측정할 문제가 아닙니다.
  4. 그다음 라우팅을 복원하세요. 규칙에서 참조하는 아웃바운드 tag, 도메인 및 IP 데이터 파일, DNS 처리 방식을 확인하세요. 노드에 연결된다고 해서 기존 규칙이 올바르게 이전된 것은 아닙니다.

5. v2rayNG와 v2flyNG 선택 및 연결 확인

안드로이드에서 REALITY 또는 Vision 노드를 사용 중이라면 보통 v2rayNG를 선택합니다. 기존 V2Fly 설정을 사용 중이고 노드가 일반적인 호환 조합으로 정상 작동한다면 v2flyNG를 계속 사용해도 됩니다. 데스크톱의 v2rayN은 관리 화면입니다. 현재 노드가 어떤 코어를 호출하는지, 해당 코어가 매개변수를 지원하는지가 핵심입니다.

코어, 노드, DNS, 라우팅 프리셋을 한꺼번에 바꾸지 마세요. 한 번에 하나씩 변경해야 원인을 파악할 수 있습니다. 아래 숫자는 각 포트의 역할을 설명하기 위한 예시이며, 속도 측정 결과나 모든 클라이언트의 기본값을 뜻하지 않습니다. 실제 포트 값은 현재 설정을 기준으로 확인하세요.

443
이 글의 예시에서 원격 TLS 포트
10808
문제 해결용 로컬 SOCKS 포트
53
일반적인 DNS 서비스 포트

원격 443 포트에서 TCP 연결이 성립해도 해당 계층에 도달했다는 뜻일 뿐, VLESS 인증이나 TLS 또는 REALITY 핸드셰이크가 성공했다는 보장은 없습니다. 로컬 10808 포트를 다른 프로그램이 사용 중이면 코어가 시작되지 않을 수 있으며, 이는 원격 프로토콜 호환성과 무관합니다. DNS 요청도 별도의 경로를 사용합니다. 브라우저에서 도메인이 확인되더라도 코어가 사용하는 리졸버에 연결할 수 있다는 뜻은 아닙니다.

6. 자주 묻는 질문: 가져오기·시작·연결은 서로 다릅니다

V2Fly가 VLESS를 지원하는데도 REALITY 노드를 사용할 수 없는 이유는 무엇인가요?

VLESS는 프로토콜이고 REALITY는 별도의 보안 계층 기능입니다. VLESS 지원이 REALITY 지원을 뜻하지 않으며, Vision 지원까지 보장하는 것도 아닙니다. 노드의 전체 조합을 확인하고 해당 보안 계층과 flow를 처리할 수 있는 Xray를 사용하세요. REALITY 필드만 삭제해서는 안 됩니다.

Xray로 바꾸면 반드시 더 빨라지나요?

그렇지는 않습니다. 성능은 원격 서버 부하, 네트워크 경로, 패킷 손실, 전송 방식, 클라이언트 리소스 제한에도 영향을 받습니다. Vision의 처리 방식이 모든 요청의 속도를 일정하게 높여 주는 것은 아닙니다. 먼저 기능 호환성을 확보한 뒤 같은 네트워크 조건에서 실제 사용 성능을 비교하세요.

flow를 비워 두면 구형 코어와 호환되나요?

일반적인 하위 호환 방법으로 볼 수 없습니다. 서버에서 Vision을 요구하면 클라이언트의 flow를 비워 둘 때 연결이 실패할 수 있습니다. 서버에서 양쪽 모두 지원하는 설정 조합을 제공해야 합니다. 클라이언트에서 필드만 삭제한다고 호환되지 않는 서버가 자동으로 프로토콜을 바꾸지는 않습니다.

같은 구독을 안드로이드 클라이언트 두 개에서 모두 사용할 수 있나요?

구독 형식과 노드 내용에 따라 다릅니다. 구독을 읽을 수 있어도 모든 노드가 호환되는 것은 아닙니다. 일반 VMess 노드와 REALITY 노드가 같은 그룹에 들어 있을 수도 있습니다. 가져온 뒤 프로토콜, 전송 방식, 보안 매개변수를 각각 확인하고, 두 클라이언트가 동시에 VPN 연결을 제어하지 않도록 하세요.

결론: 연결 하나를 먼저 확인한 뒤 전체 설정을 복원하세요

“설정 로드 → 접속 경로 활성화 → 원격 핸드셰이크 성공 → 라우팅 결과 확인” 순서로 점검하세요. 실패한 계층을 찾으면 코어를 바꿀지, 매개변수를 수정할지, 네트워크를 살펴볼지 판단할 수 있습니다. 클라이언트를 무작정 다시 설치할 필요가 없습니다.

v2rayN 다운로드