Project V 생태계 정리: V2Fly·Xray·V2Ray 클라이언트의 관계

Project V의 시작부터 V2Fly 커뮤니티의 유지보수, Xray 포크의 등장까지 시간순으로 살펴보고 코어·프로토콜·GUI 클라이언트의 역할을 정리합니다.

핵심 내용

Project V는 프로젝트 생태계이고 V2Ray는 그 안의 핵심 도구입니다. V2Fly는 V2Ray 유지보수를 이어가며, Xray는 별도로 발전한 포크입니다. v2rayN, v2rayNG, v2flyNG는 사용자용 클라이언트이지 서로 다른 세 가지 프록시 프로토콜이 아닙니다. 노드와 구독을 사용해 봤지만 각 명칭의 차이가 헷갈리는 분이라면, 이 글에서 역사와 역할을 먼저 구분하고 서버 설정에 맞는 코어를 선택한 뒤 데스크톱·안드로이드에서 가져오기, 라우팅, 업데이트 절차를 정리해 보세요.

Project V에서 V2Fly까지: 프로젝트 이름과 유지보수 주체

Project V는 모든 연결을 하나의 프로토콜이나 전송 방식에 가두지 않고, 조합해 쓸 수 있는 네트워크 프록시 도구를 제공하는 데서 출발했습니다. V2Ray는 이 생태계에서 가장 널리 사용되는 핵심 도구로, 인바운드 수신, 아웃바운드 연결, 라우팅 선택과 관련 프로토콜 처리를 담당합니다. 초기 소개에서는 Project V와 V2Ray가 함께 언급되는 경우가 많아 일상적인 대화에서 두 이름을 혼용하기도 하지만, 각각 별도의 클라이언트로 함께 설치해야 한다는 뜻은 아닙니다.

이후 생태계의 변화를 이해하려면 다음 주요 시점을 살펴보면 됩니다. 연도는 프로젝트 발전 단계를 파악하기 위한 기준일 뿐, 해당 연도의 구버전을 지금 바로 배포해도 된다는 의미는 아닙니다. 기능 지원 여부는 현재 사용하는 버전의 안내와 설정 문서를 확인하세요.

  1. 2015년 전후: V2Ray 프로젝트 시작. 설정 가능한 인바운드·아웃바운드·라우팅 구조를 중심으로 발전했으며, VMess는 대표 프로토콜 중 하나로 자리 잡았습니다. 명령줄 코어와 GUI 클라이언트의 역할도 점차 분명해졌습니다.
  2. 2019년 전후: V2Fly 커뮤니티의 유지보수 체계 형성. 기존 프로젝트의 유지보수에 변화가 생긴 뒤, 커뮤니티가 V2Ray 코드와 문서, 릴리스 작업을 이어갔습니다. “V2Fly”는 주로 유지보수 커뮤니티와 그 프로젝트 생태계를 가리키며, 코어 이름은 여전히 V2Ray로 쓰이는 경우가 많습니다.
  3. 2020년 말: Xray 포크 등장.Xray는 V2Ray 코드 기반에서 갈라져 나온 뒤 독립적으로 유지보수되고 있습니다. 공통된 출발점은 일부 설정 구조가 비슷한 이유를 설명하지만, 이후 기능도 계속 같으리라는 뜻은 아닙니다.
  4. 2023년: Xray 기능에 REALITY 추가.REALITY는 연결 보안 메커니즘으로, VMess나 VLESS와 같은 계층의 독립 프록시 프로토콜이 아닙니다. 사용할 때는 프로토콜·전송 방식·보안 설정의 조합을 함께 확인해야 합니다.

따라서 “V2Fly가 유지보수를 맡았다”는 말이 모든 사용자가 클라이언트를 v2flyNG로 바꿔야 한다는 뜻도, 기존 노드의 프로토콜을 전부 변경해야 한다는 뜻도 아닙니다. 유지보수 주체, 코어 프로그램, GUI는 서로 다른 문제입니다. 오래된 튜토리얼을 볼 때는 “V2Ray”가 코어를 가리키는지, 프로토콜 생태계를 통칭하는지, 작성자가 사용하는 클라이언트를 뜻하는지 먼저 확인하면 불필요한 문제 해결 과정을 줄일 수 있습니다.

Xray 포크: 공통된 출발점이 설정의 영구 호환성을 뜻하지는 않습니다

