· 프로토콜 해설 · 약 9분

VMess와 VLESS 차이: 프로토콜 선택 전 알아둘 점

VMess와 VLESS의 암호화, 시간 검증, 전송 방식 차이를 1분 만에 정리하고 클라이언트에 표시되는 노드를 어떻게 이해하고 선택할지 알아봅니다.

핵심 요약

VMess와 VLESS는 프록시 프로토콜이지 클라이언트 이름이 아닙니다. VMess는 프로토콜 자체의 데이터 암호화 옵션과 시간에 의존하는 인증 방식을 제공합니다. VLESS 기본 프로토콜은 페이로드를 암호화하지 않으며, 보통 TLS 또는 REALITY와 함께 사용합니다. 구독을 이미 이용 중이라면 프로토콜 이름만 보고 속도나 보안을 판단하지 말고, 먼저 클라이언트가 전체 설정을 인식하는지 확인한 뒤 실제 연결 상태를 비교하세요.

프로토콜·전송 방식·보안 계층의 차이

V2Ray 프로토콜을 선택할 때는 먼저 세 가지 계층을 구분해야 합니다. VMess나 VLESS는 프록시 요청과 사용자 인증을 처리하고, TCP·WebSocket·gRPC 등은 연결을 전달하는 방식을 정합니다. TLS나 REALITY는 이에 맞는 보안 기능을 제공합니다. 같은 VLESS 노드라도 전송 방식과 보안 설정은 다를 수 있습니다. 프로토콜이 같다고 해서 나머지 설정까지 두 노드에서 함께 사용할 수 있는 것은 아닙니다.

V2Ray 클라이언트는 설정을 편집하고 구독을 관리하며 연결을 제어하는 인터페이스입니다. 프록시 프로토콜을 실제로 처리하는 것은 코어입니다. v2rayN은 데스크톱 클라이언트이고, v2rayNG는 Xray 코어를 사용하는 안드로이드 클라이언트이며, v2flyNG는 V2Fly 코어를 사용합니다. 특정 노드에 연결할 수 있는지는 클라이언트 이름에 ‘v2ray’가 있는지가 아니라 코어가 전체 설정 조합을 지원하는지로 확인해야 합니다.

설정 계층일반적인 표시 값확인할 항목
프록시 프로토콜VMess、VLESS프로토콜 유형, UUID 및 해당 프로토콜에 필요한 추가 필드
연결 대상서버 주소, 포트주소와 원격 수신 포트(예: 제공업체가 지정한 443)
전송 방식TCP、WebSocket、gRPCWebSocket 경로와 Host 또는 gRPC 서비스 이름
보안 설정TLS、REALITY서버 이름과 해당 인증서 또는 REALITY 매개변수
흐름 제어 설정빈 값, xtls-rprx-vision서버 설정에서 요구하는지 확인하고 임의로 추가하지 마세요

예를 들어 ‘VLESS + TCP + REALITY + Vision’은 하나의 설정 조합입니다. Vision은 흐름 제어 설정이며 VLESS와 동급인 별도의 프로토콜이 아닙니다. REALITY도 WebSocket의 다른 이름이 아닙니다. 서버에서 이 조합을 제공했다면 전송 방식을 WebSocket으로 바꾸면서 기존 매개변수를 그대로 사용할 수 없습니다.

VMess와 VLESS의 주요 차이

VMess는 연결에 UUID만 붙이는 방식이 아닙니다. 자체 인증 및 데이터 보호 기능이 있으며, 일반적인 데이터 암호화 옵션으로 auto, aes-128-gcm, chacha20-poly1305 등이 있습니다. 실제 설정에서는 페이로드 암호화를 사용하지 않을 수도 있으므로 ‘모든 VMess 데이터는 프로토콜 계층에서 반드시 암호화된다’고 보는 것도 정확하지 않습니다. 외부 TLS 사용 여부는 보안 설정에서 별도로 확인해야 합니다.

