이 글 빠르게 보기

이 글은 클라이언트를 고르는 중이거나 구독을 가져온 뒤 코어 호환성 문제를 겪는 사용자, V2Ray·V2Fly·Xray의 차이가 헷갈리는 사용자에게 적합합니다. 프로젝트, 코어, 클라이언트, 프로토콜이 각각 어느 계층에 속하는지 파악하고 v2rayN에서 Core 유형, 로그 버전, 리슨 포트와 실제 실행 상태를 확인하는 방법까지 알아봅니다.

Project V, V2Ray, V2Fly, Xray의 명칭과 계층

Project V는 이 기술 체계가 초기에 사용하던 프로젝트명이며, V2Ray는 그중 가장 널리 알려진 프록시 코어입니다. 많은 튜토리얼에서 둘을 같은 소프트웨어처럼 다루지만, 유지보수 포크와 설정 호환성, 클라이언트 선택을 논할 때는 프로젝트명과 실제 코어를 구분해야 합니다.

V2Ray는 2015년부터 본격적으로 공개 개발되었으며, 핵심 프로그램은 인바운드 리슨, 프로토콜 핸드셰이크, 라우팅 매칭, DNS 조회와 아웃바운드 연결을 담당합니다. 자체적으로 완전한 데스크톱 창을 제공하는 클라이언트는 아닙니다. 사용자가 보는 구독 목록, 지연 시간 테스트, 트레이 메뉴와 시스템 프록시 전환 기능은 보통 v2rayN 같은 그래픽 클라이언트가 제공합니다.

2020년 전후로 기존 생태계는 커뮤니티 중심 유지보수 단계에 들어갔고, V2Fly는 v2ray-core를 이어 가는 커뮤니티 프로젝트 체계가 되었습니다. 이후 문서에서 자주 보이는 V2Fly, v2fly-core, V2Ray 5.x는 대체로 이 커뮤니티 유지보수 계열을 가리킵니다. 이름이 바뀌었다고 기존 설정이 바로 무효가 되는 것은 아니지만, 설정 형식과 기능 모듈, 버전 지원 범위는 계속 발전합니다.

Xray는 같은 기술적 기반에서 발전한 또 다른 코어 계열입니다. inbounds, outbounds, routing, dns 등 익숙한 설정 개념을 다수 유지하면서도 독자적인 기능 개발 주기를 갖추었습니다. 두 계열은 역사적으로 연관되어 있지만, 릴리스 버전과 구현 세부 사항, 기능 지원 여부를 서로 같은 것으로 볼 수는 없습니다.

2015
V2Ray 프로젝트가 개발을 시작한 연도
2020
커뮤니티 포크가 점차 자리 잡은 시기
10808
자주 사용하는 로컬 SOCKS 리슨 포트
10809
자주 사용하는 로컬 HTTP 리슨 포트

결론: 먼저 계층을 확인하고 이름을 비교하세요

“V2Ray”라는 이름을 봤다면 생태계 전체를 가리키는지, v2fly-core 코어를 가리키는지, 아니면 클라이언트의 Core 옵션 중 하나를 가리키는지 먼저 확인하세요. 구체적인 코어와 버전까지 확인해야 프로토콜 지원 및 설정 호환성을 비교할 수 있습니다.

코어와 그래픽 클라이언트의 역할

코어는 네트워크 트래픽을 실제로 처리하는 프로그램입니다. 애플리케이션이 로컬 SOCKS 또는 HTTP 포트로 요청을 보내면 코어가 대상 도메인과 IP를 읽고, 라우팅 규칙에 따라 직접 연결·프록시·차단 중 하나를 선택한 뒤 VMess, VLESS 등의 프로토콜에 필요한 연결을 수행합니다. DNS 분기, 도메인 스니핑, 연결 로그도 주로 코어가 처리합니다.