Xray와 V2Fly의 관계는 상하 관계가 아니라 코드의 역사에서 시작됩니다. 포크된 뒤에는 양쪽이 기능, 설정 필드, 전송 구현과 기본 동작을 각각 변경할 수 있습니다. 두 프로젝트 모두 프록시 코어 역할을 할 수 있지만, “둘 다 V2Ray에서 나왔다”는 이유만으로 실행 파일을 바꾼 뒤 기존 설정이 그대로 작동한다고 가정해서는 안 됩니다.

비교 항목V2Fly가 유지보수하는 V2RayXray
프로젝트 관계V2Ray의 커뮤니티 유지보수와 릴리스를 이어감공통 코드 기반에서 갈라져 나온 독립 프로젝트
설정 확인사용 중인 버전과 설정 형식을 확인사용 중인 버전, 필드, 기능 조합을 확인
VMess 등 공통 기능전송 및 보안 계층 설정은 별도로 확인해야 함전송 및 보안 계층 설정은 별도로 확인해야 함
REALITY 지원 여부이름이 비슷하다고 호환된다고 단정할 수 없음클라이언트에서 관련 설정을 지정할 수 있는지, 코어가 지원하는지 확인
GUI 클라이언트와의 관계호출 방식과 설정 생성 방식은 클라이언트에 따라 다름호출 방식과 설정 생성 방식은 클라이언트에 따라 다름

예를 들어 서버 설정이 VLESS와 REALITY 조합이라면, 클라이언트가 VLESS를 지원하는 것만으로는 충분하지 않습니다. 서버에서 제공한 서버 이름, 공개 키, short ID 등의 매개변수를 저장하고 전달할 수 있어야 합니다. 일부 버전에서는 필드 이름이나 가져오기 매핑이 달라질 수 있으므로 해당 버전의 문서와 대조하세요. 가져온 뒤 노드 이름만 보인다고 해서 모든 연결 매개변수가 유지됐다고 볼 수는 없습니다.

결론: 연결 매개변수에 맞춰 코어를 정한 다음 클라이언트를 선택하세요

먼저 서버에서 요구하는 프로토콜, 전송 방식, 보안 설정, 흐름 제어 매개변수를 정리한 다음 클라이언트와 코어 버전을 확인하세요. 기존 설정이 안정적으로 작동한다면 새 기능이 필요하거나 문제를 수정해야 할 때만 전환하고, 복구할 수 있도록 원래 설정을 보관하세요.

코어·프로토콜·전송 방식·클라이언트의 네 가지 역할

노드 연결 여부는 보통 여러 계층의 설정이 동시에 맞아야 결정됩니다. VMess와 VLESS는 프록시 프로토콜을, TCP와 WebSocket 등은 데이터를 전달하는 전송 방식을 설명합니다. TLS와 REALITY는 보안 설정에 해당합니다. 이는 기능을 이해하기 위한 분류이며, 모든 프로토콜·전송 방식·보안 옵션을 자유롭게 조합할 수 있다는 뜻은 아닙니다.

기기 내 포트를 예로 들면, 아래 숫자는 역할을 설명하기 위한 설정 예시일 뿐 세 클라이언트의 공통 기본값이 아닙니다. 실제 사용 시에는 현재 클라이언트의 리스닝 설정을 확인하고, 포트를 다른 프로세스가 사용 중이지 않은지도 점검하세요.

10808
예시: 기기 내 SOCKS 리스닝 포트
10809
예시: 기기 내 HTTP 프록시 포트
443
예시: 원격 서버 리스닝 포트

브라우저가 127.0.0.1:10809을 사용하도록 설정했다면, 브라우저는 원격 서버의 443 포트가 아니라 기기 내 HTTP 프록시 입구에 연결합니다. 이후 코어가 노드와 라우팅 설정에 따라 아웃바운드 연결을 설정합니다. 기기 내 리스닝 포트를 서버 포트 입력란에 넣거나, 노드만 바꾸고 앱 트래픽을 프록시로 보내지 않으면 “설정은 있는 것 같은데 접속되지 않는” 문제가 생길 수 있습니다.

세 가지 클라이언트: 플랫폼과 서버 조건에 따라 선택

v2rayN은 주로 데스크톱에서 사용하며 노드, 구독, 라우팅, 코어 설정을 제공합니다. 지원 플랫폼과 인터페이스, 코어 옵션은 선택한 배포 패키지에 따라 확인해야 합니다. v2rayNG는 안드로이드용으로 Xray 코어를 사용하고, v2flyNG도 안드로이드용으로 V2Fly가 유지보수하는 V2Ray 코어를 사용합니다. 클라이언트 이름의 비슷한 철자가 버전 간 호환을 의미하지 않으며, 클라이언트 버전 번호로 코어 버전을 추측할 수도 없습니다.