VLESS 기본 프로토콜은 더 간결한 요청 구조를 사용하며 페이로드를 암호화하지 않습니다. 일반적인 노드 설정의 encryption=none은 정상적인 값이며, 연결 전체가 평문이라는 뜻은 아닙니다. 외부 TLS 또는 REALITY가 보안을 제공할 수 있습니다. 반대로 적절한 보안 계층이 없다면 UUID를 입력했다는 이유만으로 연결이 암호화된다고 생각해서는 안 됩니다.

비교 항목VMessVLESS 기본 프로토콜
사용자 식별자일반적으로 UUID 사용일반적으로 UUID 사용
페이로드 암호화프로토콜 계층 암호화 옵션 제공, 설정에 따라 다름제공하지 않으며 외부 보안 설정에 의존하는 경우가 많음
시간 의존성인증을 위해 클라이언트와 서버의 시간이 가까워야 함기본 인증에 VMess와 같은 시간 허용 범위를 사용하지 않음
일반적인 조합VMess + WebSocket + TLSVLESS + WebSocket + TLS 또는 VLESS + TCP + REALITY
서로 바꿔 쓸 수 있는가불가능합니다. 서버와 클라이언트의 프로토콜이 일치해야 합니다

최신 VMess 설정은 일반적으로 AEAD 인증을 사용하며, alterId는 흔히 0으로 설정합니다. 오래된 온라인 가이드에 나온 0이 아닌 값은 새 노드에 그대로 적용하지 마세요. VLESS에는 이에 대응하는 alterId 설정이 없으며 VMess 암호화 옵션을 가져다 써서도 안 됩니다. 구독에 올바른 매개변수가 이미 포함되어 있다면 하나씩 추측해 바꾸기보다 원래 값을 유지하는 편이 안전합니다.

시간 검증: VMess 연결 실패 시 시스템 시계부터 확인

VMess 인증은 시간에 영향을 받습니다. 일반적인 구현에서는 클라이언트와 서버의 시간 차이가 약 120초 이내여야 하지만, 정확한 기준은 사용하는 코어에 따라 다릅니다. 컴퓨터 절전 후 시계가 어긋나거나 기기에서 자동 시간 설정이 꺼져 있거나 서버 시간이 잘못된 경우 인증에 실패할 수 있습니다. 노드 포트를 443에서 80으로 바꾸는 것으로 해결할 수 있는 문제는 아닙니다.

  1. Windows: ‘설정’ → ‘시간 및 언어’ → ‘날짜 및 시간’으로 이동해 ‘시간 자동 설정’을 켜고 ‘지금 동기화’를 누른 다음 다시 연결하세요. 시간대만 바꿔서는 시스템 시각 자체의 오차가 바로잡히지 않는 경우가 많습니다.
  2. 안드로이드: 시스템 ‘설정’에서 ‘날짜 및 시간’으로 이동해 자동 설정을 켜세요. 기기에 따라 ‘시스템’ 또는 ‘기타 설정’ 아래에 있을 수 있습니다.
  3. 다시 테스트: 기존 VMess 노드의 연결을 끊었다가 다시 연결하고 코어 로그에서 인증 오류가 사라졌는지 확인하세요. 다른 VMess 노드는 정상인데 특정 노드만 실패한다면 제공업체에 해당 서버의 시간과 계정 설정을 확인해 달라고 요청하세요.

VLESS에는 VMess와 같은 프로토콜 인증 시간 허용 범위가 없지만, 시스템 시간을 아무렇게나 설정해도 된다는 뜻은 아닙니다. TLS 인증서에는 유효 시작일과 만료일이 있으므로 날짜가 크게 잘못되면 인증서 검증에 실패할 수 있습니다. 로그에 인증서가 아직 유효하지 않거나 만료됐다는 메시지가 표시되면 먼저 날짜를 확인하고, 기기 시계 오류인지 서버 인증서 문제인지 판단하세요.

전송 방식 조합: 전체 노드 설정에 맞춰 클라이언트 선택

