Project V 오픈소스 생태계 정리: V2Fly·Xray와 그래픽 클라이언트 3종 비교

Project V의 시작부터 V2Fly 커뮤니티의 유지보수와 Xray의 분기까지 살펴보고, 두 코어의 기능·설정 호환성과 v2rayN·v2rayNG·v2flyNG의 코어 선택 기준을 정리합니다.

핵심 내용 미리보기

Project V는 프로젝트 생태계, V2Fly와 Xray는 각기 다른 코어 유지보수 흐름이며, v2rayN·v2rayNG·v2flyNG는 설정을 관리하고 코어를 실행하는 그래픽 클라이언트입니다. 클라이언트를 고를 때는 노드가 요구하는 프로토콜·전송 방식·보안 기능을 확인한 다음, 실제로 사용하는 코어를 살펴보세요. 여러 기기에서 구독을 사용하거나 기존 설정을 옮기려는 분, V2Ray와 Xray의 차이가 궁금한 분에게 유용한 안내입니다.

1. Project V·V2Ray·V2Fly: 이름이 가리키는 범위부터 구분하기

Project V는 처음에 V2Ray를 중심으로 발전했으며, 프록시 통신을 조합 가능한 모듈로 나누는 것을 목표로 했습니다. 인바운드는 연결을 받고, 라우팅은 연결 경로를 결정하며, 아웃바운드는 원격 서버와 연결합니다. VMess는 이 생태계에서 사용하는 여러 프록시 프로토콜 중 하나이지, 프로젝트 전체를 가리키는 이름이 아닙니다. “V2Ray를 설치했으니 VMess만 쓸 수 있다”고 생각하면 이후의 프로토콜 선택 폭을 좁게 보게 됩니다.

원 프로젝트의 유지보수 상황이 바뀐 뒤 V2Fly 커뮤니티가 V2Ray 코어와 관련 문서의 유지보수를 이어받았습니다. 현재 V2Fly는 대체로 커뮤니티와 그 유지보수 흐름을, V2Ray Core는 실제로 실행되는 프록시 코어를 가리킵니다. 둘은 순서대로 설치해야 하는 그래픽 프로그램이 아니며, V2Fly를 구독 서비스 제공자로 이해해서도 안 됩니다.

Project V: 생태계와 프로젝트의 흐름
프로젝트의 시작, 모듈 설계, 주변 도구를 이야기할 때 쓰는 이름입니다. 독립된 노드 프로토콜은 아닙니다.
V2Ray Core: 설정을 실행하는 코어
인바운드, 아웃바운드, DNS, 라우팅을 처리합니다. V2Fly 커뮤니티가 유지보수하는 코어도 이 이름을 이어서 사용합니다.
Xray Core: 독립적으로 발전한 포크
V2Ray를 바탕으로 시작했지만 이후 독자적인 릴리스 주기와 기능 방향으로 발전했습니다. 설정 구조의 공통점은 있지만 모든 필드가 호환된다고 단정할 수는 없습니다.
그래픽 클라이언트: 설정과 실행을 관리하는 도구
노드, 구독, 시스템 프록시, 로그를 관리하고 사용자가 선택한 설정을 코어에 전달합니다. 화면에 특정 옵션이 표시되더라도 현재 코어가 해당 기능을 지원한다는 뜻은 아닙니다.

따라서 문제를 진단할 때는 클라이언트, 실행 코어, 연결 프로토콜 조합을 함께 확인하는 것이 좋습니다. “V2Ray가 연결되지 않는다”는 정보만으로는 구독 가져오기, 설정 생성, 원격 핸드셰이크 중 어디에서 문제가 생겼는지 판단하기 어렵습니다.

2. V2Fly와 Xray: 기반이 같아도 양방향 호환을 뜻하지 않습니다

