2026년 6월 25일 · 오픈소스 생태계 · 약 12분

V2Fly, Xray 및 클라이언트의 관계: Project V 오픈소스 생태계 한눈에 보기

Project V의 역사부터 V2Fly와 Xray 두 커널 계열의 역할, 라이선스와 유지보수 현황을 정리하고 v2rayN·v2rayNG·v2flyNG가 어떤 커널을 사용하는지 살펴봅니다.

이 글 빠르게 훑어보기

V2Fly와 Xray는 공통 기술 기반에서 발전한 두 커널 계열이며, v2rayN·v2rayNG·v2flyNG는 설정, 구독, 시스템 프록시를 관리하는 클라이언트입니다. 이 이름들의 계층이 헷갈리는 사용자라면 현재 어떤 커널을 실행 중인지, 구독이 호환되는지, 업그레이드할 때 어느 계층을 확인해야 하는지 파악할 수 있습니다.

먼저 헷갈리기 쉬운 네 가지 개념부터 나누어 보겠습니다

결론부터 말하면 Project V는 생태계의 배경이고, V2Fly와 Xray는 커널 계열입니다. VMess와 VLESS는 프로토콜 또는 설정 기능이며, v2rayN·v2rayNG·v2flyNG가 사용자가 직접 조작하는 클라이언트입니다. 서로 다른 계층이므로 단순 비교할 수 없습니다.

커널은 실제 데이터 처리를 담당합니다. 인바운드, 아웃바운드, DNS, 라우팅, 전송 설정을 읽고 로컬 포트를 연 다음 규칙에 따라 트래픽의 목적지를 결정합니다. 예를 들어 클라이언트에서 로컬 SOCKS 인바운드를 127.0.0.1:10808로 설정하면 실제 연결을 수신하고 도메인 규칙을 적용해 원격 연결을 만드는 것은 버튼이 아니라 커널입니다.

클라이언트 인터페이스는 복잡한 설정을 조작 가능한 메뉴로 바꿔 줍니다. 구독 추가, 노드 선택, 시스템 프록시 전환, 로그 확인, 커널 설정 생성은 대개 클라이언트가 처리합니다. 인터페이스를 닫은 뒤에도 연결이 유지되는지는 클라이언트의 실행 방식과 커널 프로세스가 계속 실행 중인지에 따라 달라집니다.

2015
Project V 초기 프로젝트의 출발점
2020
두 커널 노선이 점차 분명해지다
두 계열
V2Fly와 Xray
10808
일반적인 로컬 SOCKS 예시 포트

이름이 속한 계층

결론: 먼저 계층을 확인한 뒤 문제를 점검하세요

가져오기에 실패했다면 먼저 클라이언트가 구독을 인식하는지 확인하고, 실행에 실패했다면 커널 로그를 확인하세요. 웹사이트별 분기가 예상과 다르면 라우팅과 DNS를 점검해야 합니다. 세 문제를 한꺼번에 다루면 설정 오류를 찾지 못한 채 프로그램만 반복해서 재설치하기 쉽습니다.

Project V는 어떻게 V2Fly와 Xray 두 노선으로 나뉘었나

Project V 초기에는 V2Ray가 핵심 이름이었으며, 인바운드·아웃바운드·라우팅·DNS·하위 전송 계층을 조합 가능한 모듈로 나누는 데 중점을 두었습니다. 사용자가 보는 inbounds, outbounds, routing.rules 같은 설정 구조가 바로 이 설계 철학을 보여 줍니다.

2020년 전후로 기존 커뮤니티의 유지보수 조직과 기여 방식에 변화가 생겼습니다. V2Fly 커뮤니티는 v2ray-core를 계속 유지보수하며 호환성, 모듈 유지관리, 기존 설정의 발전에 초점을 맞췄습니다. Xray-core는 공통 기술 기반에서 독립적으로 발전해 자체적인 릴리스 주기, 확장 기능 및 구현 방향을 갖추게 되었습니다.

‘공통된 출처’가 오늘날 ‘완전히 동일하다’는 뜻은 아닙니다. 두 계열은 인바운드·아웃바운드·라우팅 규칙·VMess·VLESS·SOCKS·HTTP 로컬 인바운드 등 여러 개념을 공유하지만, 구체적인 필드와 기본값, 전송 확장 기능 및 새 기능 지원 시점은 다를 수 있습니다. 설정을 복사할 때 커널이 실행된다고 해서 모든 필드가 예상대로 적용된다는 의미는 아닙니다.

