Xray와 V2Fly 코어 차이: 계보·프로토콜 지원·클라이언트 선택

Xray와 V2Fly 코어의 차이와 VLESS·REALITY 지원 여부를 비교하고, v2rayNG와 v2flyNG 중 어떤 클라이언트를 선택할지 알아봅니다.

핵심 내용

코어를 고를 때는 클라이언트 이름보다 노드 설정을 먼저 확인하세요. VLESS + REALITY 또는 XTLS Vision을 사용한다면 해당 기능을 지원하는 Xray 구성을 우선 선택하는 것이 좋습니다. 기존 V2Fly 설정으로 연결에 문제가 없다면 이름만 바꾸려고 옮길 필요는 없습니다. 이 글에서는 클라이언트, 코어, 프로토콜, 전송 방식을 구분해 설명하고, 데스크톱과 안드로이드에서 선택하는 방법과 설정 확인 항목, 문제 해결 순서를 안내합니다.

계보: Xray와 V2Fly는 무엇이 다른가

Project V는 네트워크 통신 도구와 관련 규격으로 이루어진 프로젝트 생태계이며, V2Ray는 그중 핵심 프로젝트입니다. V2Fly 커뮤니티는 v2ray-core를 계속 유지 관리하고 있습니다. Xray-core는 2020년 v2ray-core에서 분기한 뒤 자체적인 프로토콜 및 전송 구현 방향으로 발전했습니다. 두 코어는 코드의 공통된 역사를 공유하지만, 같은 프로그램의 테마만 다른 것이 아니며 버전 번호를 그대로 비교할 수도 없습니다.

코어는 연결을 맺고 프로토콜을 처리하며 라우팅과 DNS 규칙을 적용합니다. 클라이언트는 노드를 표시하고 구독을 저장하며 설정 화면을 제공한 뒤, 코어가 실행할 설정을 전달합니다. 따라서 화면에 특정 항목이 표시된다고 해서 실제로 실행 중인 코어가 이를 지원한다고 단정할 수 없습니다. 반대로 코어에 기능이 있어도 클라이언트가 해당 설정을 올바르게 생성해야 사용할 수 있습니다.

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

VMess, VLESS, Trojan, Shadowsocks는 프록시 프로토콜 계층에 속하고, TCP, WebSocket, gRPC는 전송 방식입니다. TLS와 REALITY는 연결의 보안 계층 및 핸드셰이크와 관련이 있습니다. XTLS Vision은 Xray에서 특정 조합과 함께 사용하는 흐름 제어 방식입니다. 이 용어들을 모두 하나의 ‘프로토콜 이름’으로 뭉뚱그리면 코어를 바꿀 때 실제 호환성 조건을 놓치기 쉽습니다.

설정 또는 기능XrayV2Fly선택 전 확인 사항
VMess지원지원인증 정보, 전송 방식, TLS 설정이 서로 맞아야 합니다.
기본 VLESS지원기본 구현 지원이것만으로 Xray의 모든 확장 기능을 지원한다고 볼 수 없습니다.
VLESS + REALITY지원Xray의 REALITY 설정은 지원하지 않습니다.서비스 이름, 공개 키, 짧은 ID 및 클라이언트 관련 설정
XTLS Vision해당 조합 지원Xray의 Vision 흐름 제어는 지원하지 않습니다.노드에서 요구하는 flow 값과 전송 방식 조합
Trojan、Shadowsocks지원지원구체적인 방식, 확장 기능, 전송 지원 여부는 항목별로 확인해야 합니다.

기본 VLESS에는 콘텐츠 암호화가 포함되지 않으므로, 배포 환경에 적합한 보안 전송을 적용해야 합니다. VLESS + TLS와 VLESS + REALITY는 서로 바꿔 쓸 수 있는 설정 조합이 아닙니다. 서버가 REALITY를 사용한다면 클라이언트의 보안 옵션을 TLS로 바꾸는 것만으로는 보통 핸드셰이크가 실패하며, 호환되는 연결이 자동으로 이루어지지 않습니다.

클라이언트 선택: 현재 사용하는 노드에 맞춰 코어 고르기

노드 조건과 무관하게 ‘가장 빠른 코어’가 정해져 있는 것은 아닙니다. 같은 회선이라도 혼잡도, 서버 부하, 전송 설정, 로컬 네트워크에 따라 연결 성능이 달라집니다. 두 코어의 이름만으로 속도를 단정하거나, REALITY가 모든 네트워크에서 연결을 보장한다고 생각해서는 안 됩니다.

Xray 코어 구성

추천