v2rayN: 데스크톱 설정 관리

추천

이 글은 데스크톱에서 노드와 라우팅을 관리하려는 사용자를 대상으로 하므로 데스크톱용 클라이언트를 먼저 소개합니다. 운영체제와 아키텍처에 맞는 설치 패키지를 고른 뒤, 메인 창에 표시된 노드 유형만 보지 말고 현재 설정에서 실제로 어떤 코어를 호출하는지 확인하세요.

추천 대상: 데스크톱에서 구독을 관리하고 로그를 확인하며, 노드 요구사항에 맞춰 코어 설정을 점검하려는 사용자

v2rayNG: 안드로이드와 Xray

Xray 기능이 필요한 안드로이드 설정에 적합합니다. 가져온 뒤 전송 방식, 보안 설정, 흐름 제어 필드를 하나씩 확인하세요. 안드로이드 시스템의 VPN 권한과 앱 트래픽 적용 범위도 별도로 점검해야 합니다.

추천 대상: REALITY가 필요한 설정을 포함해 호환성이 확인된 Xray 노드를 안드로이드에서 사용하려는 경우

v2flyNG: 안드로이드와 V2Fly

기존 V2Fly 설정 체계를 사용하는 안드로이드 사용자에게 적합합니다. 이름이 V2Ray와 비슷하다는 이유로 모든 노드와 호환된다고 가정하지 말고, 서버 매개변수와 코어 기능, 가져오기 형식이 맞는지 확인하세요.

추천 대상: 검증된 V2Fly 연결 구성을 안드로이드에서 계속 사용하려는 경우

추천 표시는 여기서 다루는 데스크톱 관리 상황에만 해당하며, 세 클라이언트의 전반적인 순위를 뜻하지 않습니다. 플랫폼마다 연결 방식과 인터페이스 조작이 다르므로, 구독에 같은 이름의 노드가 있어도 각 기기에서 생성된 설정을 확인해야 합니다. 다운로드와 플랫폼 안내는 클라이언트 페이지에서, 개념과 역할은 프로토콜 가이드에서 확인하세요.

데스크톱과 안드로이드에서 같은 구독 사용하기: 노드는 동기화되지만 설정 전체가 동기화되지는 않습니다

구독 주소는 여러 노드 설정을 가져오는 데 사용됩니다. 코어도 아니고 라우팅 규칙의 공통 표준도 아니며, 두 기기의 DNS, 시스템 프록시, 앱 제외 설정, 업데이트 주기를 자동으로 일치시켜 주지도 않습니다. 개별 공유 링크는 보통 연결 설정 하나를 설명하며, 붙여넣어 가져온 뒤 서버 설정이 변경되어도 기기에 자동으로 반영되지 않을 수 있습니다.

설정 예시: 같은 구독을 두 기기에서 각각 검증

데스크톱: v2rayN
  • 「구독 그룹」→「구독 그룹 설정」에서 주소를 추가합니다. 메뉴 이름은 사용 중인 버전에 따라 다를 수 있습니다.
  • 구독을 업데이트한 뒤 노드를 선택하고 프로토콜, 전송 방식, 보안 설정 필드를 확인합니다.
  • 리스닝 포트와 시스템 프록시 상태를 확인한 다음 실제 앱으로 트래픽이 코어에 전달되는지 검증합니다.
안드로이드: v2rayNG 또는 v2flyNG
  • 「구독 설정」에서 같은 주소를 추가한 뒤 「구독 업데이트」를 실행합니다. 메뉴 위치는 버전에 따라 달라질 수 있습니다.
  • 해당 코어의 지원 범위에 맞춰 가져온 설정을 확인하고, 노드 수가 같다는 이유만으로 호환된다고 판단하지 마세요.
  • 연결을 시작하고 시스템 VPN 권한을 허용한 뒤 앱별 설정과 실제 접속 결과를 확인합니다.

구독으로 같은 노드 목록을 가져올 수는 있지만, 기기별 라우팅·DNS·앱 트래픽 적용 범위는 각각 설정하고 검증해야 합니다.