Xray는 2020년 말 V2Ray 코드 기반에서 분기한 뒤 독자적으로 발전했습니다. 두 프로젝트 모두 프록시, 라우팅, DNS 등 기본 기능을 갖추고 여러 일반적인 연결 방식을 처리할 수 있습니다. 차이는 단순히 “하나는 최신이고 다른 하나는 구식”이라는 데 있지 않습니다. 실제 호환 여부는 버전별 프로토콜, 전송 방식, 설정 형식, 보안 기능을 확인해야 합니다.

비교 항목V2Fly 계열Xray 계열
일반적인 사용 기반VMess, SOCKS, HTTP 등을 지원하며, 구체적인 조합은 버전별 문서를 확인해야 합니다.일반적인 프록시 기능을 제공하며, 프로토콜과 전송 구현을 독자적으로 확장합니다.
VLESS 호환 여부 확인이름만으로 호환성을 판단할 수 없습니다. 구체적인 버전과 전체 설정을 확인해야 합니다.VLESS 노드에서 흔히 사용하지만 flow, 전송 방식, 보안 계층도 확인해야 합니다.
REALITY와 VisionXray 전용 설정을 V2Fly에서 그대로 사용할 수는 없습니다.VLESS + REALITY, XTLS Vision을 구현하는 일반적인 방식이며 코어 버전의 지원 여부를 확인해야 합니다.
설정 마이그레이션기존 설정 형식이 해당 버전에서 지원되는지 확인해야 합니다.전용 필드, 폐기 예정 항목, 전송 이름을 점검해야 합니다. 실행 파일만 바꾸는 것으로는 충분하지 않습니다.

VLESS + REALITY를 예로 들면 VLESS는 프록시 프로토콜이고, REALITY는 연결에 적용하는 보안 방식입니다. 설정에는 TCP 전송과 xtls-rprx-vision flow가 지정될 수도 있습니다. 세 이름은 서로 대체할 수 있는 개념이 아닙니다. 프로토콜만 VLESS로 바꾸고 서버 이름, 공개 키 매개변수, flow를 빠뜨리면 기존 노드와 같은 연결을 만들 수 없습니다.

선택 기준: 노드 요구사항을 완전한 조합으로 정리하기

먼저 “프로토콜 + 전송 방식 + 보안 기능 + flow”를 기록한 뒤 해당 조합을 지원하는 코어를 선택하세요. REALITY가 명시된 노드라면 Xray 버전을 우선 확인하세요. 기존 VMess + WebSocket + TLS 설정은 먼저 호환 여부를 살펴보면 됩니다. 이름이 바뀌었다는 이유만으로 마이그레이션할 필요는 없습니다.

3. 그래픽 클라이언트 3종: 데스크톱과 Android에서 각각 선택하기

v2rayN, v2rayNG, v2flyNG는 서로 다른 프로젝트입니다. 같은 프로그램에 플랫폼 이름만 붙인 것이 아닙니다. 이름이 비슷하다는 이유로 기능까지 같다고 볼 수는 없습니다. 특히 v2rayN은 인터페이스 버전과 사용 가능한 코어, 설치 패키지 구성이 함께 바뀔 수 있으므로 최신 클라이언트 안내와 실제 시작 로그를 확인하세요.

v2rayN: 데스크톱 설정 관리 클라이언트

추천

데스크톱에서 구독, 노드, 라우팅, 시스템 프록시를 관리할 때 적합합니다. 지원하는 운영체제와 코어 옵션은 배포 버전에 따라 다를 수 있으므로 특정 버전의 메뉴 화면을 모든 버전의 기능 목록으로 간주하지 마세요.

추천 대상: 설정을 한곳에서 관리하고 코어 로그를 확인하려는 데스크톱 사용자

v2rayNG: Android용 Xray 계열

Android 시스템 VPN 인터페이스를 통해 기기의 트래픽을 처리하며, 일반적으로 Xray 계열 코어를 사용합니다. 최신 매개변수 지원 여부는 클라이언트에 포함된 코어 버전과 공유 링크 해석 기능에 따라 달라집니다.

추천 대상: VLESS, REALITY 등 Xray 기능을 사용하는 노드에 연결하려는 Android 사용자

