Project V·V2Fly·Xray의 관계와 V2Ray 코어·클라이언트 비교

Project V의 시작부터 V2Fly의 유지보수와 Xray의 분기까지 살펴보고, v2rayN·v2rayNG·v2flyNG에서 사용하는 코어를 비교합니다.

핵심 내용

Project V는 프로젝트 체계의 이름이고 V2Ray는 핵심 도구입니다. V2Fly는 V2Ray 개발을 이어가는 커뮤니티이며, Xray는 V2Ray에서 분기해 발전했습니다. 클라이언트를 선택할 때는 인터페이스, 코어, 노드 프로토콜을 구분한 뒤 서버 설정과 대조하세요. 데스크톱이나 안드로이드 클라이언트를 고르는 중이거나 VLESS·REALITY 호환성 문제를 겪고 있거나 기존 구독을 옮기려는 사용자에게 적합한 안내입니다.

1. 프로젝트·코어·클라이언트·프로토콜 구분하기

‘V2Ray를 설치했다’는 말은 그래픽 클라이언트를 다운로드했다는 뜻일 수도 있고 서버 코어를 배포했다는 뜻일 수도 있습니다. 둘은 서로 다른 구성 요소입니다. 그래픽 클라이언트는 구독 가져오기, 노드 선택, 시스템 프록시 설정을 담당하고, 코어는 설정을 해석해 라우팅을 처리하고 연결을 수립합니다. 프로토콜은 통신 방식을 정의하며 독립적으로 실행하는 앱이 아닙니다.

구분이름 예시주요 역할
프로젝트 체계Project V네트워크 통신 도구를 아우르는 프로젝트 개념으로, V2Ray는 그 핵심 도구입니다.
유지보수 커뮤니티V2FlyV2Ray 코어 개발을 이어가며 관련 코드와 문서를 관리합니다.
연결 코어V2Ray、Xray-core인바운드·아웃바운드·프로토콜 핸드셰이크·DNS·라우팅 규칙을 처리합니다.
그래픽 클라이언트v2rayN、v2rayNG、v2flyNG설정을 관리하고 조작 화면을 제공하며 코어를 실행하거나 호출합니다.
프록시 프로토콜VMess、VLESS클라이언트와 서버가 인증하고 프록시 요청을 전송하는 방식을 정합니다.

따라서 클라이언트 이름에 ‘v2ray’가 들어간다고 해서 V2Ray 코어를 실행한다고 단정할 수는 없습니다. v2rayNG가 Xray 코어를 사용하는 것이 대표적인 예입니다. 호환성을 판단할 때는 앱 이름이 비슷한지가 아니라 실제 코어와 노드 설정을 확인해야 합니다.

2. Project V에서 V2Fly로: 이어진 개발 흐름은 무엇인가

Project V는 처음에 모듈형 네트워크 프록시 도구 체계로 등장했으며 V2Ray는 그 핵심 구성 요소였습니다. V2Ray는 인바운드, 아웃바운드, 전송, 라우팅, DNS 등의 기능을 함께 제공합니다. 로컬에서 앱 트래픽을 받아 처리할 수도 있고, 서버에 배포해 원격 연결을 받을 수도 있습니다. 이후 ‘V2Ray’가 프록시 구성 전반을 가리키는 말로도 널리 쓰이면서 이름이 혼용되기 시작했습니다.

원 프로젝트의 유지보수 주기가 바뀐 뒤 V2Fly 커뮤니티가 V2Ray 개발을 이어받았습니다. V2Fly는 커뮤니티 이름이며 V2Ray와 함께 설치해야 하는 별도 소프트웨어 계층이 아닙니다. ‘V2Fly 코어’는 보통 V2Fly 커뮤니티가 유지보수하는 V2Ray 코어를 뜻합니다.

  1. 오래된 안내서를 읽을 때: 글에서 V2Ray가 코어 프로그램을 뜻하는지, 프록시 설정 전체를 통칭하는지 먼저 구분하세요. 안내서에 나온 화면 메뉴는 대개 클라이언트에 속합니다.
  2. 실행 프로그램을 확인할 때: v2ray와 xray를 구분하고, 시작 로그에 표시된 코어 이름과 버전을 확인하세요.
  3. 설정을 옮길 때: 설정 형식과 코어 버전을 함께 확인하세요. JSON 파일을 해석할 수 있다고 해서 현재 코어가 모든 필드를 지원하는 것은 아닙니다.

