Project V는 프로젝트 체계, V2Fly와 Xray는 서로 다른 코어 개발 노선, v2rayN·v2rayNG·v2flyNG는 사용자가 직접 조작하는 클라이언트입니다. 다운로드 파일을 고르거나 노드 호환성을 확인하려는 경우, 또는 ‘가져오기는 됐는데 연결되지 않는’ 문제를 겪는 경우에 유용합니다. 프로젝트·코어·클라이언트·프로토콜의 관계를 먼저 구분한 뒤 플랫폼과 서버 설정에 맞춰 선택하세요.
Project V, V2Ray, V2Fly: 프로젝트와 구현체 구분하기
Project V는 처음에 모듈형 네트워크 프록시 도구를 중심으로 발전했으며, V2Ray는 그중 가장 널리 알려진 핵심 구현체입니다. 특정 프록시 프로토콜만 처리하는 것이 아니라 인바운드·아웃바운드, 라우팅, DNS 등의 기능도 제공합니다. 따라서 흔히 말하는 ‘V2Ray 노드’는 대개 포괄적인 표현일 뿐입니다. 이것만으로 노드가 반드시 VMess를 사용한다고 단정할 수 없고, 클라이언트가 V2Fly 코어를 실행한다고 볼 수도 없습니다.
V2Fly는 V2Ray 개발을 이어가는 커뮤니티 프로젝트이며, 핵심 프로그램은 대개 여전히 V2Ray라는 이름을 사용합니다. Xray는 V2Ray 코드에서 분기해 독자적으로 발전한 Xray-core입니다. 두 프로젝트는 공통된 역사를 공유하지만, 같은 프로그램의 표시 이름만 다른 것은 아니며 순서대로 설치해야 하는 관계도 아닙니다.
- 프로젝트 체계: Project V는 생태계의 기원을 이해하기 위한 배경입니다. 별도로 설치하는 데스크톱 앱이 아닙니다.
- 연결 코어: V2Fly의 V2Ray와 Xray-core가 설정을 해석하고 연결을 수립하며 라우팅을 처리합니다.
- GUI 클라이언트: v2rayN 등은 구독 관리, 노드 목록, 설정 편집과 코어 실행을 담당합니다.
- 연결 프로토콜: VMess, VLESS, Trojan, Shadowsocks는 연결 규칙을 나타내며 클라이언트 이름과는 다릅니다.
이 네 가지 계층을 구분하면 ‘v2rayN에서 VLESS 노드를 가져와 Xray로 연결한다’는 말이 모순이 아니라는 점을 알 수 있습니다. 세 이름은 각각 인터페이스, 프로토콜, 실제 실행 프로그램을 가리킵니다. 문제를 진단할 때도 ‘V2Ray가 연결되지 않는다’고만 하지 말고 각 항목을 따로 기록하세요.
V2Fly와 Xray: 공통 기반과 서로 다른 기능 범위
두 코어 모두 멀티 프로토콜 프록시, 라우팅, DNS 등 기본 기능을 제공하지만 전송 방식, 설정 필드, 확장 기능은 버전에 따라 달라집니다. ‘특정 코어가 VLESS를 지원한다’는 사실이 ‘모든 VLESS 조합을 지원한다’는 뜻은 아닙니다. 프로토콜, 전송 방식, 보안 계층, 확장 매개변수를 모두 포함한 구성이 일치하는지 확인해야 합니다.
| 비교 항목 | V2Fly / V2Ray | Xray-core |
|---|---|---|
| 프로젝트 관계 | V2Ray의 커뮤니티 개발 노선을 이어감 | V2Ray에서 분기해 독자적으로 발전 |
| 기본 역할 | 인바운드·아웃바운드, DNS, 라우팅 및 프로토콜 처리 | 인바운드·아웃바운드, DNS, 라우팅 및 프로토콜 처리 |
| 설정 호환성 | 해당 버전의 V2Ray 설정 규격을 기준으로 함 | 공통 설정 기반은 있지만 확장 필드를 모두 서로 바꿔 쓸 수 있는 것은 아님 |
| 주요 제한 사항 | Xray 전용 기능을 공통 기능으로 간주하지 말 것 | REALITY, XTLS Vision 등의 설정은 구현체와 버전을 맞춰야 함 |
| 이 글에서 다루는 Android 클라이언트 | v2flyNG | v2rayNG |
예를 들어 서버에서 VLESS, REALITY와 xtls-rprx-vision을 요구한다면, 클라이언트가 실제로 호출하는 코어가 이 설정 조합을 지원하는지 확인하고 공개 키, 짧은 ID, 서버 이름, flow도 점검해야 합니다. 프로토콜 드롭다운에서 VLESS를 선택하거나 프로그램 파일 이름만 바꾸는 것으로는 필요한 조건을 모두 갖출 수 없습니다.
결론: 노드 설정에 맞춰 코어 선택하기
먼저 서버에서 요구하는 프로토콜, 전송 방식, 보안 계층을 확인한 뒤 코어의 지원 범위를 살펴보세요. 클라이언트 이름에 ‘v2ray’가 들어간다는 이유만으로 호환된다고 판단해서는 안 됩니다. Xray 전용 기능이 필요하다면 실제로 호환되는 버전의 Xray가 실행 중인지 확인하세요.
세 클라이언트 비교: 지원 플랫폼과 코어
클라이언트는 그래픽 인터페이스를 제공하고 코어는 실제 연결을 처리합니다. 클라이언트 업데이트는 인터페이스와 설정 생성 로직을 바꿀 수 있고, 코어 업데이트는 프로토콜 구현이나 설정 검증 규칙에 영향을 줄 수 있습니다. 두 버전을 따로 확인하고 기록해야 하며, ‘최신 버전’ 하나로 모든 정보를 대신해서는 안 됩니다.
| 클라이언트 | 지원 플랫폼 | 코어 구성 | 선택 시 확인 사항 |
|---|---|---|---|
| v2rayN | Windows、macOS、Linux | 데스크톱 클라이언트로 Xray, sing-box 등의 코어를 사용할 수 있습니다. 실제 선택지는 버전과 배포 패키지에 따라 다릅니다. | 먼저 운영체제와 프로세서 아키텍처를 선택하고, 프로토콜에 맞는 코어 설정을 확인하세요. |
| v2rayNG | Android | Xray 코어 사용 | Xray에 해당하는 프로토콜 및 확장 기능이 필요하다면 내장 코어 버전을 확인하세요. |
| v2flyNG | Android | V2Fly의 V2Ray 코어 사용 | V2Fly 노선을 선택한다면 노드의 전송 방식과 보안 계층을 지원하는지 확인하세요. |
v2rayN은 V2Fly 코어의 다른 이름이 아니며, 여러 코어를 지원한다고 해서 모든 배포 패키지에 선택 가능한 프로그램이 전부 포함되는 것도 아닙니다. 데스크톱 버전과 클래식 인터페이스는 지원 범위나 설정 메뉴가 다를 수 있습니다. 실제로 어떤 코어가 실행 중인지는 설정과 시작 로그를 기준으로 확인하세요. sing-box는 별도의 코어 구현체이며 V2Fly와 Xray 사이의 버전 업그레이드 관계에 있지 않습니다.
v2rayNG와 v2flyNG는 이름이 비슷하지만 아이콘만 다른 동일한 설치 패키지가 아닙니다. 둘 다 Android용이지만 코어 노선이 다릅니다. 같은 공유 링크를 가져올 수 있더라도 전송 확장 기능이나 설정 필드 지원 여부는 달라질 수 있습니다. 클라이언트를 바꾸기 전에 원본 노드 정보를 보관해 가져오기 과정에서 변환된 설정을 서버의 원본 설정과 혼동하지 않도록 하세요.
v2rayN에서 실제 실행 코어 확인하기
아래 안내는 중국어 인터페이스의 v2rayN을 기준으로 합니다. 데스크톱 배포판에 따라 메뉴 이름이 조금 다를 수 있으며, ‘Core 유형’이 ‘Core 유형 설정’으로 표시되기도 합니다. 설정을 확인한 다음 재시작 후 로그로 대조하는 편이 프로그램 폴더의 파일 이름만 보고 추측하는 것보다 정확합니다.
-
버전 확인
‘도움말’ → ‘정보’를 열어 클라이언트 버전을 기록하세요. 그런 다음 메인 화면 로그에서 코어 시작 정보를 확인해 코어 이름과 버전을 기록합니다. 문제 해결 정보를 공유할 때 두 항목을 모두 포함하세요.
-
코어 연결 설정 확인
‘설정’ → ‘매개변수 설정’ → ‘Core 유형’으로 이동해 현재 프로토콜에 선택된 코어를 확인하세요. 해당 버전에 이 항목이 없다면 다른 버전의 스크린샷을 그대로 따라 하지 말고 시작 로그에서 확인하세요.
-
노드 설정 확인
노드 목록에서 대상 노드를 선택하고 마우스 오른쪽 버튼을 눌러 ‘서버 편집’을 여세요. 프로토콜, 포트, 전송 방식, TLS 또는 REALITY 설정을 하나씩 확인합니다. 가져오기에 성공했다는 것은 항목이 등록됐다는 뜻일 뿐, 코어가 설정을 받아들였다는 의미는 아닙니다.
-
다시 연결
설정을 저장한 뒤 대상 노드를 마우스 오른쪽 버튼으로 클릭하고 ‘활성 서버로 설정’을 선택해 현재 설정을 적용하세요. 로그에서 지원되지 않는 필드, 코어 시작 실패, 주소 사용 중 메시지가 있는지 확인한 다음 연결을 테스트합니다.
연결이 실행 중일 때 코어 실행 파일을 임의로 교체하지 마세요. 인터페이스가 설정을 생성하는 방식과 코어가 받아들이는 형식은 서로 맞아야 합니다. 업데이트 후 설정 파싱 오류가 발생하면 여러 코어 파일을 연달아 바꾸기보다, 먼저 정상 작동하는 클라이언트 구성 전체를 복구한 뒤 차이를 하나씩 확인하세요. 그래야 문제를 재현하고 원인을 찾기 쉽습니다.
포트, 시스템 프록시, 라우팅: 서로 다른 설정
코어가 정상적으로 시작된 뒤에도 앱 트래픽이 클라이언트로 전달되어야 합니다. 데스크톱에서는 시스템 프록시를 설정하거나 앱에서 로컬 프록시를 직접 지정하는 방식이 일반적입니다. TUN은 가상 네트워크 인터페이스와 라우팅 제어가 필요합니다. Android 클라이언트는 보통 시스템 VPN 권한으로 트래픽을 가져오며, 이 권한 화면이 특정 프로토콜을 사용한다는 뜻은 아닙니다.
위 포트는 용도 예시일 뿐 모든 버전에 그대로 입력해야 하는 기본값이 아닙니다. 일부 버전은 혼합 인바운드를 사용해 HTTP와 SOCKS가 한 포트를 공유하고, 다른 설정에서는 각각 별도로 수신합니다. ‘설정’ → ‘매개변수 설정’의 로컬 수신 관련 옵션에서 실제 값을 확인하고 로그와 대조하세요. 원격 포트는 서버에서 정하므로 TLS가 보인다는 이유만으로 443으로 바꾸면 안 됩니다.
- 로컬 인바운드: 앱은
127.0.0.1과 클라이언트의 수신 포트로 연결합니다. 포트가 이미 사용 중이면 인바운드를 열 수 없습니다. - 시스템 프록시: 시스템 설정을 따르는 앱에 프록시 사용을 알립니다. 모든 앱이 이 설정을 읽는 것은 아닙니다.
- 라우팅 규칙: 코어에 들어온 요청을 프록시로 보낼지, 직접 연결할지, 차단할지 결정합니다. 시스템 프록시를 켜도 모든 요청이 원격 서버를 거치는 것은 아닙니다.
- DNS: 확인 경로, 분기 규칙, 대상 도메인 일치 여부가 함께 결과에 영향을 주므로 로그를 참고해 판단해야 합니다.
구독은 가져왔는데 연결되지 않을 때: 계층별 점검
구독은 설정을 배포하는 방식이지 새로운 프록시 프로토콜이 아닙니다. 구독을 업데이트하면 서로 다른 프로토콜을 사용하는 노드가 여러 개 추가될 수 있지만, 클라이언트에 없는 코어 기능까지 자동으로 제공되지는 않습니다. QR 코드, 클립보드, 구독으로 가져오더라도 클라이언트의 파싱, 설정 생성, 코어 실행 단계를 거쳐야 합니다.
같은 구독인데 클라이언트마다 결과가 다른 이유는?
먼저 같은 노드의 프로토콜, 전송 방식, 보안 계층, 확장 매개변수를 대조한 다음 각 클라이언트의 시작 로그를 확인하세요. 한쪽에 REALITY 공개 키나 flow가 빠졌다면 원본 링크에서 다시 가져와 편집 화면을 점검하세요. 노드 이름만 비교해서는 안 됩니다.
Xray로 바꾸면 무조건 연결될까요?
먼저 노드가 실제로 Xray 전용 기능을 요구하는지 확인한 다음 주소, 포트, 인증 정보, 서버 이름, 기기 시간을 점검하세요. 코어 호환성은 구현 기능 문제만 해결합니다. 서버에 접속할 수 없거나 인증서가 맞지 않거나 인증 정보가 만료된 경우에는 여전히 연결에 실패합니다.
지연 시간은 표시되는데 웹페이지가 열리지 않나요?
먼저 테스트 종류를 구분하세요. TCP 포트에 연결된다고 해서 프록시 요청 전체가 성공하는 것은 아닙니다. 시스템 프록시가 가리키는 로컬 포트를 확인한 뒤 실제 연결을 테스트하세요. 로그에서 요청이 코어에 도달했는지, 어떤 라우팅 규칙이 적용됐는지 살펴보세요.
클라이언트 업데이트 후 구독을 다시 추가해야 하나요?
대개 다시 추가할 필요는 없습니다. 먼저 기존 구독 그룹과 노드가 남아 있는지 확인한 뒤 업데이트된 코어 선택, 로컬 수신, 라우팅 설정을 점검하세요. 다시 가져와야 한다면 먼저 설정을 백업하세요. 로그를 공유하기 전에는 구독 URL 전체와 인증 정보를 삭제하세요.
선택 순서: 플랫폼, 설정, 코어, 연결 확인
일반적인 선택에서 두 코어의 우열을 먼저 정할 필요는 없습니다. 데스크톱 사용자는 v2rayN의 운영체제와 프로세서 아키텍처부터 확인하고, Android 사용자는 노드 요구 사항에 따라 v2rayNG와 v2flyNG를 비교하세요. 먼저 서버가 요구하는 프로토콜 조합을 충족한 다음 구독 관리, 라우팅 편집, 사용 편의성을 고려하면 됩니다.
- 실행 플랫폼을 확인하세요. Windows, macOS, Linux, Android 중에서 선택하고 프로세서 아키텍처에 맞는 버전을 고릅니다.
- 프로토콜, 주소, 포트, 전송 방식, 보안 계층, 필요한 확장 필드 등 전체 설정 요건을 확인하세요.
- 클라이언트와 실제 코어의 버전을 확인하고 현재 조합이 설정을 인식할 수 있는지 점검하세요.
- 가져온 뒤 로그를 확인하고 로컬 인바운드, 시스템 프록시, 실제 웹 요청을 검증하세요.
프로토콜과 보안 계층을 더 자세히 구분하려면 프로토콜 상세 안내를 참고하세요. 메뉴, 구독 업데이트, 분기 설정에 문제가 있다면 사용 안내를 확인하세요. 클라이언트 버전, 코어 버전, 프로토콜 조합, 오류 로그를 기록해 두면 클라이언트를 계속 바꾸는 것보다 원인을 찾는 데 도움이 됩니다.