2026-09-08 · 코어 선택 · 약 9분

Xray 코어와 V2Fly 코어 비교: v2rayNG와 v2flyNG 선택 가이드

Project V, V2Fly, Xray의 관계를 살펴보고 두 코어의 프로토콜 지원과 설정 차이를 비교해 Android 클라이언트 선택 기준을 안내합니다.

핵심 내용

Android에서는 먼저 노드 매개변수에 맞는 코어를 고른 뒤 설정 출처에 따라 클라이언트를 선택하세요. VLESS, REALITY, Vision 조합이 필요하다면 v2rayNG에 포함된 Xray가 지원하는지 먼저 확인하는 것이 좋습니다. V2Fly 문서에 맞춰 관리해 온 설정이 있다면 v2flyNG를 선택할 수 있습니다. 이 글에서는 클라이언트, 코어, 구독을 구분하고 필드 확인, 설정 예시, 전환 후 검증 절차를 안내합니다. 가져오기에 성공했다고 연결 호환성까지 보장되는 것은 아닙니다.

Project V, V2Fly, Xray의 관계

Project V는 네트워크 프록시 도구를 중심으로 한 프로젝트 체계이며, V2Ray는 그 핵심 소프트웨어입니다. V2Fly는 V2Ray의 커뮤니티 개발을 이어가고 있습니다. Xray는 V2Ray에서 분기해 발전한 뒤 자체 프로토콜 확장과 구현 방향을 갖추었습니다. 두 코어는 설정의 역사를 공유하지만, 이름만 바꾼 동일한 프로그램은 아닙니다. 설정 파일 이름이 모두 config.json이라고 해서 서로 바꿔 쓸 수 있는 것도 아닙니다.

클라이언트는 인터페이스, 구독 관리, 시스템 네트워크 트래픽 처리 등을 담당하고, 코어는 설정을 해석하고 연결을 수립하며 라우팅을 수행합니다. Android용 v2rayNG에는 Xray가, v2flyNG에는 V2Fly가 포함되어 있습니다. 데스크톱용 v2rayN은 실제 버전, 노드 유형, 코어 설정을 함께 확인해야 합니다. 데스크톱에서 코어를 선택하는 방식이 두 Android 클라이언트에도 그대로 적용되는 것은 아닙니다.

구분대상주요 역할
프로젝트 및 구현V2Fly、Xray프로토콜 구현, 설정 해석, 연결 처리 로직을 관리합니다.
Android 클라이언트v2rayNG、v2flyNG노드와 구독을 관리하고 Android VPN 권한을 요청한 뒤 포함된 코어를 실행합니다.
데스크톱 클라이언트v2rayN데스크톱 프록시 연결, 노드, 코어 실행 설정을 관리합니다.
연결 설정VMess, VLESS, 전송 및 TLS 매개변수클라이언트와 서버 간 연결 협상 방식을 지정하므로 실제 코어의 지원 범위에 맞춰 작성해야 합니다.

두 개발 계열의 버전 번호도 서로 단순 비교할 수 없습니다. 앱 버전과 코어 버전을 따로 기록하세요. 앱을 업데이트해도 인터페이스만 바뀌고 코어 계열은 그대로일 수 있으며, 노드 연결 오류는 포함된 코어가 특정 필드를 지원하는지와 관련될 수 있습니다. 문제를 확인할 때는 “최신 버전을 설치했다”는 말보다 두 버전 정보를 모두 기록하는 편이 유용합니다.

프로토콜 지원: 연결 조합 전체를 기준으로 판단

VMess와 VLESS는 프록시 프로토콜이고, WebSocket과 gRPC 등은 전송 계층 옵션입니다. TLS와 REALITY는 연결 보안 설정과 관련됩니다. 코어를 선택할 때는 이 계층을 모두 확인해야 합니다. vless:// 링크만 보고 VLESS를 지원하는 모든 구현이 같은 서버에 연결된다고 단정할 수는 없습니다.

Xray 코어 / v2rayNG

권장

VLESS, REALITY, Vision을 명시적으로 요구하는 노드라면 이 조합을 우선 고려하고, 클라이언트에 포함된 Xray가 서버 요구사항을 충족하는지 확인하세요. 프로토콜 조합이 맞는다는 뜻이지, 모든 네트워크에서 더 빠르다는 의미는 아닙니다.

추천 대상: 노드 안내에 Xray가 지정되어 있거나 VLESS + REALITY + Vision을 사용하는 경우.

V2Fly 코어 / v2flyNG

V2Fly 문서에 맞춰 작성했고 사용 검증까지 마친 설정을 계속 사용할 때 적합합니다. 일반적인 VMess 및 WebSocket/TLS 설정도 전송 방식, 경로, 인증서 매개변수를 하나씩 맞춰야 합니다.