V2Ray와 VMess는 같은 말이 아닙니다. VMess는 V2Ray가 지원하는 프로토콜 중 하나이며, 라우팅·DNS·로컬 프록시 연결도 코어의 주요 기능입니다. 반대로 노드가 VMess를 사용한다고 해서 서버가 반드시 V2Ray를 실행한다고 볼 수도 없습니다. Xray도 VMess를 처리할 수 있기 때문입니다.

3. Xray는 분기 프로젝트입니다. 모든 설정의 이름만 바꾸면 되는 것은 아닙니다

Xray는 2020년에 V2Ray에서 분기한 뒤 독립적인 코어 개발 흐름을 형성했습니다. 두 프로젝트는 기술적 기반을 공유하지만 기능, 설정 필드, 개발 주기에는 차이가 생겼습니다. VLESS, XTLS Vision, REALITY는 최신 Xray 설정에서 자주 접하는 용어입니다. 이들을 같은 계층의 세 가지 프로토콜로 보면 안 됩니다.

예를 들어 노드에서 VLESS, REALITY, xtls-rprx-vision을 명시적으로 요구한다면 이 조합을 지원하는 클라이언트와 코어가 필요합니다. ‘VLESS 지원’만 보고 연결할 수 있다고 판단해서는 안 되며, 지원되지 않는 필드를 우회하려고 노드의 보안 유형을 TLS로 바꾸어서도 안 됩니다.

4. v2rayN·v2rayNG·v2flyNG와 코어의 관계

먼저 실행 플랫폼을 정한 다음 노드 기능을 지원하는 클라이언트를 선택하세요. 아래 추천은 기존 노드에서 Xray 기능을 명시적으로 요구하는 경우를 전제로 하며, 모든 노드를 대상으로 한 일괄 순위가 아닙니다. v2rayN의 코어 선택 기능은 배포 패키지와 버전에 따라 달라질 수 있으므로 현재 설치 패키지와 시작 로그를 기준으로 확인하세요.

Xray 사용: v2rayN / v2rayNG

추천

데스크톱에서는 v2rayN이 현재 노드에 실제로 Xray를 사용하는지 확인하고, 안드로이드에서는 Xray 코어 기반의 v2rayNG를 사용하세요. REALITY나 Vision을 요구하는 노드라면 코어 지원 여부와 노드 매개변수가 모두 갖춰졌는지 확인해야 합니다.

적합한 사용자: VLESS + REALITY 노드를 보유하고 해당 Xray 기능이 필요한 경우

V2Fly 사용: v2flyNG / 데스크톱 코어 설정

안드로이드용 v2flyNG는 V2Fly가 유지보수하는 V2Ray 코어를 사용합니다. 데스크톱에서도 이 코어를 사용하려면 v2rayN의 현재 배포 패키지가 해당 구성을 지원하는지 먼저 확인하세요. 버전마다 코어 목록이 같다고 가정하지 마세요.

적합한 사용자: 기존 설정이 V2Fly를 기반으로 하고 필요한 프로토콜과 전송 방식이 지원되는지 확인한 경우

v2rayN은 데스크톱 클라이언트이며, 구독 그룹과 노드 목록, 시스템 프록시 스위치는 클라이언트 기능입니다. v2rayNG와 v2flyNG는 안드로이드 클라이언트로, 일반적으로 Android의 VpnService를 통해 기기 트래픽을 연결합니다. 시스템에 VPN 연결 표시가 나타난 것은 로컬 연결 서비스가 시작됐다는 뜻일 뿐, 원격 노드 인증에 성공했다는 의미는 아닙니다.

결론: 노드 요구 사항을 한 줄로 정리한 뒤 코어 선택하기

먼저 ‘프로토콜 + 전송 방식 + 보안 유형 + flow’를 기록하세요. 예: ‘VLESS + TCP + REALITY + xtls-rprx-vision’. 이 매개변수와 클라이언트 지원 여부를 대조하면 이름만 보고 고르거나 반복해서 재설치하는 것보다 빠르게 판단할 수 있습니다.

5. 네 단계로 실행 중인 코어와 연결 경로 확인하기