그래픽 클라이언트는 이러한 기능을 조작 가능한 화면으로 제공합니다. 구독 주소를 저장하고, 구독 내용을 노드 목록으로 변환하며, 코어 설정을 생성하고, 코어 프로세스를 시작하거나 중지하고, 시스템 프록시를 변경합니다. 그래픽 화면을 닫은 뒤에도 계속 실행되는지는 클라이언트의 트레이 설정과 코어 프로세스 상태에 따라 달라지므로 창이 보이는지만으로 판단할 수 없습니다.

따라서 “클라이언트 버전”과 “코어 버전”은 서로 다른 숫자입니다. 예를 들어 v2rayN 7.x에서 화면에 표시되는 버전은 v2rayN의 버전이고, 실행 로그에 표시되는 Xray 25.x 또는 v2fly-core 5.x가 현재 호출된 코어의 버전입니다. 문제를 진단할 때 클라이언트 버전만 전달하면 설정 필드의 지원 여부를 판단하기에 부족한 경우가 많습니다.

계층 주요 역할 일반적으로 확인할 수 있는 내용 문제 증상
그래픽 클라이언트 구독 관리, 노드 선택, 설정 생성, 시스템 프록시 전환 서버 목록, 트레이 메뉴, 지연 시간 결과 구독이 갱신되지 않음, 노드가 선택되지 않음, 시스템 프록시가 켜지지 않음
프록시 코어 프로토콜 연결, 라우팅 분기, DNS 확인, 트래픽 전달 시작 로그, 리슨 주소, 연결 오류 설정 필드 비호환, 핸드셰이크 실패, 포트 사용 중
구독 내용 서버 주소, 포트, 사용자 식별자와 전송 매개변수 전달 VMess·VLESS 노드 및 그룹 이름 필드 누락, 만료된 매개변수, 현재 코어가 인식하지 못함

설정 안내: “시작 성공”은 코어 프로세스가 실행 중이라는 뜻일 뿐입니다. 로그에 127.0.0.1:10808 또는 클라이언트에서 설정한 실제 리슨 포트가 표시되는지 확인하고, 대상 애플리케이션이 해당 포트를 사용하는지도 점검해야 합니다.

v2rayN·v2rayNG·v2flyNG는 어떤 코어를 사용하는가

v2rayN은 데스크톱 그래픽 클라이언트로, 폭넓은 설정 관리가 강점입니다. 구독, 라우팅 규칙, 시스템 프록시와 TUN 모드를 관리할 수 있으며, Core 유형에 따라 현재 노드를 처리할 코어를 결정합니다. v2rayN 버전에 따라 선택 항목이 달라질 수 있으므로 클라이언트 이름만 보고 어떤 코어 계열이 실행 중인지 단정해서는 안 됩니다.

v2rayNG는 안드로이드 클라이언트이며, 일반적인 배포 버전은 Xray 코어를 사용합니다. 화면에서 VMess 또는 VLESS 노드를 가져오면 공유 매개변수를 Xray가 읽을 수 있는 실행 설정으로 변환합니다. 연결 가능 여부는 전송 계층, 보안 매개변수와 서버 설정에도 좌우되므로 “Xray”라는 이름만으로 모든 노드와 자동 호환된다고 볼 수 없습니다.

v2flyNG 역시 안드로이드용이지만 V2Fly 커뮤니티 코어 계열에 더 가까운 방향을 지향합니다. v2fly-core의 동작을 검증하거나 해당 설정 기능을 사용해야 할 때, 또는 모바일과 서버를 같은 코어 계열로 맞추고 싶을 때 우선 고려할 수 있습니다. 두 안드로이드 클라이언트의 화면 조작은 비슷하지만, 내부 구현과 기능 반영 속도는 각각 따로 확인해야 합니다.

클라이언트 플랫폼 특성 일반적인 코어 관계 적합한 사용 사례
v2rayN 데스크톱 지원되는 버전에서 Xray 또는 v2fly Core 선택 가능 구독 관리, 복잡한 라우팅, 시스템 프록시와 TUN
v2rayNG 안드로이드 Xray 코어 중심 Xray 기능과 일반적인 공유 링크 사용
v2flyNG 안드로이드 v2fly 코어 계열 사용 V2Fly 설정 및 실행 동작의 일관성 유지