VMess + WebSocket + TLS와 VLESS + WebSocket + TLS 모두 경로, Host, TLS 서버 이름을 확인해야 합니다. 예를 들어 제공업체가 경로로 /proxy를 지정했다면 /로 바꾸면 안 됩니다. 연결 주소, HTTP Host, TLS 서버 이름은 서로 다른 역할을 하므로 값이 같을 수도 다를 수도 있습니다. 노드 설정을 기준으로 해야 하며 세 항목에 같은 주소를 무조건 입력해서는 안 됩니다.

REALITY 노드는 공개 키, shortId, 서버 이름이 추가로 필요할 수 있으며 Vision을 사용하는 노드는 해당 흐름 제어 설정도 일치해야 합니다. 필드를 비워 두거나 잘못 입력하거나 구독 변환 과정에서 누락하면 연결에 문제가 생길 수 있습니다. VLESS라는 프로토콜 이름만으로 현재 코어가 이런 확장 조합을 지원한다고 단정할 수는 없습니다.

Xray 코어와 전체 VLESS 설정

권장

제공업체가 REALITY 또는 Vision을 명시적으로 요구하는 노드라면 먼저 Xray 코어의 지원 여부를 확인하세요. 데스크톱에서 v2rayN을 사용한다면 선택된 코어를 확인하고, 안드로이드에서는 v2rayNG를 사용할 수 있습니다. 구독에 포함된 전송·보안·흐름 제어 매개변수는 그대로 유지하세요.

적합한 사용자: VLESS + REALITY가 포함된 구독을 사용하거나 Xray 확장 기능을 명시적으로 지정한 경우

V2Fly 코어와 호환 노드 설정

기존 VMess + WebSocket + TLS 노드는 실제 코어 지원 여부에 따라 사용할 수 있습니다. 안드로이드용 v2flyNG는 V2Fly 코어를 사용합니다. Xray 확장 조합이 당연히 호환된다고 가정하지 말고, 가져온 후에도 필드와 로그를 확인하세요.

적합한 사용자: 제공업체가 V2Fly를 명확히 지원하고 기존 노드 조합의 작동이 확인된 경우

판단 순서: 프로토콜 이름보다 전체 설정을 먼저 확인

먼저 프로토콜·전송 방식·보안 계층·흐름 제어를 모두 지원하는지 확인한 다음 연결을 테스트하세요. 기존 VMess 노드가 안정적으로 작동한다면 이름만 보고 VLESS로 바꿀 필요는 없습니다. 구독에서 REALITY를 명시적으로 요구한다면 해당 설정에 맞는 코어를 먼저 선택하세요.

구독 가져오기: VMess를 VLESS로 직접 바꾸지 마세요

구독은 노드 설정을 여러 개 배포하는 방식이지, 세 번째 프록시 프로토콜이 아닙니다. 하나의 구독에 VMess와 VLESS가 함께 포함될 수도 있고 둘 중 하나만 들어 있을 수도 있습니다. 클라이언트는 구독을 가져올 때 노드별 프로토콜, 서버, 전송 매개변수를 각각 저장합니다. 구독을 갱신한 뒤 ‘지원되지 않음’ 메시지가 나타나면 프로토콜 선택 항목을 바로 바꾸지 말고 해당 노드의 설정 조합을 확인하세요.

설정 방법: 같은 구독의 양쪽 클라이언트 설정 확인

데스크톱: v2rayN
  • ‘구독 그룹 설정’에서 별칭과 주소를 입력하고 저장한 뒤 구독 업데이트를 실행하세요.
  • 노드 하나의 편집 창을 열어 프로토콜, 원격 포트, 전송 방식, 보안 설정을 확인하세요.
  • 현재 사용하는 코어가 해당 노드 조합을 지원하는지 확인한 다음 활성 서버로 설정하세요.