문제를 진단할 때는 인터페이스 버전, 코어 버전, 노드 매개변수를 따로 기록하세요. 클라이언트를 업데이트하면 코어가 함께 바뀔 수도 있고 인터페이스만 바뀔 수도 있습니다. 구독 업데이트는 주로 노드 설정을 변경합니다. 이 세 가지는 서로 대체할 수 없습니다. 아래에서는 로컬 SOCKS 포트 10808을 예로 들며, 실제 포트는 클라이언트 설정을 따르세요.

  1. 먼저 시작 로그를 확인하세요. 노드를 연결하고 클라이언트의 로그나 정보 창을 열어 코어 이름과 버전을 기록하세요. 설정 해석 오류가 나타나면 네트워크 문제로 단정하기 전에 필드나 코어 호환성부터 확인하세요.
  2. 다음으로 노드 편집 화면을 확인하세요. 주소, 원격 포트, UUID, 전송 방식, 보안 유형을 점검하세요. 서버 포트가 443이라고 해서 반드시 일반 TLS를 사용하는 것은 아니며, 브라우저로 바로 접속할 수 있다는 뜻도 아닙니다.
  3. 로컬 수신 주소를 확인하세요. 설정 화면에서 SOCKS 인바운드가 127.0.0.1:10808로 표시된다면 테스트 프로그램도 이 주소로 연결해야 합니다. 포트가 사용 중이면 중복 실행된 클라이언트를 종료하거나 로컬 포트를 변경한 뒤 앱 설정도 함께 수정하세요.
  4. 마지막으로 트래픽 연결을 확인하세요. 데스크톱에서는 시스템 프록시나 앱 프록시가 올바른 진입점을 가리키는지 확인하세요. 안드로이드에서는 연결 서비스가 실행 중이고 대상 앱이 앱별 규칙에서 제외되지 않았는지 확인하세요. 먼저 기본 연결을 테스트한 다음 복잡한 분할 라우팅을 추가하세요.

컴퓨터에 curl이 설치되어 있고 클라이언트가 위 SOCKS 포트에서 실제로 수신 중이라면 아래와 같이 요청을 한 번 실행할 수 있습니다. --socks5-hostname은 대상 도메인 처리를 SOCKS 프록시 쪽에 맡깁니다. 로컬에서 직접 도메인을 해석할 때 생기는 차이를 줄이는 데 도움이 되지만, 코어의 DNS 및 라우팅 처리 방식은 로그와 함께 확인해야 합니다.

curl --socks5-hostname 127.0.0.1:10808 --connect-timeout 10 --max-time 20 -I https://example.com

연결 제한 시간 10초와 전체 제한 시간 20초는 테스트 범위를 정하는 값일 뿐 네트워크 성능을 나타내지는 않습니다. 로컬 포트에 연결할 수 없다는 메시지가 나오면 클라이언트 실행 여부부터 확인하세요. 코어 로그에 원격 핸드셰이크 실패가 표시되면 노드 인증 정보와 보안 매개변수를 점검하세요. 로컬 진입점 문제와 원격 인증 문제를 혼동하지 마세요.

6. 기기 간 이전: 구독은 재사용하고 전체 설정은 그대로 옮기지 않기

구독에는 보통 노드 정보가 들어가지만 전체 설정에는 로컬 포트, DNS, 라우팅, 파일 경로, 인바운드 설정도 포함될 수 있습니다. 데스크톱에서 내보낸 전체 설정을 안드로이드 클라이언트에 그대로 가져오면 필드나 경로, 연결 방식이 달라 문제가 생길 수 있습니다. 같은 출처의 구독을 먼저 가져온 뒤 기기별 규칙을 따로 설정하는 편이 안전합니다.

이전 방법: 노드 매개변수는 공유하고 기기 설정은 따로 구성하기

데스크톱: v2rayN
  • 구독을 가져온 뒤 선택한 노드에 실제로 사용되는 코어를 확인합니다.
  • 로컬 프록시 포트를 기록해 다른 프로세스와 충돌하지 않도록 합니다.
  • 필요에 따라 시스템 프록시를 설정한 다음 라우팅 규칙을 하나씩 추가합니다.