추천 대상: 기존 설정이 V2Fly 기준이고 Xray 전용 기능에 의존하지 않는 경우.

노드 설명주요 확인 항목선택 기준
VMess + WebSocket + TLS사용자 ID, 서버 포트, 경로, Host, TLS 서버 이름두 계열 모두 해당 구현을 제공하지만, 실제 버전과 설정으로 검증해야 합니다.
VLESS + REALITY + Visionflow, security, 서버 이름, 키 관련 매개변수, 짧은 IDv2rayNG / Xray를 우선 선택하세요. V2Fly로 바로 옮길 수 있는 범용 설정으로 간주해서는 안 됩니다.
전체 사용자 지정 JSON설정 형식, 프로토콜 필드, 전송 필드, 리소스 파일 경로파일 확장자가 아니라 설정을 생성한 대상 코어를 기준으로 선택하세요.

결론: 먼저 서버와 호환되는지 확인한 뒤 사용성을 비교하세요

먼저 “프로토콜 + 전송 + 보안 계층 + flow” 네 가지를 기록하세요. 하나라도 대상 코어의 지원 범위를 벗어나면 지연 시간을 재기 전에 호환성부터 해결해야 합니다.

config.json: 유사한 구조와 마이그레이션 한계

일반적인 설정에는 inbounds, outbounds, routing이 포함됩니다. 인바운드는 로컬 앱의 트래픽을 받고, 아웃바운드는 대상에 연결하는 방식을 정하며, 라우팅은 사용할 아웃바운드를 선택합니다. 아래는 두 코어에서 흔히 쓰이는 기존 JSON 구조를 사용한 로컬 SOCKS 직접 연결 예시입니다. 필드를 이해하기 위한 예시이며 원격 프록시 노드는 포함하지 않고 암호화된 프록시 연결도 생성하지 않습니다.

{
  "log": {
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "tag": "local-socks",
      "listen": "127.0.0.1",
      "port": 10808,
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "block",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "rules": [
      {
        "type": "field",
        "ip": ["127.0.0.0/8"],
        "outboundTag": "direct"
      }
    ]
  }
}

여기서 listen은 로컬에서 연결을 수신할 범위를 제한하고, tag는 설정 내부에서 참조하는 이름입니다. outboundTag는 아웃바운드 태그와 일치해야 합니다. 예시에서는 직접 연결 아웃바운드를 첫 번째 항목에 두었으므로 어떤 규칙에도 해당하지 않는 트래픽도 직접 연결됩니다. 마이그레이션할 때 참조된 아웃바운드는 복사하지 않고 라우팅만 옮기면 설정 로드에 실패할 수 있습니다. 누락된 노드가 자동으로 채워지지는 않습니다.

구독 가져오기와 Android VPN 트래픽 처리

구독은 노드 정보를 배포하는 방식이지 코어 프로토콜이 아닙니다. 같은 구독 주소를 두 클라이언트에 추가할 수 있어도 양쪽에서 모든 노드 필드를 인식한다는 뜻은 아닙니다. 변환 과정에서 전송 매개변수가 누락될 수도 있습니다. 가져온 노드 수는 같지만 연결되지 않는다면 구독을 반복해서 업데이트하기보다 노드 편집 정보를 열어 원래 연결 매개변수와 비교하세요.

전환 방법: 구독과 네트워크 규칙을 따로 검증

기존 클라이언트 유지
  • 앱 버전과 코어 버전을 기록합니다.
  • 노드 매개변수와 구독 주소를 백업합니다.
  • 앱별 목록, DNS, 라우팅 모드를 기록합니다.
  • 사용이 검증된 설정 하나를 보관합니다.
대상 클라이언트 검증
  • 노드 하나만 먼저 가져와 필드를 하나씩 확인합니다.
  • 기존 클라이언트를 중지한 뒤 VPN 서비스를 시작합니다.
  • 먼저 연결을 확인한 다음 앱별 설정과 분할 라우팅 규칙을 복원합니다.
  • 구독을 업데이트한 뒤 주요 매개변수를 다시 확인합니다.

같은 구독은 노드 배포만 해결합니다. 앱별 목록, DNS, 라우팅이 자동으로 동일하게 유지되지는 않습니다.