비교 항목 V2Fly 계열 Xray 계열
일반적인 핵심 이름 v2ray-core Xray-core
버전 확인 현재는 대체로 5.x 버전 계열 현재는 대체로 1.x 버전 계열
주요 라이선스 MIT MPL-2.0
설정 기반 JSON 설정 및 모듈식 인바운드·아웃바운드 JSON 설정 및 모듈식 인바운드·아웃바운드
호환성 판단 프로토콜, 전송, 보안 매개변수 및 버전을 확인 프로토콜, 전송, 보안 매개변수 및 버전을 확인
권장 방법 검증된 V2Fly 설정을 계속 사용할 때는 같은 커널 계열 유지 구독에서 Xray 기능을 명시적으로 요구하면 해당 요구에 맞춰 사용

라이선스 차이는 무엇을 의미하나

MIT와 MPL-2.0은 모두 코드를 공개적으로 사용·연구·재배포할 수 있도록 허용하지만, 2차 개발 시 필요한 고지와 소스 공개 의무는 서로 다릅니다. 일반 사용자가 클라이언트를 설치할 때 이를 기준으로 선택할 필요는 대체로 없습니다. 개발자가 커널을 자신의 프로그램에 포함하거나 소스 코드를 수정·재배포할 때는 프로젝트에 함께 제공된 라이선스 전문을 항목별로 확인해야 합니다.

클라이언트에도 자체 라이선스가 있습니다. v2rayN·v2rayNG·v2flyNG는 현재 흔히 배포되는 코드가 GPL-3.0을 따르며, 클라이언트 라이선스와 커널 라이선스는 별도로 이해해야 합니다. 인터페이스에 적용된 라이선스가 호출하는 독립 커널의 라이선스까지 자동으로 바꾸지는 않습니다.

결론: 호환성은 계열의 명성이 아니라 설정 기능으로 판단하세요

기존 노드가 안정적으로 작동한다면 다른 노선에 새 기능이 추가되었다는 이유만으로 즉시 전환할 필요는 없습니다. 구독에서 특정 전송 필드를 명시적으로 요구하거나, 현재 커널이 설정을 인식하지 못하거나, 로그에 기능 미지원이 표시될 때만 커널 전환을 고려할 근거가 생깁니다.

v2rayN·v2rayNG·v2flyNG는 각각 어떤 커널을 사용하는가

v2rayN은 Windows·macOS·Linux를 지원하는 데스크톱 클라이언트입니다. 프로토콜도 아니고 특정 커널을 가리키는 별칭도 아닙니다. 7.x 버전 계열은 구독, 라우팅, 시스템 프록시, TUN 및 커널 관리 기능을 제공하며, 일반적으로 Xray-core로 실행됩니다. 해당 설정에서 지원되는 V2Fly 커널을 선택할 수도 있습니다.

v2rayNG는 Android 클라이언트로 주로 Xray-core를 호출합니다. 공유 링크, 구독 그룹, 라우팅 설정 및 VPN 서비스 진입점을 모바일 인터페이스에 모아 제공합니다. v2flyNG 역시 Android용이지만 V2Fly 노선의 커널을 사용합니다. 두 앱의 인터페이스가 비슷해도 커널의 출처와 기능 지원 시점까지 같다는 뜻은 아닙니다.

구독 서비스가 제공하는 것은 노드 데이터이며 특정 클라이언트가 기기에 함께 설치되는 것은 아닙니다. 표준 VMess 또는 VLESS 공유 링크는 여러 클라이언트에서 인식될 수 있지만, 특정 전송 확장 기능이 포함되면 커널 지원 여부를 확인해야 합니다. 노드 이름이 표시된다는 것은 링크 해석에 성공했다는 뜻일 뿐, 연결 매개변수가 완전히 지원된다는 의미는 아닙니다.

클라이언트 플랫폼 주요 커널 관계 적합한 사용 환경
v2rayN Windows、macOS、Linux 데스크톱에서 지원되는 커널을 관리할 수 있으며, 일반적으로 Xray-core를 사용 데스크톱 구독 관리, 시스템 프록시, 라우팅 및 TUN
v2rayNG Android Xray-core 구독이 Xray에 맞게 명시적으로 제공되거나 해당 기능이 필요한 경우
v2flyNG Android v2ray-core V2Fly 노선을 사용하며 같은 커널 계열로 일관되게 유지