v2flyNG: Android용 V2Fly 계열

V2Fly 코어를 사용하는 방식으로, V2Ray Core 설정이 필요한 환경에 적합합니다. 구독을 가져올 수 있다는 이유만으로 Xray 전용 매개변수까지 인식하고 실행한다고 단정하지 마세요.

추천 대상: 기존 설정이 V2Fly 코어와 호환되는지 확인된 Android 사용자

위 추천은 데스크톱 설정 관리 용도이며, 플랫폼 간 성능 순위가 아닙니다. Windows·macOS·Linux 사용자는 v2rayN 설치 패키지가 운영체제와 프로세서 아키텍처에 맞는지 먼저 확인하세요. Android 사용자는 노드 요구사항에 따라 v2rayNG와 v2flyNG 중 코어 계열을 선택하면 됩니다. 클라이언트별 차이는 클라이언트 비교에서 더 확인할 수 있습니다.

4. 구독과 JSON: 가져올 수 있어도 설정을 그대로 옮길 수 있는 것은 아닙니다

구독은 설정을 배포하는 수단입니다. 클라이언트가 내용을 가져온 뒤에는 공유 링크나 지원되는 설정 형식을 해석하고 자체 실행 설정으로 변환해야 합니다. 따라서 “같은 구독 주소가 열린다”는 것은 가져오기에 성공했다는 뜻일 뿐입니다. 노드 정보가 온전히 보존됐는지, 매개변수가 유지됐는지, 연결이 성공하는지는 각각 확인해야 합니다.

  1. 먼저 해석 결과를 확인하세요. 구독을 갱신한 뒤 노드 이름, 주소, 포트, 프로토콜을 점검하세요. 목록이 비어 있다면 원격 서버부터 의심하지 말고 응답 내용이나 형식이 맞는지 확인하세요.
  2. 다음으로 주요 필드를 확인하세요. VMess는 UUID와 전송 설정을, VLESS는 UUID·암호화 설정·flow를 확인하세요. REALITY를 사용한다면 서버 이름, 공개 키 매개변수, short ID 등도 점검해야 합니다.
  3. 클라이언트가 생성한 로컬 설정을 확인하세요. 공유 링크에서 기본값이 생략될 수 있고 클라이언트가 자체 기본값을 적용할 수도 있습니다. 양쪽을 비교할 때는 노드 이름만 보지 말고 코어에 실제 전달되는 최종 설정을 확인하세요.
  4. 마지막으로 실행 로그를 확인하세요. 설정 해석 오류, 연결 오류, 핸드셰이크 오류를 구분하세요. 알 수 없는 필드가 표시되면 노드 비밀번호를 반복해서 바꾸기보다 코어 버전을 먼저 확인하세요.

같은 구독을 사용하는 두 기기라도 노드 목록이 다를 수 있습니다. 한쪽에서 구독을 갱신하지 않았거나, 지원하지 않는 유형을 필터링했거나, 파서가 일부 매개변수를 보존하지 못했을 수 있습니다. 구독 주소에 접근 자격 정보가 포함될 수 있으므로 문제를 확인할 때는 전체 주소와 사용자 정보를 가리세요.

5. 데스크톱과 Android에서 구독 함께 사용하기: 노드는 공유하되 트래픽 처리 방식은 구분하기

여러 기기에서 사용할 때 통일할 부분은 노드 출처와 필수 연결 매개변수입니다. 반대로 시스템 트래픽을 처리하는 방식까지 그대로 따라 해서는 안 됩니다. 데스크톱의 시스템 프록시는 해당 설정을 따르는 앱에 주로 적용되고, Android의 VPN 모드는 시스템 인터페이스를 통해 트래픽을 처리합니다. 적용되는 앱 범위가 서로 다르므로 “다른 기기에서는 되니까”라는 이유만으로 현재 기기의 설정이 맞다고 판단할 수 없습니다.

설정 방법: 같은 구독을 사용하되 양쪽 실행 환경을 따로 확인하기