안드로이드: v2rayNG 또는 v2flyNG
  • 이름만 보고 고르지 말고 노드 기능에 맞춰 클라이언트를 선택합니다.
  • 같은 구독을 가져온 뒤 보안 유형과 flow가 제대로 적용됐는지 확인합니다.
  • 앱별 프록시와 백그라운드 실행 권한은 별도로 설정합니다.

같은 구독을 사용해도 양쪽 화면에 결과가 완전히 똑같이 표시되지는 않을 수 있습니다. 구문 분석 기능, 필터 규칙, 업데이트 시점에 따라 결과가 달라질 수 있으므로 이전 후 각 기기에서 연결을 테스트하세요.

라우팅도 따로 확인해야 합니다. geosite:cn은 도메인 목록으로, geoip:cn은 IP 주소 목록으로 매칭하며 프로토콜 이름이 아닙니다. 두 코어가 해당 표기를 모두 인식하더라도 필요한 데이터 파일과 올바른 태그, 규칙 순서가 있어야 합니다. 코어를 바꾼 뒤 일부 사이트에만 문제가 생긴다면 모든 노드를 바로 교체하기보다 어떤 아웃바운드 규칙이 적용됐는지와 DNS 결과를 먼저 확인하세요.

7. 클라이언트 선택과 호환성 빠른 답변

v2rayN을 설치했는데 Xray 창도 따로 열어야 하나요?

대개 클라이언트가 코어 프로세스를 실행하고 관리하므로 직접 별도로 실행할 필요가 없습니다. 먼저 노드에 연결해 로그를 확인하세요. 코어 파일이 없다는 메시지가 나오면 현재 배포 패키지 안내에 따라 필요한 구성 요소를 추가하세요. 코어를 따로 실행하면 같은 로컬 포트를 차지해 오히려 클라이언트가 시작되지 않을 수 있습니다.

v2rayNG와 v2flyNG는 서로 바꿔 써도 되나요?

먼저 노드 기능을 확인하세요. 두 앱이 모두 지원하는 프로토콜과 전송 방식만 사용한다면 각각 가져와 테스트할 수 있습니다. 노드가 REALITY나 특정 flow에 의존한다면 V2Fly 기반 앱도 같은 방식으로 구현한다고 가정하지 마세요. 이전하기 전에 기존 설정을 보관하고 노드 하나로 먼저 검증한 뒤 나머지 설정을 옮기세요.

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

그렇게 판단할 수 없습니다. 같은 노드와 네트워크, 테스트 대상을 고정한 뒤 연결 성공률과 전송 성능을 비교하세요. 서버 회선, 전송 설정, 라우팅 결과에 따라 성능이 달라질 수 있으며 코어 이름만으로 속도를 보장할 수는 없습니다.

구독 업데이트에 성공했는데 프로토콜을 지원하지 않는다고 나오는 이유는 무엇인가요?

구독 다운로드와 코어 실행은 별개의 단계입니다. 연결되지 않는 노드의 편집 화면에서 프로토콜, 보안 유형, flow를 확인한 다음 시작 로그에 지원되지 않는 필드가 있는지 살펴보세요. 클라이언트가 해당 매개변수를 인식하지 못한다면 구독 업데이트를 반복할 것이 아니라 호환되는 클라이언트와 코어를 업데이트해야 합니다.

기존 VMess 노드를 반드시 VLESS로 옮겨야 하나요?

이름이 바뀌었다는 이유만으로 옮길 필요는 없습니다. 먼저 기존 노드가 필요한 기능을 제공하는지 확인하세요. 프로토콜을 바꾸려면 서버도 해당 설정을 제공해야 합니다. 클라이언트에서 VMess를 VLESS로 바꾸는 것만으로 변환되지는 않습니다. 서비스 제공자가 제공한 새 노드 매개변수를 가져와 별도로 연결을 확인하세요.

선택 순서는 플랫폼 확인, 노드 요구 사항 정리, 실제 코어 확인, 로컬 진입점과 라우팅 점검으로 정하면 됩니다. 구체적인 설정 절차는 클라이언트 설치 및 연결 안내를, DNS와 분할 라우팅 규칙을 정리하려면 고급 설정을 참고하세요. 먼저 작동하는 최소 설정을 만든 다음 기능을 추가하면 문제를 더 쉽게 찾을 수 있습니다.

v2rayN 다운로드