Android VPN 트래픽 처리와 프록시 코어는 서로 다른 계층입니다. 클라이언트는 시스템 VPN 인터페이스로 트래픽을 받은 뒤 내부 처리 경로로 전달합니다. 그렇다고 원격 노드가 기존 VPN 프로토콜을 사용한다는 뜻은 아닙니다. 같은 사용자 또는 프로필에서는 일반적으로 활성 VPN 서비스를 하나만 사용할 수 있습니다. v2rayNG와 v2flyNG를 전환할 때는 먼저 기존 앱을 중지한 다음 새 앱에 권한을 부여하고 실행하세요. 시스템이 기존 서비스를 종료한 일을 연결이 무작위로 끊긴 것으로 오해하지 않도록 하기 위한 절차입니다.

  1. 처음 실행할 때 시스템 VPN 권한을 확인하고, 이후 클라이언트에 시작 오류가 표시되는지 살펴보세요.
  2. 특정 앱을 제외하려면 클라이언트의 앱별 프록시 설정을 확인하고 목록이 포함 방식인지 제외 방식인지 점검하세요.
  3. 화면을 닫은 뒤 연결이 끊긴다면 Android의 백그라운드 실행 제한과 배터리 최적화 설정을 확인하세요. 서버 프로토콜부터 변경하지 마세요.
  4. 테스트 중에는 VPN 인터페이스를 사용하는 다른 도구를 일시 중지해 트래픽 처리 충돌을 줄이세요.

연결 실패: 포트, 핸드셰이크, DNS 순서로 확인

코어 선택만으로 네트워크 문제를 해결할 수는 없습니다. 연결 시간 초과는 서버 포트에 접근할 수 없어서 발생할 수 있고, TLS 오류는 서버 이름이나 기기 시간과 관련될 수 있습니다. 웹페이지가 열리지 않는다면 DNS 경로가 예상과 다를 수도 있습니다. 아래 세 숫자는 점검 기준일 뿐, 클라이언트 기본값이나 성능 테스트 결과를 뜻하지 않습니다.

10808
이 글의 예시에 사용한 로컬 SOCKS 수신 포트
443
일반적인 TLS 서버 포트. 실제 포트는 노드 설정을 따릅니다.
1
원인을 쉽게 찾을 수 있도록 한 번에 변수 하나만 변경합니다.
증상우선 확인할 항목다음 단계
시작 직후 실패알 수 없는 필드, 설정 형식, 포트 충돌처음으로 표시되는 명확한 오류를 확인하고 코어 버전과 필드 출처를 점검합니다.
원격 서버 연결 시간 초과주소, 포트, 현재 네트워크, 서버의 포트 수신 상태노드는 그대로 두고 네트워크를 바꿔가며 각각 검증하세요. DNS와 프로토콜을 동시에 바꾸지 마세요.
TLS 또는 인증 실패기기 시간, 서버 이름, 사용자 ID, 보안 계층, 키 매개변수서버 설정과 항목별로 대조하세요. 인증서 검증을 끄는 것을 해결책으로 삼지 마세요.
일부 도메인만 연결 실패DNS 확인 경로, IPv6 연결 가능 여부, 라우팅 규칙 순서테스트 도메인을 고정하고 DNS 응답과 선택된 아웃바운드를 확인합니다.
특정 앱에서만 실패앱별 목록, UDP 필요 여부, 앱 자체의 네트워크 동작먼저 해당 앱이 프록시 트래픽 처리 대상에 포함되는지 확인합니다.

성능을 비교할 때도 조건을 통제하세요. 같은 네트워크, 서버, 시간대, 테스트 대상을 사용하고 연결 성공률, 지연 시간, 지속 전송 성능을 각각 기록합니다. 한 번의 지연 시간 측정으로 어느 코어가 배터리를 덜 쓰거나 처리량이 더 높은지 증명할 수는 없습니다. 모바일 네트워크 전환, 기기 온도, 백그라운드 작업도 결과에 영향을 줍니다. 진단 로그를 공유하기 전에는 구독 주소, 사용자 식별 정보, 키 등 연결 정보를 삭제하세요.

v2rayNG와 v2flyNG, 어떤 것을 선택할까

서버에서 Xray 전용 연결 조합을 명확히 제공한다면 v2rayNG를 선택하는 편이 간단합니다. 오랫동안 사용해 온 V2Fly 설정이 있고 새로운 프로토콜 요구사항이 없다면 v2flyNG로 마이그레이션 변수를 줄일 수 있습니다. 어느 쪽이든 실제 연결과 필드 호환성을 기준으로 판단하세요. 코어 이름만 바꾸려고 검증된 설정을 옮길 필요는 없습니다.

진행 순서: 노드 하나, 규칙 한 세트, 한 번의 전환

대상 클라이언트에서 노드 하나를 먼저 검증한 뒤 구독과 분할 라우팅 규칙을 추가하세요. 실제 접속 테스트가 끝날 때까지 기존 설정을 보관해 두면 문제가 생겼을 때 빠르게 복구하고 차이를 찾을 수 있습니다.

클라이언트 다운로드