안드로이드: v2rayNG
  • v2rayNG에서 구독을 가져오려면 사이드 메뉴의 ‘구독 그룹 설정’에서 주소를 추가한 다음 메인 화면 메뉴에서 구독을 업데이트하세요.
  • VLESS 노드의 서버 이름, REALITY 매개변수, 흐름 제어 설정이 빠짐없이 입력됐는지 확인하세요.
  • 연결을 시작하고 시스템 VPN 권한을 승인한 다음 웹페이지를 열어 테스트하세요.

두 클라이언트에서 같은 구독 주소를 사용할 수 있지만, 구문 분석 기능과 업데이트 시점은 다를 수 있습니다. 노드 목록이 일치하는지는 업데이트 후 실제 결과를 기준으로 판단하세요.

메뉴 이름은 클라이언트 버전에 따라 달라질 수 있습니다. 메뉴를 찾을 수 없다면 ‘구독 그룹’과 ‘구독 업데이트’ 기능을 찾아보세요. v2rayNG 다운로드와 첫 연결 방법만 알아보려면 클라이언트 다운로드 페이지와 시작 가이드를 확인하세요. 모든 노드 매개변수를 직접 다시 만들 필요는 없습니다.

V2Ray 노드 속도 테스트: 이름이 아닌 실제 요청을 비교하세요

VMess의 프로토콜 처리와 VLESS의 간결한 구조에는 차이가 있지만, 실제 사용 경험은 회선, 서버 부하, 전송 방식, 네트워크 패킷 손실, 기기 성능에도 영향을 받습니다. 두 노드의 지역이나 접속 지점, 보안 계층이 다르다면 속도 차이를 모두 VMess와 VLESS의 차이로 돌릴 수 없습니다. 테스트 조건이 없는 속도 향상률은 제시하지 않습니다.

  1. 환경 통일: 같은 기기와 네트워크, 같은 테스트 대상을 사용하고 대역폭을 사용하는 다운로드 작업은 종료하세요.
  2. 경로 확인: 테스트 요청이 현재 노드를 통해 전달되고 라우팅 규칙에 따라 직접 연결되지 않는지 확인하세요. TCP 포트에 접속할 수 있다는 것은 진입점에 연결된다는 뜻일 뿐, 프록시 인증이 성공했다는 의미는 아닙니다.
  3. 반복 요청: 노드마다 최소 3회 테스트하고 성공 횟수, 첫 바이트 응답 시간, 지속 다운로드 성능을 기록하세요. 한 번 측정한 낮은 지연 시간으로 여러 번의 실패를 덮어서는 안 됩니다.
  4. 로그 확인: 인증 실패, TLS 오류, 요청 시간 초과를 각각 기록하세요. 먼저 설정 오류를 해결한 뒤 성능을 비교하세요.

브라우저 프록시 설정의 영향을 배제하려면 로컬 SOCKS 프록시를 명시적으로 지정할 수 있습니다. 아래의 127.0.0.1:10808은 로컬 수신 주소의 예시일 뿐입니다. 클라이언트에 표시된 실제 SOCKS 또는 혼합 포트로 바꿔 사용하세요. 노드의 원격 443 포트와는 다릅니다.

curl --proxy socks5h://127.0.0.1:10808 --connect-timeout 10 --max-time 30 --output /dev/null --write-out "HTTP=%{http_code} first_byte=%{time_starttransfer}s total=%{time_total}s\n" https://example.com/

이 명령은 curl이 설치된 Unix 계열 터미널에서 사용할 수 있습니다. Windows에서는 curl.exe를 사용하고 출력 대상 /dev/null을 NUL로 바꾸세요. socks5h는 대상 도메인 이름을 SOCKS 프록시를 통해 조회하도록 합니다. 연결 제한 시간 10초와 전체 제한 시간 30초는 이번 테스트의 상한일 뿐 프로토콜 성능 지표가 아닙니다. 예시 사이트도 요청 확인용이며 대역폭 측정 기준으로 사용하지 마세요.

선택 기준: 안정적으로 연결되는 노드를 먼저 유지하세요