데스크톱: v2rayN
  • 노드 요구사항에 맞는 지원 코어를 선택하고 실제 시작 버전을 기록합니다.
  • 구독 그룹 설정에 주소를 추가하고 갱신한 뒤 노드 매개변수를 확인합니다.
  • 시스템 프록시를 사용할 때 브라우저가 해당 프록시 설정을 따르는지 확인합니다.
  • 라우팅과 DNS 설정은 별도로 백업하고 구독에 포함된 정보로 취급하지 않습니다.
Android: v2rayNG 또는 v2flyNG
  • Xray 또는 V2Fly 계열에 맞춰 클라이언트를 선택한 뒤 같은 구독을 가져옵니다.
  • 시작할 때 시스템 VPN 권한을 확인하고 다른 VPN 연결과의 충돌 여부를 살펴봅니다.
  • 필요에 따라 앱별 프록시를 설정하고 대상 앱이 제외되지 않았는지 확인합니다.
  • Wi-Fi와 모바일 네트워크에서 각각 확인해 네트워크 차이를 코어 차이로 오해하지 않도록 합니다.

같은 구독을 쓰면 노드 출처를 통일할 수 있지만 갱신 시점, 라우팅, DNS, 앱별 트래픽 처리 범위는 기기마다 확인해야 합니다.

마이그레이션할 때는 한 번에 하나의 변수만 바꾸세요. 예를 들어 기존 라우팅과 DNS를 유지한 채 클라이언트만 바꾸고 노드 하나를 검증합니다. 연결에 성공한 뒤에 분할 라우팅을 조정하세요. 이렇게 하면 문제가 생겼을 때 코어 호환성, 설정 생성, 트래픽 처리 범위 중 무엇이 달라졌는지 구분하기 쉽습니다.

6. 포트와 로그로 실제 동작하는 계층 확인하기

아래 세 숫자는 연결 흐름을 설명하기 위한 설정 예시입니다. 모든 버전의 기본값이나 성능 테스트 결과가 아닙니다. 실제 사용 시에는 클라이언트에 표시된 수신 포트와 노드가 제공한 서버 포트를 기준으로 확인하세요.

10808
예시: 로컬 SOCKS 수신 포트
443
예시: 원격 TLS 서비스 포트
127.0.0.1
예시: 로컬에서만 수신하는 루프백 주소

로컬 SOCKS 진입점이 실제로 127.0.0.1:10808로 설정되어 있다면 프록시를 지원하는 명령줄 도구로 해당 진입점을 따로 확인할 수 있습니다. 아래 명령을 실행하려면 시스템에 curl이 설치되어 있고 대상 사이트에 접속할 수 있어야 합니다. 도메인 이름 해석을 SOCKS 프록시 측에서 처리하도록 하지만, 이것만으로 기기의 모든 앱이 프록시를 사용한다고 확인할 수는 없습니다.

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

최종 점검: 검증된 설정 기준을 하나 보관하기

클라이언트 버전, 코어 버전, 전체 프로토콜 조합, 로컬 포트를 기록하세요. 이후 업그레이드할 때 이 기준 설정으로 먼저 확인한 뒤 다른 구독과 분할 라우팅 규칙을 복원하세요. 단순히 “V2Ray를 사용한다”고 기억하는 것보다 기기 간 차이를 파악하는 데 도움이 됩니다.

Project V 생태계에는 여러 이름이 있지만 선택 기준은 명확합니다. 노드는 연결 요구사항을 제시하고, 코어는 이를 구현하며, 클라이언트는 설정을 코어에 전달하고 기기의 트래픽을 처리합니다. 화면 사용 방식이나 여러 기기에서의 관리 방법을 따지기 전에 이 세 계층부터 맞추세요. 가져오기와 시작 방법은 클라이언트 사용 가이드에서, 프로토콜 필드의 의미는 용어집에서 확인할 수 있습니다.

클라이언트 다운로드v2rayN / v2rayNG