이 글에서는 REALITY 또는 Vision이 필요한 설정에 Xray 구성을 권장합니다. 안드로이드에서는 v2rayNG를 사용하고, 데스크톱에서 v2rayN을 사용할 때는 해당 노드가 실제로 Xray에서 처리되는지 확인하세요. 추천 이유는 기능 호환성이며, 검증되지 않은 속도 차이에 근거한 것이 아닙니다.

적합한 사용자: 서버에서 VLESS + REALITY 또는 XTLS Vision을 명시적으로 요구하는 경우

V2Fly 코어 구성

사용 가능한 V2Fly 설정과 규칙 파일, 유지 관리 절차가 이미 있다면 계속 사용해도 됩니다. 안드로이드에서는 v2flyNG를 사용합니다. 옮기기 전에 클라이언트 이름이 다르다는 이유만으로 설정을 새로 만들지 말고, 대상 코어에만 있는 기능이 실제로 필요한지 먼저 확인하세요.

적합한 사용자: 현재 노드가 V2Fly와 호환되고 기존 설정 절차를 유지하려는 경우

구독에 VMess, Trojan, VLESS + REALITY가 함께 있다면 전체 구독을 ‘범용’으로 분류하지 말고 노드별로 판단하세요. 클라이언트에서 목록을 성공적으로 가져왔다는 것은 구독의 일부 또는 전체 내용을 읽었다는 뜻일 뿐, 모든 노드의 연결 테스트가 끝났다는 뜻은 아닙니다.

가져오기부터 코어 변경까지: 설정을 확인한 뒤 연결 테스트

코어를 변경하기 전에 구독 주소와 직접 추가한 설정을 백업하고, 현재 연결되는 노드의 프로토콜, 전송 방식, 보안 옵션, 로컬 수신 포트를 기록하세요. 전체 JSON 설정을 다른 코어에 그대로 복사하지 마세요. 코드의 공통된 역사가 설정 형식의 일관성을 보장하지는 않으므로 DNS, 라우팅, 전송 관련 항목을 특히 주의 깊게 확인해야 합니다.

  1. 구독 메뉴를 확인합니다. v2rayN에서는 보통 ‘구독 그룹’ → ‘구독 그룹 설정’, v2rayNG에서는 오른쪽 위 메뉴의 ‘구독 그룹 설정’에서 찾을 수 있습니다. 화면 버전에 따라 메뉴 이름이 다를 수 있으므로 현재 설치된 버전을 기준으로 확인하세요. 구독 주소는 그룹 URL 입력란에 넣어야 하며, 개별 노드의 서버 주소란에 입력하면 안 됩니다.
  2. 노드 세부 정보를 확인합니다. 서버 주소, 포트, 사용자 ID, 전송 유형, 보안 유형, 서비스 이름을 확인하세요. REALITY 노드는 서버에서 요구하는 공개 키, 짧은 ID, 지문 등의 설정도 확인해야 합니다. 주소와 사용자 ID만 복사하는 데 그치지 마세요.
  3. 실행 중인 코어를 확인합니다. 데스크톱에서는 시작 로그의 코어 이름과 시작 오류를 확인하세요. 안드로이드에서는 먼저 설치된 앱이 v2rayNG인지 v2flyNG인지 확인해야 합니다. 구독 그룹을 바꾸는 것은 코어를 바꾸는 것과 다릅니다.
  4. 노드 하나로 검증합니다. 필수 항목이 모두 설정된 노드 하나를 선택해 연결하고 로그를 확인한 다음, 실제로 접속하려는 웹사이트를 열어 보세요. 지연 시간 테스트 성공은 특정 테스트 요청이 성공했다는 뜻일 뿐, 모든 앱에서 프록시가 사용된다는 뜻은 아닙니다.
  5. 마지막으로 규칙을 복원합니다. 기본 연결이 확인된 뒤 DNS, 라우팅, 앱별 설정을 옮기세요. 한 번에 한 계층씩 변경하고, 문제가 생기면 되돌릴 수 있도록 설정을 보관하세요.

두 기기 설정: 같은 구독을 사용하고 각각 검증

데스크톱: v2rayN
  • 신뢰할 수 있는 구독을 가져온 뒤 노드 설정이 모두 있는지 확인합니다.
  • REALITY 노드가 호환되는 Xray 코어에서 실행되는지 확인합니다.
  • 연결이 확인된 뒤 시스템 프록시와 라우팅을 설정합니다.
안드로이드: v2rayNG 또는 v2flyNG
  • 프로토콜 요구 사항에 맞는 클라이언트를 선택합니다.
  • 같은 구독을 가져온 뒤 각 기기에서 따로 업데이트하고 테스트합니다.
  • VPN 연결 요청을 허용한 뒤 앱별 프록시 적용 범위를 확인합니다.