같은 대상으로 여러 번 요청한 뒤 성공률이 안정적이고 인증 또는 인증서 오류가 로그에 없는 노드를 우선 사용하세요. 이 조건이 비슷할 때 지연 시간과 처리량을 비교하면 됩니다. 문제 원인을 파악하려면 한 번에 하나의 매개변수만 바꾸세요.

자주 묻는 질문: 프로토콜은 정상인데 앱에서 프록시가 작동하지 않을 수 있습니다

노드 연결 성공과 앱 트래픽이 프록시를 통과하는 것은 별개의 문제입니다. 시스템 프록시는 주로 시스템 프록시 설정을 따르는 소프트웨어에 영향을 줍니다. v2rayN의 TUN 모드는 가상 네트워크 인터페이스로 트래픽을 처리하지만 적용 범위는 라우팅 및 제외 규칙에 따라 달라집니다. VMess와 VLESS를 바꿔도 브라우저 확장 프로그램, 터미널 환경 변수, 앱별 프록시 설정이 자동으로 수정되지는 않습니다.

VLESS에 none이라고 표시되면 암호화되지 않은 건가요?

먼저 노드 편집 창에서 보안 설정을 확인하세요. 기본 VLESS의 encryption=none은 외부 보안이 없다는 뜻이 아닙니다. 설정에서 TLS 또는 REALITY를 요구한다면 해당 필드가 모두 입력됐는지 확인하세요. none이라는 값만으로 판단하지 마세요.

VMess가 갑자기 전부 연결되지 않으면 프로토콜부터 바꿔야 하나요?

먼저 시스템 시간을 동기화한 다음 기존 노드에 다시 연결하고 로그를 확인하세요. 다른 연결은 정상인데 모든 VMess 연결이 동시에 실패한다면 시간 문제를 우선 확인할 필요가 있습니다. 기존 노드를 VLESS로 바꿔도 서버 설정은 바뀌지 않습니다.

VLESS를 가져오는 데는 성공했지만 연결하면 실패할 때는 어떻게 하나요?

구독에 표시된 서버 포트, 전송 방식, TLS 서버 이름, REALITY 공개 키, shortId, 흐름 제어 설정을 하나씩 대조하세요. 코어가 해당 조합을 지원하는지 확인한 뒤 로그를 살펴보세요. 가져오기에 성공했다는 것은 구문 분석이 끝났다는 뜻이지 매개변수가 유효하다는 뜻은 아닙니다.

명령줄에서는 접속되는데 브라우저에서 열리지 않는 이유는 무엇인가요?

SOCKS를 명시한 요청이 성공한다면 먼저 브라우저 프록시 확장 프로그램과 클라이언트의 시스템 프록시 상태를 확인하세요. 그런 다음 라우팅 규칙이 대상 연결을 직접 연결로 처리하는지 살펴보세요. 앱 하나에서 실패했다고 VMess나 VLESS를 사용할 수 없다고 단정하지 마세요.

TUN을 켜면 반드시 VLESS를 선택해야 하나요?

아닙니다. TUN은 로컬 트래픽을 처리하는 방식이며 원격 프로토콜을 제한하지 않습니다. 먼저 작동이 확인된 노드를 사용한 뒤 가상 인터페이스, 권한, DNS, 라우팅을 확인하세요. TUN을 켜기 전에 기존 설정을 기록해 두고 문제가 생기면 TUN을 끈 상태로 다시 테스트하세요.

일상적인 선택과 점검은 다음 순서로 진행하면 됩니다. 먼저 클라이언트와 코어의 호환성을 확인하고, 구독의 전체 매개변수를 대조한 다음, 시간과 인증서를 확인하고, 마지막으로 앱이 실제로 프록시를 사용하는지 테스트하세요. VMess와 VLESS의 차이는 문제를 찾는 데 도움이 되지만 이 점검 절차를 대신하지는 않습니다. 아웃바운드 태그, DNS, 라우팅 규칙을 더 자세히 확인하려면 전체 설정 가이드를 참고하세요.

클라이언트 다운로드4개 플랫폼 다운로드 링크 보기