결론: 설정 지원 범위에 맞춰 클라이언트를 선택하세요

데스크톱에서 코어를 전환하고 복잡한 규칙을 관리해야 한다면 v2rayN을 사용하세요. 안드로이드에서 Xray 계열을 선호한다면 v2rayNG를, v2fly 코어의 동작이 필요하다면 v2flyNG를 선택하면 됩니다.

v2rayN에서 Core 유형 확인 및 전환

코어를 바꾸기 전에 현재 사용할 수 있는 노드와 라우팅 설정을 기록한 다음 클라이언트 로그를 확인하세요. 로그 첫 부분에는 보통 코어 이름, 버전과 설정 로드 결과가 표시됩니다. 로그에 포트 리슨 실패만 나타난다면 10808 또는 10809를 점유한 기존 프로세스를 먼저 종료해야 하며, 프로토콜을 계속 바꿔 원인을 가려서는 안 됩니다.

아래 경로는 v2rayN 7.x의 설정 구조를 예로 든 것입니다. 마이너 버전에 따라 문구 위치는 달라질 수 있지만 확인 순서는 같습니다. 먼저 Core 유형을 확인하고, 연결을 다시 시작한 뒤, 로그로 실제 실행된 코어를 검증하세요. 드롭다운만 바꾸고 다시 연결하지 않으면 기존 코어 프로세스가 계속 트래픽을 처리할 수 있습니다.

  1. 현재 연결 중지

    v2rayN 기본 화면에서 현재 코어를 중지하고 상태 표시줄이 실행 중에서 중지됨으로 바뀔 때까지 기다리세요. 기존 프로세스가 로컬 포트를 계속 점유하지 않도록 해야 합니다.

  2. 코어 설정 열기

    「설정」→「매개변수 설정」→「Core 유형」으로 이동해 현재 노드 유형에 해당하는 코어 옵션을 확인하세요.

  3. 대상 코어 선택

    테스트 목적에 따라 Xray 또는 v2fly Core를 선택하세요. 옵션을 사용할 수 없다면 현재 클라이언트 버전에 해당 코어 파일이 포함되어 있는지 먼저 확인하세요.

  4. 노드에 다시 연결

    설정을 저장한 뒤 서버 목록으로 돌아가 기존 노드를 선택하고 다시 시작하세요. 프로토콜, 라우팅, DNS를 동시에 바꾸면 차이의 원인을 찾기 어렵습니다.

  5. 시작 로그 확인

    로그 창을 열어 코어 이름과 버전이 변경되었는지 확인하고, SOCKS 포트 10808, HTTP 포트 10809 또는 사용자 지정 포트가 정상적으로 리슨되는지 점검하세요.

주의: Core 유형은 최신일수록 좋은 것이 아닙니다. 구독 노드가 특정 필드에 의존하는 경우 전환 후 “unknown field”, “failed to parse config” 또는 아웃바운드 생성 실패가 나타나면 기존 코어로 되돌린 다음 설정 지원 범위를 항목별로 확인하세요.

프로토콜·구독·라우팅을 구분해야 하는 이유

VMess와 VLESS는 클라이언트와 서버가 프록시 연결을 설정하는 방식을 설명하고, 구독은 노드 매개변수를 일괄 배포하는 방식을 설명하며, 라우팅 분기는 로컬 트래픽을 어느 아웃바운드로 보낼지 결정합니다. 세 가지는 서로 다른 계층에 있습니다. 구독 업데이트 성공은 클라이언트가 내용을 받았다는 뜻일 뿐, 모든 노드를 현재 코어가 해석하고 연결할 수 있다는 의미는 아닙니다.

