데스크톱에서는 v2rayN부터 확인하고, 안드로이드에서는 노드 요구사항에 따라 v2rayNG 또는 v2flyNG를 선택하세요. Project V는 생태계를 이해하는 출발점이며, V2Fly와 Xray는 서로 다른 코어 프로젝트입니다. 클라이언트는 구독, 인터페이스, 설정을 관리합니다. 이 글에서는 프로젝트의 배경부터 코어 기능, 클라이언트 플랫폼, 노드 설정까지 차례로 살펴봅니다. 처음 사용하는 분은 적합한 앱을 고르고, 기존 구독을 이용 중인 분은 코어를 바꿔야 하는지 판단하는 데 참고할 수 있습니다.
1. Project V, V2Ray, V2Fly는 무엇이 다를까요?
Project V는 처음에 조합형 네트워크 프록시 도구를 중심으로 발전했으며, V2Ray는 그중 가장 널리 알려진 핵심 프로젝트입니다. 인바운드 수신, 라우팅 판단, 아웃바운드 연결 기능을 모듈로 나누어 트래픽마다 설정에 따라 다른 경로를 이용할 수 있게 합니다. 다만 일상적인 대화에서는 ‘V2Ray’를 전체 프록시 도구를 가리키는 말로 쓰기도 합니다. 그래서 처음 접하는 사용자는 클라이언트, 코어, 프로토콜을 혼동하기 쉽습니다.
V2Fly는 V2Ray 개발을 이어가는 커뮤니티 프로젝트이며, 그 코어는 보통 V2Ray Core라고 부릅니다. V2Fly는 새로운 노드 프로토콜도, 특정 안드로이드 인터페이스도 아닙니다. 코어는 설정을 실행하고, VMess 같은 프로토콜은 연결 방식을 정의합니다. 두 요소는 서로 다른 계층에 속합니다.
- 프로젝트와 커뮤니티: Project V는 역사적 배경을 제공하며, V2Fly와 Xray는 각각 자체 코어 구현을 유지·관리합니다.
- 코어 프로그램: 설정을 읽고, 로컬 포트를 열어 DNS·라우팅·아웃바운드 연결을 처리합니다.
- 그래픽 클라이언트: 구독과 노드를 관리하고, 인터페이스에서 설정한 내용을 코어가 실행할 수 있는 설정으로 변환합니다.
- 노드와 프로토콜: 원격 서버와 연결 매개변수를 정의하며, 클라이언트 브랜드와는 별개입니다.
따라서 구독에 ‘V2Ray 노드’라고 적혀 있는 것만으로는 충분한 정보가 아닙니다. 호환성을 좌우하는 것은 노드가 VMess와 VLESS 중 어떤 프로토콜을 사용하는지, 전송 방식은 무엇인지, TLS나 REALITY를 활성화했는지, 서버에서 추가 매개변수를 요구하는지입니다. 소프트웨어를 선택하기 전에 이런 항목을 구분하는 편이 제품명만 보는 것보다 정확합니다.
2. V2Fly와 Xray: 같은 뿌리에서 갈라진 서로 다른 개발 방향
Xray는 V2Ray 코드 기반에서 분리된 뒤 독자적인 개발 방향을 갖게 되었습니다. 두 코어는 일부 개념과 설정 방식을 공유하지만, 모든 필드와 전송 방식, 새 기능이 서로 호환되는 것은 아닙니다. 한 코어에서 실행되는 설정이라고 해서 다른 코어에서도 그대로 작동한다고 볼 수 없습니다.
| 비교 항목 | V2Fly / V2Ray Core | Xray Core |
|---|---|---|
| 프로젝트 관계 | 커뮤니티가 개발을 이어가는 V2Ray 코어 구현 | V2Ray에서 분리된 독립 코어 프로젝트 |
| 주요 사용 사례 | 기존 V2Fly 설정 및 VMess 등 호환성이 필요한 경우 | VLESS·REALITY·Vision 조합이 필요한 경우 |
| 설정 호환성 | V2Fly 설정 문서와 버전 정보를 기준으로 확인 | Xray 설정 문서와 버전 정보를 기준으로 확인 |
| 업그레이드 시 확인할 점 | 클라이언트 지원 범위와 노드에서 필요한 기능 | 클라이언트 지원 범위와 노드에서 필요한 기능 |
VMess와 VLESS는 프록시 프로토콜이고, WebSocket은 전송 방식이며, TLS는 보안 전송 방식입니다. REALITY는 Xray 생태계의 보안 전송 방식이고, Vision은 Xray의 플로우 제어 기능과 관련이 있습니다. 여러 항목을 조합할 수 있지만 같은 계층에서 서로 대체하는 선택지는 아닙니다. ‘VLESS + TCP + REALITY’는 서로 다른 계층의 설정을 조합한 표현이지, 독립된 노드 세 개를 뜻하지 않습니다.
3. 세 클라이언트와 코어의 관계
Windows·macOS·Linux 데스크톱에서는 v2rayN부터 살펴보고, 안드로이드에서는 v2rayNG와 v2flyNG를 구분해 선택하세요. 클라이언트 버전과 코어 버전은 따로 확인해야 합니다. 인터페이스가 업데이트되어도 현재 실행 중인 코어가 함께 업데이트된 것은 아닙니다. 설치 폴더에 코어 파일이 있다고 해서 해당 노드가 그 코어를 사용 중이라는 뜻도 아닙니다.
| 클라이언트 | 플랫폼 | 코어 구성 | 먼저 확인할 항목 |
|---|---|---|---|
| v2rayN | Windows / macOS / Linux | 여러 코어를 관리할 수 있습니다. Xray가 흔히 사용되며, V2Fly 지원 여부는 해당 버전과 설정 메뉴를 확인해야 합니다. | 노드에서 사용하는 코어 종류, 시작 로그, 코어 파일 구비 여부 |
| v2rayNG | 안드로이드 | Xray 코어 기반 | 앱 버전, 코어 버전, 노드 매개변수 지원 여부 |
| v2flyNG | 안드로이드 | V2Fly 코어 기반 | 노드가 현재 V2Fly 코어의 기능 범위에 포함되는지 여부 |
v2rayN은 설정을 생성하고 코어를 실행하는 클라이언트이지, 단순히 ‘v2rayN은 Xray’라고 할 수는 없습니다. 기본 선택 코어와 선택 가능한 코어, 메뉴 구성은 버전에 따라 달라집니다. 문제를 확인할 때는 먼저 ‘도움말’ → ‘정보’에서 클라이언트 정보를 보고, 메인 화면의 시작 로그에서 실제로 실행된 코어 이름과 버전을 확인하세요. 사용 중인 빌드에서 버전 정보가 다른 메뉴에 있다면 실제 인터페이스를 기준으로 확인하면 됩니다.
- 클라이언트 기록: ‘최신 버전’이라고만 적지 말고 v2rayN, v2rayNG 또는 v2flyNG의 전체 버전을 기록하세요.
- 코어 기록: 코어 시작 로그에서 버전을 확인하세요. 클라이언트 버전 번호를 코어 버전 항목에 적지 마세요.
- 노드 조합 기록: 노드 메모 이름만 적지 말고 VLESS, TCP, REALITY, Vision 등 항목을 각각 기록해 확인하세요.
- 시작 결과 기록: ‘설정 파싱 실패’, ‘로컬 포트 수신 성공’, ‘원격 핸드셰이크 성공’을 구분하세요. 각 상태의 의미는 서로 다릅니다.
안드로이드 클라이언트에서 VPN 권한은 로컬 가상 네트워크 인터페이스를 만들어 트래픽이 프록시 처리 경로로 들어가게 합니다. 서버 프로토콜이 바뀌는 것은 아닙니다. 데스크톱의 시스템 프록시와 TUN도 트래픽을 전달하는 방식이며, 노드 프로토콜 호환성 확인을 대신하지 않습니다.
4. 이름으로 순위를 매기지 말고 노드 요구사항에 맞춰 코어 선택하기
먼저 플랫폼을 확인한 다음 구독 안내나 노드 편집 화면을 살펴보세요. 아래 추천은 노드에서 REALITY 또는 Vision을 요구하는 경우를 전제로 합니다. 서버에서 바로 사용할 수 있는 V2Fly 설정을 제공했다면, 먼저 코어를 바꾸고 문제를 찾기보다 기존 설정의 의미를 유지하는 편이 좋습니다.
Xray 코어 사용
권장노드에 VLESS + REALITY 또는 Vision이 명시되어 있다면 해당 조합을 지원하는 Xray 버전을 선택하세요. 데스크톱에서는 v2rayN에서 실제 코어를 확인하고, 안드로이드에서는 v2rayNG를 선택해 필요한 매개변수를 설정할 수 있는지 확인하세요.
적합한 경우: 기존 REALITY 또는 Vision 노드에서 해당 기능을 지원하는 코어가 필요한 경우
V2Fly 코어 사용
사용 가능한 V2Fly 설정이 있거나 서버가 V2Fly에 맞춰 구성되어 있다면 우선 해당 코어를 계속 사용하세요. 안드로이드에서는 v2flyNG를 사용할 수 있으며, 데스크톱에서는 현재 v2rayN 빌드가 해당 코어를 지원하는지 먼저 확인해야 합니다.
적합한 경우: 기존 V2Fly 설정을 유지하고 서버와 클라이언트 설정의 일관성을 중시하는 경우
결론: 구독에 REALITY가 명시되어 있다면 Xray 지원 여부부터 확인하세요
노드 편집 화면을 열어 공개 키, 서버 이름, 짧은 ID, 플로우 제어 등 서버에서 요구하는 항목을 확인한 다음 실제로 실행 중인 코어를 살펴보세요. 프로토콜이 맞지 않는다고 VMess로 임의 변경하거나 보안 검증을 끄는 방식으로 ‘수정’하지 마세요.
일반 VMess 노드만 있다면 두 코어 모두 요구사항을 충족할 수 있지만, 구체적인 전송 방식과 코어 버전은 확인해야 합니다. 이때 같은 기기와 노드에서 시간대를 비슷하게 맞춰 웹페이지 로딩과 연결 안정성을 비교하고, 한 번에 변수 하나만 바꾸세요. 지역이나 노드가 다른 속도 비교만으로 코어의 우열을 판단할 수는 없습니다.
5. 구독 가져오기부터 트래픽 전달까지: 실제 설정 흐름
구독은 코어 설정 파일과 같은 뜻이 아닙니다. 클라이언트가 먼저 구독 내용을 가져온 뒤 노드 정보로 해석하고, 로컬 포트·DNS·라우팅 규칙을 결합해 실행 설정을 만듭니다. 구독이 업데이트된다는 것은 가져오기와 해석 과정이 적어도 일부 성공했다는 뜻일 뿐, 모든 노드에 연결할 수 있다는 의미는 아닙니다.
- 구독 가져오기: v2rayN의 ‘구독 그룹’ → ‘구독 그룹 설정’에서 주소를 추가한 다음, ‘구독 그룹’ 메뉴에서 업데이트를 실행하세요. 버전에 따라 메뉴 문구가 조금 다를 수 있습니다.
- 노드 확인: 서버 주소, 원격 포트, 사용자 ID, 전송 및 보안 설정을 확인하세요. REALITY 노드는 서버에서 제공한 관련 매개변수도 확인해야 합니다.
- 코어 시작: 원격 연결을 확인하기 전에 로그에서 설정 파싱 오류, 누락된 파일, 포트 사용 중 여부를 살펴보세요.
- 앱 트래픽 연결: 시스템 프록시를 사용한다면 앱이 시스템 프록시를 따르는지 확인하세요. TUN을 사용한다면 권한, 라우팅, DNS도 별도로 점검해야 합니다.
- 분할 라우팅 확인: 직접 연결해야 하는 대상과 프록시를 거쳐야 하는 대상을 각각 방문하고, 상태 표시줄 아이콘만 보지 말고 연결 로그에서 아웃바운드 선택을 확인하세요.
아래 두 포트는 위치 관계를 설명하기 위한 예시이며 모든 설치 환경의 기본값은 아닙니다. 클라이언트가 로컬에서 127.0.0.1:10808을 수신하고 원격 노드가 443을 수신한다고 가정해 보겠습니다. 앱은 먼저 로컬 클라이언트에 연결한 다음 코어가 원격 서버에 연결합니다. 두 포트 번호가 같을 필요는 없으며, 예시를 그대로 따라 서버 매개변수를 바꾸지 마세요.
로그에서 로컬 수신 주소가 사용 중이라고 나오면 기기의 프로세스나 로컬 포트를 확인하세요. 원격 연결 시간 초과가 표시되면 원격 주소, 네트워크 연결 가능 여부, 서버 상태를 확인해야 합니다. 로컬 포트를 바꿔도 서버 핸드셰이크 매개변수 오류는 해결되지 않으며, 코어를 바꿔도 잘못된 서버 이름이 자동으로 수정되지는 않습니다.
6. 자주 묻는 클라이언트 선택 및 전환 질문
v2rayN에서 노드를 가져오기는 되는데, 시작할 때 지원하지 않는 필드라고 나옵니다. 이유가 무엇인가요?
가져오기는 클라이언트가 처리하지만, 실행은 코어가 담당합니다. 먼저 시작 로그에서 코어 이름과 버전을 확인한 다음 오류에 표시된 필드와 코어 선택을 대조하세요. 노드에서 REALITY 또는 Vision을 요구한다면 클라이언트 인터페이스만 업데이트하지 말고 해당 기능을 지원하는 Xray가 실제로 실행 중인지 확인하세요.
안드로이드에 v2flyNG를 설치했는데 REALITY 노드는 어떻게 사용해야 하나요?
먼저 기존의 정상 작동 설정을 보존한 다음 노드 요구사항에 맞는 조합을 지원하는 v2rayNG를 사용하세요. 다시 가져온 뒤 서버 이름, 공개 키, 짧은 ID, 플로우 제어를 하나씩 확인합니다. 전환을 테스트하기 전에 기존 클라이언트의 VPN 연결을 끊어 트래픽 처리 충돌을 프로토콜 문제로 오인하지 않도록 하세요.
코어를 전환한 뒤 기존 라우팅 규칙을 그대로 사용할 수 있나요?
먼저 설정을 백업한 뒤 대상 코어가 규칙 형식, 규칙 리소스 파일, DNS 설정을 지원하는지 확인하세요. 실행 설정 전체를 그대로 복사하기보다 클라이언트 인터페이스에서 규칙을 다시 만들거나 변환하는 편이 안전합니다. 전환 후에는 명확한 도메인 규칙 하나로 아웃바운드를 확인하고 복잡한 규칙 집합을 다시 적용하세요.
노드 지연 시간이 표시되면 코어를 제대로 선택한 건가요?
반드시 그렇지는 않습니다. TCP 지연 시간 테스트는 원격 포트에 일부 연결할 수 있는지만 보여 주며, 프록시 인증과 보안 핸드셰이크 성공 여부를 증명하지는 않습니다. 클라이언트에서 제공하는 실제 연결 테스트를 실행하고 핸드셰이크 로그를 확인한 다음 브라우저에서 대상 페이지가 열리는지 검증하세요.
전환할 때 정상 작동이 확인된 노드와 설정을 하나 보관하고, 코어·노드 매개변수·라우팅 중 한 항목씩만 변경하세요. 도움을 요청할 때는 클라이언트 버전, 코어 버전, 노드 프로토콜 조합, 개인정보를 가린 오류 내용을 제공하면 됩니다. 구독 주소, 사용자 ID, 비공개 매개변수는 공개하지 마세요.