같은 구독을 사용해도 두 기기의 설정이 자동으로 동기화되는 것은 아닙니다. 노드 목록은 구독 내용과 업데이트 시점에 따라 달라지며, 로컬 라우팅과 앱별 설정은 각각 관리해야 합니다.

포트와 프록시 연결: 코어가 작동해도 앱이 연결된 것은 아닙니다

서버 포트와 로컬 수신 포트는 서로 다른 용도로 사용됩니다. 아래에서는 위치를 설명하기 위해 443과 10808을 예로 들며, 이는 공통 기본값이나 실제 측정 결과가 아닙니다. 서버 포트는 노드 제공자가 안내한 값으로, 로컬 포트는 클라이언트에 현재 설정된 값으로 입력하세요.

443
원격 연결 포트 예시: 서버가 수신하는 포트와 일치해야 합니다.
10808
로컬 프록시 포트 예시: 클라이언트가 실제로 수신 중인 포트를 기준으로 합니다.

예를 들어 앱이 127.0.0.1:10808에 연결하도록 설정되어 있지만 클라이언트가 다른 포트에서 수신 중이라면, 원격 노드가 정상이어도 앱 연결은 실패합니다. 해당 포트가 SOCKS 서비스만 제공하는 경우 앱에서 HTTP 프록시 포트로 사용할 수도 없습니다. 혼합 수신을 지원하는 설정이라면 클라이언트 화면에 표시된 값을 기준으로 확인하세요.

자주 묻는 질문: 가져오기 성공, 핸드셰이크 실패, 코어 변경

v2flyNG에서 VLESS 노드를 가져왔는데 연결되지 않는 이유는 무엇인가요?

먼저 노드 편집 화면에서 보안 유형과 flow를 확인하세요. 기본 VLESS와 VLESS + REALITY는 필요한 기능이 다릅니다. 노드에서 REALITY 또는 Vision을 요구한다면 해당 기능을 지원하는 v2rayNG로 바꾸고 설정 항목을 다시 확인하세요. 보안 옵션만 다른 값으로 변경해서는 해결되지 않습니다.

Xray로 바꾸면 기존 JSON 설정을 그대로 사용할 수 있나요?

항상 가능한 것은 아닙니다. 원본 파일을 보관하고 클라이언트에서 노드 하나의 공유 링크를 다시 가져와 최소 설정으로 검증하세요. 전체 JSON을 옮겨야 한다면 현재 코어의 설정 형식에 맞는지 항목별로 확인해야 합니다. 알 수 없는 항목이나 파싱 오류가 나타나면 로그를 살펴보세요. 여러 항목을 연달아 삭제하며 해결되기를 바라지 마세요.

REALITY 핸드셰이크가 실패하면 코어가 너무 오래된 건가요?

버전 지원 여부는 여러 확인 항목 중 하나입니다. 기기 시간, 서버 주소와 포트, 공개 키, 짧은 ID, 서비스 이름, 지문, flow 순서로 확인하세요. 설정이 일치하는지 확인한 다음 신뢰할 수 있는 설치 경로에서 클라이언트를 업데이트하세요. 화면 프로그램만 업데이트하고 이전 코어를 계속 실행하면 문제가 해결되지 않을 수도 있습니다.

노드 테스트는 통과했는데 브라우저가 열리지 않으면 무엇부터 바꿔야 하나요?

먼저 시스템 프록시 또는 안드로이드 VPN이 브라우저 트래픽을 처리하는지 확인한 뒤 로컬 포트와 라우팅을 점검하세요. 로그에 도메인 이름 확인 실패가 표시되면 DNS를 따로 확인합니다. 코어, DNS, 라우팅을 동시에 바꾸면 어떤 설정이 결과에 영향을 줬는지 파악하기 어렵습니다.

최종 선택은 다음 순서로 정리할 수 있습니다. 노드의 전체 설정을 확인하고, 필요한 코어 기능을 판단한 뒤, 클라이언트를 선택하고, 마지막으로 프록시 연결과 라우팅을 검증하세요. 안정적으로 작동하는 VMess 등 호환 설정은 이름을 바꾸려고 전체 환경을 옮길 필요가 없습니다. REALITY 또는 Vision이 필요하다면 ‘가져오기 성공’만으로 호환성을 판단하지 말고, 이에 맞는 Xray 구성을 사용하세요.

v2rayN 다운로드운영체제와 설치 형식을 선택하세요