예를 들어 브라우저가 도메인에 접속할 때 요청은 먼저 로컬 HTTP 포트 10809로 들어간 뒤 코어에서 도메인 스니핑과 DNS 조회가 진행될 수 있습니다. 라우팅 규칙이 직접 연결과 일치하면 구독 노드를 사용하지 않고, 프록시와 일치할 때만 VMess 또는 VLESS 아웃바운드로 전달됩니다. 이때 연결 결과는 주소, 포트, 전송 계층과 서버 설정의 영향도 받습니다.

DNS는 부수적인 스위치가 아닙니다. 로컬 도메인 조회 결과가 라우팅 규칙의 예상과 다르면 코어 비호환으로 잘못 판단할 수 있습니다. V2Fly와 Xray를 비교할 때는 같은 노드, 같은 DNS, 동일한 라우팅 규칙과 테스트 대상을 사용하고 매번 Core 유형만 바꿔야 결과를 참고할 수 있습니다.

개념 답하는 질문 일반적인 설정 확인 방법
VMess、VLESS 프록시 연결을 어떤 프로토콜로 설정하는가 주소, 포트, 사용자 식별자, 전송 및 보안 매개변수 핸드셰이크 및 아웃바운드 로그 확인
구독 노드를 클라이언트에 어떻게 일괄 추가하는가 구독 주소, 그룹, 업데이트 정책 업데이트 시각과 노드 수 확인
라우팅 분기 특정 요청을 직접 연결·프록시·차단 중 어디로 보낼지 도메인 규칙, IP 규칙, 인바운드 태그 규칙 매칭과 아웃바운드 태그 확인
DNS 도메인을 어느 리졸버가 조회하는가 서버 그룹, 조회 정책, 매칭 도메인 조회 결과와 코어 로그 비교

결론: 한 번에 변수 하나만 바꾸세요

V2Fly와 Xray를 비교할 때 노드, DNS, 라우팅과 로컬 포트를 고정하고 Core 유형만 바꾼 뒤 같은 대상에 반복 접속하세요. 구독을 동시에 갱신하거나 규칙을 수정하면 차이가 어느 단계에서 발생했는지 알 수 없습니다.

클라이언트 선택 시 확인할 설정 사실 다섯 가지

일반 사용자가 프로젝트의 역사를 기준으로 편을 가를 필요는 없습니다. 연결에 실제로 영향을 주는 것은 현재 클라이언트가 설정을 올바르게 생성하는지, 코어가 구독 필드를 인식하는지, 서버가 같은 매개변수를 지원하는지, 로컬 라우팅과 DNS가 사용 환경에 맞는지입니다. 이름보다 실제 설정을 기준으로 선택하는 편이 안정적입니다.

첫째는 프로토콜과 전송 매개변수입니다. 노드가 VMess 또는 VLESS로 표시되어도 TCP, WebSocket, gRPC 등의 전송 방식과 해당 보안 설정을 확인해야 합니다. 둘째는 코어 버전입니다. 같은 코어 계열의 오래된 버전에는 새로운 필드가 없을 수 있습니다. 셋째는 클라이언트의 변환 로직입니다. 공유 링크를 가져온 뒤 노드 편집 화면에서 주소, 포트와 전송 매개변수를 확인해야 합니다.

넷째는 로컬 트래픽 처리 방식입니다. 시스템 프록시는 시스템 프록시 설정을 따르는 애플리케이션에만 영향을 주지만, TUN 모드는 가상 네트워크 인터페이스를 통해 더 많은 트래픽을 처리합니다. 다섯째는 라우팅과 DNS입니다. 코어를 테스트할 때는 간단한 규칙을 잠시 사용하고 기본 연결을 확인한 뒤 도메인 그룹, IP 규칙과 사용자 지정 DNS를 복원하면 문제를 좁히는 데 도움이 됩니다.

  1. 클라이언트 로그에 코어 이름과 버전 계열을 기록하고 그래픽 클라이언트 버전만 기록하지 마세요.
  2. 노드 편집 화면에서 서버 주소, 원격 포트, 프로토콜, 전송 및 보안 매개변수를 확인하세요.
  3. 로컬 리슨 주소가 127.0.0.1인지 확인하고 SOCKS와 HTTP의 실제 포트를 기록하세요.
  4. 같은 대상을 직접 연결 규칙과 프록시 규칙으로 각각 테스트하고 아웃바운드 태그가 예상과 일치하는지 확인하세요.
  5. 조회 문제가 발생하면 DNS 로그를 따로 확인하고 곧바로 노드 속도나 코어 포크 탓으로 돌리지 마세요.