현재 실행 중인 커널 확인 방법

  1. 버전 확인

    v2rayN 7.x에서 「도움말」→「정보」를 열어 먼저 클라이언트 버전을 기록하세요. 클라이언트 버전과 커널 버전은 서로 독립적인 숫자이므로 하나로 섞어 쓰지 마세요.

  2. 종류 확인

    「설정」→「매개변수 설정」→「Core 유형」으로 이동해 현재 노드 설정에 적용된 커널을 확인하세요. 세부 버전에 따라 항목 위치는 달라질 수 있지만, 이름에는 대개 Core 또는 커널이 포함됩니다.

  3. 로그 확인

    노드를 시작한 뒤 실행 로그를 열면 첫 부분에 보통 Xray 1.x 또는 V2Ray 5.x가 표시됩니다. 클라이언트 아이콘으로 추측하는 것보다 훨씬 정확합니다.

  4. 모바일에서 확인

    v2rayNG 또는 v2flyNG에서 「설정」→「정보」로 이동해 클라이언트 버전을 기록하세요. 그런 다음 시작 로그에서 커널 이름과 버전 번호를 확인합니다.

  5. 인바운드 테스트

    로그에 로컬 인바운드가 실제로 수신 대기 중인지 확인하세요. 일반적인 SOCKS 예시는 127.0.0.1:10808입니다. 포트가 사용 중이라는 메시지가 나오면 포트를 바꾸거나 해당 포트를 점유한 기존 프로세스를 종료해야 합니다.

구독·프로토콜·커널 호환성 판단 방법

구독은 보통 여러 노드 항목으로 구성됩니다. 클라이언트가 구독을 업데이트하면 먼저 VMess·VLESS 등의 공유 내용을 해석한 다음 커널이 읽을 수 있는 설정을 생성합니다. 이 과정에는 두 가지 관문이 있습니다. 클라이언트가 구독 형식을 인식해야 하고, 커널이 변환된 프로토콜과 전송 매개변수를 지원해야 합니다.

VLESS를 예로 들면 vless://로 시작한다는 사실만으로는 충분하지 않습니다. 서버 주소, 포트, 사용자 식별자, 암호화 필드, 전송 방식, 서버 이름과 보안 계층 매개변수도 확인해야 합니다. 핵심 필드가 하나라도 빠지면 연결 시간 초과, 핸드셰이크 실패 또는 설정 오류가 로그에 나타날 수 있습니다.

VMess도 ‘V2Ray만 지원하면 반드시 연결된다’고 볼 수 없습니다. 시스템 시간 오차, 잘못된 사용자 식별자, 서로 다른 전송 경로, 잘못된 TLS 서버 이름이 모두 실패 원인이 될 수 있습니다. 문제를 점검할 때는 로그의 첫 번째 오류부터 확인하고 DNS·라우팅·프로토콜 매개변수를 동시에 바꾸지 마세요.

routing-example.json
{
  "inbounds": [{
    "listen": "127.0.0.1",
    "port": 10808,
    "protocol": "socks"
  }],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [{
      "type": "field",
      "ip": ["geoip:private"],
      "outboundTag": "direct"
    }]
  }
}

호환성 확인 4단계

  1. 먼저 해석 확인: 구독을 업데이트한 뒤 노드가 나타나는지, 노드 주소와 포트가 완전한지 확인합니다. 노드가 전혀 나타나지 않으면 대개 구독 주소, 콘텐츠 형식 또는 업데이트 과정의 문제입니다.
  2. 다음은 시작 확인: 노드를 선택한 뒤 커널 로그를 살펴보세요. 지원되지 않는 설정 필드가 있으면 로그에 연결을 시작하기 전에 오류가 바로 표시되는 경우가 많습니다.
  3. 그다음 핸드셰이크 확인: 커널은 정상적으로 시작했지만 연결에 실패했다면 프로토콜, 보안 계층, 전송 방식, 서버 이름 및 시스템 시간을 점검합니다.
  4. 마지막은 분기 확인: 노드는 연결되었지만 일부 웹사이트만 비정상이라면 DNS, 라우팅 규칙, 시스템 프록시 및 TUN을 확인하세요. 구독 형식만 계속 바꾸는 것은 피해야 합니다.

결론: 노드 표시·커널 실행·연결 성공은 서로 다른 상태입니다