마이그레이션할 때는 노드 데이터와 기기별 정책도 구분해야 합니다. 구독을 업데이트하면 노드 항목이 다시 만들어질 수 있으므로 구독 노드의 필드를 직접 수정하기 전에 클라이언트의 저장 방식을 확인하세요. 필요하면 수동 설정으로 별도 저장합니다. 구독 주소에 액세스 토큰이 포함될 수 있으므로 스크린샷, 로그, 문의 내용에는 전체 주소와 사용자 식별자가 보이지 않도록 처리하세요.

  1. 기준 정보 기록: 클라이언트 버전, 코어 버전, 노드 유형, 현재 연결 가능한 네트워크를 기록하고 원래 설정을 보관합니다.
  2. 한 번에 하나씩 변경: 먼저 노드 연결을 확인하고 DNS를 조정한 다음 geosite, geoip 등 라우팅 규칙을 수정합니다. 모든 계층을 동시에 바꾸지 마세요.
  3. 규칙 데이터 확인: 규칙에서 참조하는 분류가 있는지 확인하고 규칙 순서를 점검합니다. 파일 이름이 같아도 데이터 내용과 업데이트 시점까지 같다는 뜻은 아닙니다.
  4. 실제 접속 검증: 직접 연결해야 하는 대상과 프록시를 사용해야 하는 대상을 각각 확인하고, 로그에서 적용된 아웃바운드를 살펴보세요. 지연 시간 테스트가 성공했다고 모든 앱이 작동하는 것은 아닙니다.

생태계 명칭 관련 자주 묻는 질문과 점검 순서

클라이언트 선택 문제는 가져오기, 업데이트, 기기 전환 이후에 드러나는 경우가 많습니다. 클라이언트를 계속 바꿔 보기보다 “클라이언트 연결 설정 → 코어 실행 → 노드 핸드셰이크 → DNS와 라우팅 → 앱 연결” 순서로 확인하면 원인을 찾기 쉽습니다.

v2rayN을 설치하면 V2Fly 코어도 설치된 건가요?

이름만으로는 판단할 수 없습니다. 사용 중인 배포 패키지의 안내를 확인한 뒤, 클라이언트의 코어 설정과 시작 로그에서 실제로 실행되는 프로그램과 버전을 확인하세요. 노드 편집 화면에 VMess 또는 VLESS가 표시된다는 것은 설정된 프로토콜 유형만 보여 줄 뿐, 백그라운드에서 어떤 코어가 실행 중인지 증명하지 않습니다.

같은 구독이 데스크톱에서는 작동하는데 안드로이드에 가져오면 연결되지 않는 이유는 무엇인가요?

같은 노드를 선택한 뒤 서버 포트, 전송 방식, 보안 설정, 흐름 제어 필드를 차례로 비교하고 안드로이드 코어 로그를 확인하세요. 매개변수가 같고 핸드셰이크도 성공했다면 시스템 VPN 권한과 앱별 설정을 살펴봅니다. 문제 해결 기준을 잃을 수 있으므로 구독 전체를 먼저 삭제하고 다시 만들지는 마세요.

Xray로 바꾸면 라우팅도 다시 설정해야 하나요?

전부 다시 작성할 필요는 없지만 재검토해야 합니다. 규칙 필드가 지원되는지, geosite와 geoip 데이터를 불러올 수 있는지, 규칙 순서가 유지됐는지, 직접 연결·프록시·차단 아웃바운드 태그가 올바른지 확인하세요. 명확한 테스트 규칙 하나로 아웃바운드를 검증한 다음 전체 규칙을 복원합니다.

모든 VLESS 노드에 REALITY가 필요한가요?

아닙니다. VLESS는 프록시 프로토콜이고 REALITY는 특정 설정에서 사용할 수 있는 보안 메커니즘입니다. 서버에서 안내한 조합에 맞춰 설정하세요. 서버가 TLS를 요구한다면 임의로 REALITY로 바꾸지 말고, VLESS라는 이유만으로 서버 이름, 공개 키, short ID를 추측하지도 마세요.

Project V 생태계에서 클라이언트를 선택하는 과정은 다음과 같이 정리할 수 있습니다. 먼저 서버 연결 매개변수를 확인하고, 코어 기능을 점검한 뒤 플랫폼에 맞는 클라이언트를 선택하고, 마지막으로 구독·라우팅·앱 연결을 검증하세요. 프로젝트의 역사를 알면 이름의 배경을 이해하는 데 도움이 되지만, 연결 결과를 좌우하는 것은 현재 버전과 실제 설정입니다. 가져오기부터 시작하려면 입문 가이드를 이어서 확인하세요.

클라이언트 다운로드 및 설치플랫폼에 맞는 v2rayN / v2rayNG 선택