테스트 권장 사항: 처음 비교할 때는 같은 작업을 연속 세 차례 수행하고, 매번 연결 성공 여부·첫 응답 시간·로그 오류를 기록하세요. 세 차례 모두 같은 단계에서 실패할 때 해당 설정 필드의 호환성을 점검하세요.

자주 발생하는 문제와 구체적인 해결 방법

이름이 비슷해서 생기는 문제는 대체로 세 가지입니다. 그래픽 클라이언트를 코어로 착각하는 경우, 구독 가져오기에 성공한 것을 노드 사용 가능으로 오해하는 경우, Core를 바꾼 뒤 로그를 확인하지 않는 경우입니다. 아래 문제는 모두 클라이언트 화면과 로컬 로그로 1차 원인을 파악할 수 있습니다.

v2rayN을 설치하면 반드시 V2Fly가 실행되나요?

그렇지 않습니다. 「설정」→「매개변수 설정」→「Core 유형」에서 선택 항목을 확인하고, 다시 연결한 뒤 시작 로그에서 실제로 Xray가 실행되는지 v2fly Core가 실행되는지 확인하세요.

같은 구독인데 어떤 노드는 연결되고 어떤 노드는 연결되지 않는 이유는 무엇인가요?

노드 편집 화면을 하나씩 열어 프로토콜, 원격 포트, 전송 방식과 보안 매개변수를 비교하세요. 구독은 설정을 일괄 전달할 뿐이며, 노드마다 필요한 코어 기능이나 서버 버전이 다를 수 있습니다.

코어를 바꾼 뒤 포트가 사용 중이라고 나오면 어떻게 하나요?

먼저 현재 코어를 중지하고 남아 있는 프로세스를 종료한 뒤 10808과 10809를 다른 프로그램이 리슨하고 있는지 확인하세요. 매개변수 설정에서 사용 중이지 않은 포트로 변경한 다음 저장하고 다시 시작할 수도 있습니다.

노드는 연결되었는데 브라우저 트래픽이 흐르지 않으면 어떻게 하나요?

먼저 시스템 프록시가 켜져 있는지 확인하고 브라우저가 별도의 프록시 설정을 사용하는지도 점검하세요. 수동으로 설정할 때 HTTP 프록시에는 클라이언트에 표시된 HTTP 포트를, SOCKS5에는 해당 SOCKS 포트를 입력해야 합니다.

안드로이드에서는 v2rayNG와 v2flyNG 중 무엇을 선택해야 하나요?

구독이 Xray 기능에 명확히 의존한다면 v2rayNG를 우선 테스트하세요. v2fly-core 환경과 동작을 맞춰야 한다면 v2flyNG를 선택하세요. 가져온 뒤에도 노드 필드를 확인하고 실제 연결 테스트를 수행해야 합니다.

정리하면 Project V는 생태계의 역사를 이해하는 출발점이고, V2Fly와 Xray는 서로 다른 유지보수 경로로 발전한 코어 계열이며, v2rayN·v2rayNG·v2flyNG는 사용자가 직접 조작하는 클라이언트입니다. 선택할 때는 먼저 플랫폼과 클라이언트를 확인하고, 실제 실행 코어를 파악한 뒤 프로토콜·구독·라우팅·DNS를 점검하세요. 이름을 구분하고 나면 대부분의 호환성 문제를 구체적인 설정 하나나 로그 한 줄로 좁힐 수 있습니다.