목록에 노드가 나타났다는 것은 클라이언트가 해석을 완료했다는 뜻일 뿐입니다. 로그에 수신 대기 포트가 표시되면 커널이 성공적으로 시작된 것입니다. 대상 요청이 정상 응답을 받아야 프로토콜·전송·DNS·라우팅이 함께 정상 작동한다고 판단할 수 있습니다.

일반 사용자는 어떻게 선택하고 유지보수해야 하나

데스크톱에서는 우선 v2rayN을 사용하고, 커널 선택은 검증된 설정과 구독 요구사항에 맞추세요. Android에서 구독 문서가 Xray 기능을 전제로 매개변수를 제공한다면 v2rayNG를 사용하세요. 기존 설정이 V2Fly 기반으로 장기간 안정적이라면 v2flyNG를 사용해 마이그레이션 변수를 줄일 수 있습니다.

업그레이드할 때는 먼저 클라이언트 업그레이드와 커널 업그레이드를 구분하세요. 클라이언트 업그레이드는 메뉴, 구독 저장 방식, 시스템 프록시 동작을 바꿀 수 있고, 커널 업그레이드는 설정 검증, 프로토콜 구현, 라우팅 기능에 영향을 줄 수 있습니다. 한 번에 한 계층만 업그레이드해야 로그로 변화 원인을 파악하기 쉽습니다.

마이그레이션 전에 클라이언트 버전, 커널 버전, 로컬 수신 대기 포트, 현재 라우팅 모드 및 DNS 설정을 기록하세요. 데스크톱에서는 적어도 SOCKS 포트가 10808인지, 시스템 프록시 모드가 전역인지 규칙 기반인지, TUN이 활성화되어 있는지 기록해야 합니다. 구독 링크만 저장해서는 이러한 로컬 옵션을 완전히 복원할 수 없습니다.

v2rayN은 곧 V2Fly 커널인가요?

아닙니다. v2rayN은 데스크톱 클라이언트이며 7.x 버전 계열에서 커널과 설정을 관리할 수 있습니다. 「설정」→「매개변수 설정」→「Core 유형」으로 이동한 뒤 시작 로그에서 실제로 Xray-core가 실행 중인지 v2ray-core가 실행 중인지 확인하세요.

하나의 구독을 세 클라이언트에 모두 가져올 수 있나요?

표준 VMess·VLESS 항목은 대개 여러 클라이언트에서 해석할 수 있지만, 특정 전송 필드가 반드시 호환되는 것은 아닙니다. 가져온 뒤 먼저 노드 수를 확인하고, 하나씩 실행해 로그를 읽으세요. ‘표시 성공’을 ‘완전 지원’으로 간주해서는 안 됩니다.

커널을 바꾼 뒤 기존 설정이 실행되지 않는 이유는 무엇인가요?

먼저 로그에서 unknown field, invalid value, unsupported 같은 오류를 찾은 다음 전송·보안 계층·라우팅 필드를 확인하세요. 기존 커널로 되돌렸을 때 실행된다면 문제는 구독 계정보다 설정 차이에 있을 가능성이 큽니다.

포트 10808이 사용 중이면 어떻게 처리하나요?

먼저 백그라운드에서 계속 실행 중인 기존 클라이언트나 커널 프로세스를 종료하세요. 동시에 실행해야 한다면 로컬 수신 대기 설정에서 사용되지 않는 포트로 바꾸고 브라우저 또는 시스템 프록시의 연결 대상도 함께 수정합니다.

v2rayNG와 v2flyNG를 동시에 설치해야 하나요?

대개 그럴 필요는 없습니다. 구독에서 요구하는 커널에 맞춰 한 가지를 선택하면 됩니다. 호환성을 비교해야 할 때는 각각 테스트할 수 있지만, 두 클라이언트가 동시에 Android 네트워크 연결을 제어하도록 해서는 안 됩니다.

결국 Project V는 별도로 설치해야 하는 하나의 소프트웨어가 아니라 기술 관계를 나타내는 지도입니다. V2Fly와 Xray는 커널 구현을 담당하고, 세 클라이언트는 구독·노드·라우팅·시스템 네트워크 진입점을 조작 가능한 인터페이스로 구성합니다. 문제가 생기면 클라이언트, 커널, 프로토콜, 전송, DNS, 라우팅 순서로 확인하는 편이 단순히 프로그램을 바꾸는 것보다 훨씬 명확합니다.

V2Ray 클라이언트 다운로드 시스템에 맞는 v2rayN 또는 v2rayNG 선택