VMess와 VLESS는 프록시 프로토콜이지 클라이언트 이름이 아닙니다. 차이는 노드 이름에 '고속'이라는 말이 들어가는지가 아니라 프로토콜 계층의 암호화, 인증 방식, 함께 사용할 수 있는 보안 기능에 있습니다. 이 글에서는 흔히 쓰이는 VMess AEAD와 VLESS encryption=none 설정을 바탕으로 TLS, REALITY, Vision 및 코어 요구 사항을 비교하고, v2rayN에서 노드 설정 항목을 확인하는 방법을 안내합니다. 구독을 받아 설정 호환성을 확인하거나 기존 VMess 노드를 마이그레이션하려는 사용자에게 적합합니다.
VMess와 VLESS 비교: 프로토콜·전송 방식·보안 계층 구분하기
노드 하나에는 보통 세 가지 정보가 함께 들어 있습니다. VMess 또는 VLESS는 프록시 프로토콜을, TCP나 WebSocket 등은 전송 방식을, TLS나 REALITY는 연결 보호 방식을 결정합니다. 서로 대체할 수 있는 같은 종류의 옵션이 아닙니다. 예를 들어 'VLESS + WebSocket + TLS'와 'VLESS + TCP + REALITY'는 모두 VLESS를 사용하지만, 동일한 클라이언트 설정을 그대로 적용할 수는 없습니다.
| 확인 항목 | VMess | VLESS |
|---|---|---|
| 인증 정보 | 일반적으로 UUID를 사용하며, 최신 설정은 AEAD로 인증 | 일반적으로 UUID를 사용하며, 기본 설정에는 페이로드 암호화가 포함되지 않음 |
| 프로토콜 계층 암호화 | AES-128-GCM, ChaCha20-Poly1305 등을 지원하며 코어와 설정에 따라 달라짐 | 일반적인 설정은 encryption=none이며, 연결 보호는 TLS 또는 REALITY에 맡김 |
| TLS와의 관계 | TLS와 함께 사용할 수 있으며, 자체 암호화가 TLS를 의미하지는 않음 | 일반적인 배포 환경에서는 연결 보호를 TLS 또는 REALITY에 의존 |
| alterId | 과거 설정과의 호환을 위한 항목이며, 최신 AEAD 설정은 보통 0 | 해당 항목 없음 |
| Vision 및 REALITY | VLESS Vision 설정을 VMess에 그대로 적용할 수 없음 | 지원되는 Xray 버전 및 전송 방식 조합에서 사용 |
| 선택 기준 | 현재 서버와 클라이언트의 호환성이 안정적인지 여부 | 서버 설정, 코어 기능, 보안 계층이 모두 일치하는지 여부 |
여기서 말하는 VLESS는 구독에서 흔히 볼 수 있는 encryption=none 설정입니다. 일부 최신 Xray 버전은 확장 암호화 기능도 제공할 수 있으므로 모든 VLESS 설정이 '절대 암호화할 수 없다'고 단정해서는 안 됩니다. encryption 값이 다르면 양쪽 버전과 관련 문서를 확인하고, 임의로 none으로 바꾸지 마세요.
확인 방법: 노드 메모가 아니라 설정 항목으로 식별하기
노드 메모는 임의로 지정할 수 있습니다. 먼저 편집 창에서 프로토콜을 확인하고, 전송 방식과 TLS/REALITY를 확인한 다음 Flow를 살펴보세요. 세 계층의 설정이 일치하는지 확인한 뒤 속도를 비교하면 됩니다.
암호화 방식과 alterId: VMess AEAD는 외부 TLS와 다릅니다
VMess는 프로토콜 계층에서 페이로드를 암호화할 수 있습니다. 일반적인 security=auto 설정은 코어 구현과 실행 환경에 따라 사용할 수 있는 알고리즘을 선택하며, 'TLS를 자동으로 켠다'는 뜻이 아닙니다. 노드에서 TLS도 활성화했다면 VMess 자체 처리와 외부 TLS가 함께 적용됩니다. 두 기능의 역할은 다르므로, '암호화'라는 말만 보고 인증서 설정을 생략해도 된다고 판단하면 안 됩니다.
일반적인 VLESS 설계는 프로토콜 자체의 복잡성을 줄이고 연결 보호를 외부 계층에 맡깁니다. VLESS 설정에 encryption=none이 있어도 연결 전체가 반드시 평문이라는 뜻은 아닙니다. TLS나 REALITY가 설정되어 있는지 확인해야 합니다. 반대로 none이고 해당 보안 계층도 없다면, 접속 대상이 HTTPS 웹사이트라는 이유만으로 프록시 연결의 모든 정보가 똑같이 보호된다고 볼 수 없습니다.
예전 안내에 나온 alterId=64를 그대로 써도 될까요?
alterId는 VMess 구형 인증 방식에서 사용하던 과거 설정 항목입니다. 성능 등급이 아니며 값이 클수록 안전한 것도 아닙니다. 최신 설정은 보통 AEAD에 해당하는 alterId=0을 사용합니다. V2Fly는 5.0.0부터 구형 비 AEAD 인증 지원을 제거했습니다. 다른 코어의 과거 호환 동작은 다를 수 있으므로, 특정 구버전에서 연결됐다는 사실을 계속 사용할 수 있다는 보장으로 받아들이지 마세요.
- 새 설정을 만들 때: 서버에서 제공한 최신 설정을 사용하고, 오래된 안내를 보고 64나 32 같은 값을 추가하지 마세요.
- 기존 노드를 가져올 수 없을 때: 서비스 제공자에게 최신 공유 링크를 요청하고, 서버가 여전히 구형 인증 방식에 의존하는지 확인하세요.
- 직접 서버를 관리하는 경우: 양쪽을 업그레이드하고 인증 방식을 먼저 마이그레이션한 다음 구독을 업데이트하세요. 클라이언트에서 숫자 하나만 바꾸지 마세요.
- 인증 오류가 발생할 때: UUID, 기기 날짜와 시간대, 양쪽 설정을 확인하세요. VMess는 시간 동기화가 필요하며, 암호화 알고리즘만 점검해서는 부족합니다.
성능 오버헤드: VLESS가 항상 일정하게 더 빠른 것은 아닙니다
일반적인 설정에서 VLESS는 VMess의 프로토콜 계층 페이로드 암호화를 생략하므로 CPU 작업을 일부 줄일 수 있습니다. 하지만 실제 연결에서는 TLS 또는 REALITY, 전송 캡슐화, 네트워크 송수신 처리도 필요합니다. 하드웨어 가속을 지원하는 기기에서는 AES-GCM의 오버헤드가 매우 낮을 수 있습니다. 일반적인 웹 브라우징에서는 프로토콜 차이보다 회선 지연, 혼잡, 서버 부하가 더 큰 영향을 주는 경우가 많습니다.
서로 다른 지역이나 서비스 제공자의 노드 두 개를 측정한 뒤 그 차이를 전부 VMess와 VLESS의 차이로 돌릴 수는 없습니다. WebSocket, 연결 재사용, 라우팅 규칙, 속도 측정 파일의 출처도 결과에 영향을 줍니다. 이 글에는 재현 가능한 실측 자료가 없으므로 '몇 퍼센트 향상'과 같은 수치를 약속하지 않습니다.
- 회선 조건 맞추기: 가능하면 같은 서버와 출구를 사용하고 비슷한 시간대에 측정해 전송 방식과 보안 계층을 동일하게 유지하세요.
- 테스트 항목 통일하기: 먼저 웹페이지 열기와 짧은 연결을 확인한 다음 같은 대용량 파일을 다운로드하세요. 각 항목을 최소 3회 반복해 최고값만 보지 말고 변동 폭을 확인하세요.
- 기기 부하 기록하기: 데스크톱 작업 관리자에서 코어 프로세스의 CPU 사용률도 함께 확인하세요. 대역폭은 높지만 CPU 사용률이 거의 100%일 때 프로토콜 오버헤드를 살펴볼 필요가 있습니다.
- 기준 설정부터 복원하기: 테스트 중 DNS, 라우팅, TUN, 연결 재사용 설정을 동시에 바꾸지 마세요. 한 번에 하나의 변수만 바꿔 결과를 확인하세요.
사용 권장 사항: 안정적인 VMess라면 이름만 보고 바꿀 필요가 없습니다
현재 노드가 필요한 대역폭을 제공하고 코어 호환성 문제가 없다면, 우선 사용 가능한 설정을 유지하세요. REALITY나 Vision이 필요할 때 서버에서 명시적으로 지원하는 VLESS 설정을 선택하고, 검증된 노드 하나를 복구용으로 남겨 두세요.
XTLS·Vision·REALITY: 조합과 코어 지원 확인하기
XTLS, Vision, REALITY를 아무렇게나 선택할 수 있는 세 가지 가속 옵션으로 보면 안 됩니다. 흔히 쓰이는 xtls-rprx-vision은 VLESS의 Flow 값입니다. REALITY는 연결 보안 방식이지 VMess/VLESS와 별개인 프록시 프로토콜이 아닙니다. 사용할 수 있는 조합은 Xray 버전, 전송 방식, 서버 설정에 따라서도 달라집니다.
일반적인 VLESS + TCP + REALITY + Vision 노드에서는 UUID, 주소, 포트, serverName, 서버 공개 키 관련 설정, shortId, Flow를 확인해야 합니다. 인터페이스에서 공개 키 항목을 Public key 또는 다른 이름으로 표시할 수 있으므로 노드 제공자의 안내와 현재 사용하는 코어를 기준으로 확인하세요. 일반 TLS의 인증서 도메인을 REALITY의 serverName에 그대로 복사하지 마세요. TLS 드롭다운을 REALITY로 바꾸는 것만으로 마이그레이션이 끝나는 것도 아닙니다.
Xray 코어
권장이 글에서 다루는 VLESS + REALITY/Vision 조합에 적합합니다. 클라이언트 인터페이스에서 관련 항목을 저장할 수 있어야 하며, 실제로 실행되는 코어 버전도 서버 기능을 지원해야 합니다. 앱에 'VLESS'가 표시된다고 해서 모든 확장 기능과 호환되는 것은 아닙니다.
적합한 경우: 서버에서 REALITY 또는 xtls-rprx-vision 설정을 명시적으로 요구하는 환경
V2Fly 코어
해당 버전에서 지원하는 VMess 등의 설정에 사용할 수 있지만, Xray의 REALITY/Vision 설정을 직접 처리할 수는 없습니다. 기존 노드를 유지할 때도 전송 방식, 인증 방식, 버전을 확인하고 두 프로젝트의 기능 목록을 혼동하지 마세요.
적합한 경우: 호환되는 설정이 이미 있고 서버에서 V2Fly 기능을 명시적으로 사용하는 환경
v2rayN에서 VMess와 VLESS 노드 구분하기
먼저 메인 창의 노드 목록에서 '유형' 또는 '프로토콜' 열을 확인한 다음 노드 편집 창을 열어 세부 설정을 살펴보세요. v2rayN 데스크톱 버전에 따라 메뉴 문구, 열 이름, 레이아웃이 달라질 수 있습니다. 아래 안내는 일반적인 메뉴를 기준으로 한 순서이며, 인터페이스가 다르면 메모가 아니라 설정 항목의 의미를 확인하세요.
- 링크 가져오기: 전체 공유 링크를 복사한 뒤 메인 창에서 「서버」→「클립보드에서 URL 일괄 가져오기」를 사용하거나 해당 버전의 클립보드 가져오기 메뉴를 이용하세요. 구독 주소를 단일 노드 JSON으로 붙여넣지 마세요.
- 편집 창 열기: 노드 행을 더블클릭하거나 마우스 오른쪽 버튼 메뉴에서 편집을 선택하세요. VMess에는 보통 암호화 방식과 alterId가 표시되고, VLESS에는 encryption과 Flow 등의 항목이 표시됩니다.
- 보안 계층 확인: 전송 방식, TLS/REALITY, SNI/serverName을 각각 확인하세요. 포트가 443이라는 사실만으로 TLS가 활성화됐다고 볼 수 없으므로 보안 계층 항목을 직접 확인해야 합니다.
- 실행 중인 코어 확인: 현재 버전의 코어 선택 메뉴에서 사용할 코어를 확인하고, 시작 로그에서 실제 코어 이름을 확인하세요. REALITY/Vision이 필요할 때 V2Fly 코어를 잘못 선택하지 않도록 주의하세요.
- 트래픽 전달 확인: 노드를 선택한 다음 트레이 메뉴에서 「시스템 프록시」→「시스템 프록시 자동 설정」을 선택하면 시스템 프록시를 따르는 앱이 연결됩니다. 시스템 프록시를 따르지 않는 앱은 별도로 설정하거나 안내에 따라 TUN을 사용해야 합니다.
공유 링크의 접두어로도 기본적인 구분이 가능합니다. vmess://는 VMess를 뜻하며, 보통 Base64로 인코딩된 노드 JSON이 들어 있습니다. vless://는 VLESS를 뜻하며, 전송 방식과 보안 계층 설정을 URL 쿼리 매개변수로 전달하는 경우가 많습니다. Base64는 인코딩이지 암호화가 아니므로 링크에 포함된 UUID와 서버 정보도 접속 자격 증명처럼 안전하게 보관해야 합니다.
두 클라이언트에서 확인하기: 같은 노드라도 실제 지원 기능을 각각 점검
데스크톱: v2rayN
- 노드 프로토콜을 확인한 뒤 실제로 실행 중인 코어를 살펴보세요.
- 전송 방식, 보안 계층, Flow를 항목별로 확인하세요.
- 노드 연결, 시스템 프록시, TUN은 각각 별도로 확인하세요.
Android: v2rayNG / v2flyNG
- v2rayNG는 Xray를 사용하지만, 지원 여부는 구체적인 버전에 따라 확인해야 합니다.
- v2flyNG는 V2Fly를 사용하므로 REALITY/Vision 설정을 그대로 적용할 수 없습니다.
- 구독을 가져올 수 있어도 목록의 모든 노드가 실행되는 것은 아닙니다.
같은 구독을 사용해도 노드 출처만 공유될 뿐 코어 기능까지 통일되는 것은 아닙니다. 양쪽에서 실제로 사용하는 노드를 각각 확인하세요.
가져오기 및 연결 문제: 설정 항목별로 원인 찾기
문제를 해결할 때는 먼저 세 단계를 구분하세요. 링크가 정상적으로 해석됐는지, 코어가 정상적으로 시작됐는지, 서버까지 연결됐는지를 확인합니다. 가져오기에 실패하면 형식과 항목 지원 여부를, 시작에 실패하면 설정과 코어를 점검하세요. 연결 시간 초과일 때 주소, 포트, 네트워크를 추가로 확인하면 됩니다. 모든 단계에서 UUID와 암호화 방식을 반복해서 바꾸지는 마세요.
VMess를 VLESS로 바꾸자마자 연결이 안 되는 이유는 무엇인가요?
두 프로토콜은 핸드셰이크 형식이 다르므로 서버도 해당 프로토콜로 설정되어 있어야 합니다. 기존 노드 유형으로 되돌리고 제공자에게 VLESS 전용 공유 링크를 요청하세요. 주소, 포트, UUID가 같아도 서버가 두 프로토콜을 모두 허용한다는 뜻은 아닙니다.
VLESS에 none이라고 표시되는데 암호화를 켜지 않은 건가요?
먼저 표시된 항목이 encryption인지 보안 계층인지 확인하세요. 일반적인 encryption=none 설정은 TLS나 REALITY와 함께 사용할 수 있습니다. 보안 계층도 비어 있다면 임의로 추측하지 말고 서버 설정과 사용 중인 네트워크를 먼저 확인하세요.
구독에 VLESS가 있는데 클라이언트에서 Flow를 지원하지 않는다고 나오는 이유는 무엇인가요?
노드 편집 창에서 Flow를 확인한 다음 실행 로그에 표시된 코어 이름을 살펴보세요. 서버 요구 사항에 맞는 클라이언트와 코어로 업데이트하세요. 연결을 보장하려고 Flow를 삭제하면 안 되며, Vision 노드를 v2flyNG에서 직접 사용해서도 안 됩니다.
TLS 인증서 오류가 뜨는데 검증을 건너뛰어도 될까요?
먼저 시스템 시간을 동기화하고 SNI/serverName과 인증서 도메인이 일치하는지 확인한 다음 인증서 유효기간과 서버 인증서 체인을 점검하세요. allowInsecure를 장기적인 해결책으로 사용하지 마세요. 인증서 검증이 약해지며 UUID, Flow, 포트 오류는 해결되지 않습니다.
지연 시간 측정은 되는데 브라우저에서 페이지가 열리지 않는 이유는 무엇인가요?
노드가 활성 상태인지 확인한 다음 시스템 프록시나 TUN이 브라우저 트래픽을 처리하는지 살펴보세요. 로컬 프록시를 직접 입력한다면 클라이언트가 실제로 수신 대기 중인 포트를 사용해야 합니다. 예를 들어 이 기기의 포트가 10808일 때만 10808을 입력하세요. 서버 포트인 443을 로컬 프록시 포트로 사용하면 안 됩니다.
선택 기준은 다음과 같습니다. 현재 VMess가 안정적으로 작동한다면 호환성을 우선해 유지하세요. 서버에서 REALITY/Vision을 요구한다면 해당 기능을 지원하는 VLESS와 Xray 조합을 선택하세요. 프로토콜 이름만으로 알 수 있는 정보는 일부에 불과하며, 실제 사용 가능 여부는 전체 설정과 양쪽 구현에 달려 있습니다. 라우팅, DNS, TUN의 관계를 더 알아보려면 용어 안내를, 처음 설정한다면 빠른 시작 안내를 참고하세요.