Shadowrocket의 VMess와 VLESS는 Type만 바꿔 서로 전환할 수 없습니다. 두 프로토콜 모두 UUID로 사용자를 식별할 수 있지만, 프로토콜의 암호화 방식은 다르며 전송 방식과 TLS 설정도 각각 확인해야 합니다. 이 글에서는 본인의 서버 설정이나 구독 정보를 보유한 사용자를 대상으로 프로토콜, 인증 정보, 전송 방식, 보안 계층을 차례로 살펴보고 연결 실패 시 확인할 사항을 안내합니다.
VMess와 VLESS의 핵심 차이
이름의 신구를 기준으로 선택하지 말고 서버 설정에 맞는 프로토콜을 사용하세요. VMess는 인증 및 프로토콜 계층 암호화 기능을 갖춘 프록시 프로토콜입니다. 일반적인 VLESS 설정은 프로토콜 자체에서 전송 데이터를 암호화하지 않으므로 TLS 같은 외부 계층의 보호가 필요한 경우가 많습니다. 두 프로토콜 모두 여러 전송 방식을 사용할 수 있으므로 ‘VMess는 WebSocket’, ‘VLESS는 TLS’라고 단정할 수 없습니다.
| 확인 항목 | VMess | VLESS |
|---|---|---|
| 사용자 인증 정보 | 일반적으로 UUID를 사용하며 서버의 사용자 설정과 일치해야 합니다. | 일반적으로 UUID를 사용하며 서버의 사용자 설정과 일치해야 합니다. |
| 프로토콜 계층 암호화 | 프로토콜 계층 암호화 기능이 있으며, 구체적인 방식은 서버 설정에 따라 지정합니다. | 일반적인 설정의 Encryption 값은 none이며, 전송 보호는 별도로 설정해야 합니다. |
| TLS | 별도로 사용할 수 있으며 VMess 자체의 암호화와는 다릅니다. | 일반적으로 TLS 같은 외부 계층으로 보호합니다. 프로토콜 이름만으로 암호화 여부를 판단할 수 없습니다. |
| 전송 방식 | TCP나 WebSocket 등 서버 설정과 일치해야 합니다. | 마찬가지로 서버 설정과 일치해야 하며, 다른 항목의 전송 설정을 그대로 재사용할 수 없습니다. |
| 전환 방법 | 해당 서버의 전체 설정을 확인한 뒤 새 항목을 추가하거나 가져오세요. Type만 변경해서는 안 됩니다. | |
VMess의 AEAD 인증과 페이로드 암호화는 서로 관련은 있지만 다른 개념이며, AEAD는 TLS를 켜고 끄는 설정도 아닙니다. 기존 설정에 AlterId가 있더라도 임의의 값으로 바꿔 호환을 시도하지 마세요. 기존 서비스 관리자에게 현재 유효한 설정을 확인해야 합니다. VLESS에 Flow 같은 추가 설정이 있다면 클라이언트와 서버가 모두 지원하고 값이 일치해야 합니다. 다른 항목의 값을 참고해 임의로 입력하지 마세요.
UUID는 인증 정보이지 암호화 방식이 아닙니다
UUID는 서버가 해당 서비스를 사용할 수 있는 사용자를 식별하는 데 쓰입니다. 형식이 같다고 해서 두 프로토콜에서 같은 계정 설정을 사용할 수 있는 것은 아닙니다. 서버의 해당 프로토콜 사용자 목록에 UUID가 등록되어 있어야 하며, 주소와 포트 등 다른 설정도 일치해야 합니다. UUID를 복사할 때 공백이 추가되거나 문자가 빠지면 인증에 실패할 수 있습니다.
확인 방법: 인증 정보, 포트, TLS를 각각 확인하세요
UUID 형식이 올바르다는 것은 문자열 형태가 규격에 맞아 보인다는 뜻일 뿐입니다. 서버에서 사용자 계정이 유효한지, 포트가 현재 프로토콜에 맞는지, TLS가 활성화되어 있는지 각각 확인하세요. ‘UUID가 그대로’라는 이유만으로 나머지 설정도 재사용할 수 있다고 판단해서는 안 됩니다.
- UUID는 전체를 그대로 복사하세요. 표시 이름, 구독 token, 일반 로그인 비밀번호를 이 항목에 입력하지 마세요.
- 저장하기 전에 앞뒤 공백, 줄바꿈, 문자 바뀜이 없는지 확인하세요. 특히 앱 간에 복사한 경우 주의가 필요합니다.
- 공개 스크린샷에 UUID나 전체 구독 링크를 노출하지 마세요. 문제를 확인할 때는 항목 이름과 오류 상황만 남기면 됩니다.
프로토콜, Transport, TLS의 역할
서버 설정을 여러 독립적인 계층으로 나누어 생각할 수 있습니다. VMess 또는 VLESS는 프록시 프로토콜을, TCP나 WebSocket은 데이터를 전달하는 방식을, TLS는 외부에 보호된 연결을 설정할지를 결정합니다. WebSocket 자체가 TLS를 의미하지는 않습니다. TLS를 사용하는 WebSocket과 사용하지 않는 WebSocket은 서버 측 요구 사항도 다릅니다.
기존 WebSocket 및 TLS 설정을 예로 들면, 서버 주소는 연결 대상이며 Port는 수신 대기 포트를 지정합니다. WebSocket의 Host와 Path는 서버의 라우팅 설정과 일치해야 하고, TLS의 Server Name(SNI)은 핸드셰이크 중 대상 이름을 전달합니다. 이 값들은 같은 도메인을 사용할 수도 있고 서버 구성에 따라 다를 수도 있습니다. 여러 입력란에 도메인이 나온다고 해서 모두 서버 IP로 바꾸면 안 됩니다.
TLS 활성화, 서버 인증서 확인
권장서버에서 TLS를 제공하는 경우 지정된 Server Name을 입력하고 인증서 검증을 유지하세요. 인증서 오류가 발생하면 검증을 건너뛰기보다 이름, 기기 시간, 서버 인증서부터 확인하세요.
적합한 경우: TLS를 명시적으로 요구하는 기존 VMess 또는 VLESS 서버 설정
TLS 비활성화, 서버에서 명시한 방식으로 연결
서버가 해당 연결 방식을 실제로 제공하는 경우에만 사용하세요. TLS를 끈다고 다른 보호 기능이 자동으로 활성화되는 것은 아닙니다. 특히 VLESS의 Encryption 값인 none을 전송 암호화가 적용된 상태로 해석해서는 안 됩니다.
적합한 경우: 보호 범위를 확인한 통제된 네트워크 테스트 또는 명확히 지정된 서버 구성
위 권장 사항은 TLS 설정에 관한 것이며, 기존 항목의 TLS를 무조건 켜라는 뜻은 아닙니다. 서버 포트가 TLS를 사용하지 않는 연결만 받는다면 클라이언트에서 TLS를 켰을 때 핸드셰이크가 실패합니다. 포트 번호 443도 흔히 쓰이는 설정일 뿐, 프로토콜이나 암호화 여부를 증명하지는 않습니다.
Add Server에서 입력하는 순서
전체 구독 정보나 공유 설정이 있다면 먼저 가져온 다음 항목별로 확인하세요. 설정을 직접 다시 입력하는 것보다 값을 온전히 유지하기 쉽습니다. 수동으로 설정하려면 Home 오른쪽 위의 추가 메뉴에서 Add Server로 들어가 Type을 선택한 뒤, 표시되는 항목을 입력하세요. 선택한 유형과 앱 화면 상태에 따라 표시 항목이 달라질 수 있으므로, 아래 내용은 확인 순서에 대한 안내이며 모든 항목이 항상 표시되는 것은 아닙니다.
- Type을 확인합니다. 서버가 VMess이면 VMess를, VLESS이면 VLESS를 선택하세요. 유형이 다르면 나머지 값이 같더라도 올바른 설정으로 볼 수 없습니다.
- 주소와 Port를 입력합니다. 주소에는 호스트 이름이나 IP를 입력하고 웹페이지 경로는 붙이지 마세요. 포트는 서버에 지정된 값을 입력해야 합니다. 예를 들어 서버 포트가 8443이라면 TLS를 사용한다는 이유로 443으로 바꾸면 안 됩니다.
- UUID를 입력합니다. 현재 항목에 해당하는 사용자 인증 정보를 사용하세요. VMess의 암호화 옵션과 VLESS의 Encryption 또는 Flow 같은 추가 항목은 기존 서버 설정을 기준으로 입력해야 합니다.
- Transport를 확인합니다. 서버에서 WebSocket을 사용한다면 Host와 Path를 확인하세요. 다른 전송 방식을 사용한다면 WebSocket 항목을 그대로 가져오지 마세요.
- TLS를 확인합니다. TLS 활성화 여부와 Server Name, 인증서 검증 설정을 확인하세요. 주소에 IP를 사용하더라도 서버에서 도메인 형식의 Server Name을 요구할 수 있습니다.
- 저장한 뒤 해당 항목을 선택합니다. Home으로 돌아가 SERVER 목록에서 방금 저장한 서버를 선택한 다음 연결을 확인하세요. 이전에 선택한 다른 항목을 테스트하지 않도록 주의하세요.
연결 실패 시 증상별로 원인 좁히기
먼저 실제로 사용 중인 서버 항목을 확인한 다음 어느 계층에서 실패했는지 살펴보세요. Home에서 연결 스위치가 켜져 있다는 것은 기기에서 연결 절차가 시작되었다는 뜻이지, 원격 인증과 TLS 핸드셰이크, 대상 웹사이트 접속까지 모두 성공했다는 뜻은 아닙니다. Connectivity Test는 초기 점검에 유용하지만 한 번의 결과로 모든 도메인, 규칙, 앱을 확인할 수는 없습니다.
UUID가 같은데 VMess를 VLESS로 바꾸면 연결되지 않는 이유는 무엇인가요?
기존 설정으로 되돌리고 Type만 계속 바꾸지 마세요. 기존 서비스 관리자에게 VLESS 연결 지점이 제공되는지 확인하고 해당 포트, UUID, Transport, TLS 설정을 받으세요. 두 프로토콜은 핸드셰이크 방식이 다르므로 UUID가 같아도 서버가 프로토콜을 자동으로 전환하지 않습니다.
TLS 관련 오류가 발생하면 무엇부터 바꿔야 하나요?
해당 서버의 편집 화면을 열고 TLS 설정이 서버와 일치하는지 먼저 확인한 뒤 Server Name, 기기의 시스템 시간, 인증서 도메인을 확인하세요. 주소에 IP를 사용하더라도 기존 설정에서 요구하는 SNI를 확인해야 합니다. 인증서 검증을 끄는 것으로 문제의 원인을 대신 해결하려 하지 마세요.
WebSocket 연결이 실패하면 UUID 외에 무엇을 확인해야 하나요?
Port, TLS, WebSocket Host와 Path 순으로 확인하세요. 연결 로그에 HTTP 상태 코드가 표시된다면 404는 경로나 리버스 프록시 라우팅이 맞지 않을 가능성을, 403은 접근 제한 가능성을 시사할 수 있습니다. 이는 점검에 참고할 단서일 뿐, 상태 코드만으로 UUID가 잘못되었다고 단정할 수는 없습니다.
Connectivity Test는 성공하는데 웹페이지가 열리지 않나요?
먼저 Home → Global Routing을 확인하세요. 선택한 프록시로 웹페이지에 접속되는지 확인할 때 Direct는 적합하지 않습니다. Config는 규칙의 영향을 받습니다. Proxy로 잠시 전환하고 대상 항목을 선택한 뒤 같은 웹페이지에 다시 접속해 보세요. 확인 후에는 원래 설정으로 되돌리세요. Config에서만 실패한다면 규칙과 DNS를 계속 확인하세요.
문제를 확인할 때는 한 번에 하나씩만 변경하고 변경 전후의 증상을 기록하세요. 프로토콜, 포트, SNI, Path를 동시에 바꾸면 연결이 복구되더라도 원인을 알 수 없습니다. 구독으로 관리되는 항목은 먼저 오류 정보를 보관하고 업데이트된 설정을 확인하세요. 다음 구독 업데이트 때 수동 변경 내용이 덮어써질 수 있습니다.
프로토콜 이름만 보지 말고 선택하고 확인하는 방법
일반 사용자는 먼저 기존 서비스가 지원하는 프로토콜을 확인하고, Shadowrocket의 설정 항목이 모두 일치하는지 확인한 다음 실제 사용 결과를 비교하면 됩니다. VLESS는 프로토콜 설계가 더 간결하지만 어떤 네트워크에서나 더 빠르다는 뜻은 아닙니다. VMess에 프로토콜 계층 암호화 기능이 있더라도 TLS, 인증서, 서버 신원 확인을 생략해도 된다는 뜻은 아닙니다. 지연 시간, 혼잡도, 서버 부하, 전송 방식 모두 사용 경험에 영향을 줍니다.
- 테스트 조건을 동일하게 유지합니다. 같은 네트워크에서 같은 대상에 접속하세요. 네트워크 변경으로 생긴 차이를 프로토콜 차이로 오해하지 않도록 합니다.
- 라우팅과 프로토콜을 구분합니다. Config는 규칙에 따라 정책을 선택하고, Proxy는 관련 테스트 트래픽을 프록시 경로로 보내며, Direct는 직접 연결합니다. 라우팅 설정으로 VMess가 VLESS로 바뀌지는 않습니다.
- 도메인 접속을 확인합니다. 서버에는 연결되지만 도메인 접속에 실패한다면 DNS와 규칙 적용 여부를 계속 확인하세요. UUID를 바로 다시 입력하지 마세요.
- 수동으로 확인한 뒤 자동 실행을 설정합니다. On Demand가 필요하다면 Settings → On Demand에서 조건을 확인하세요. 자동 실행 설정으로 잘못된 서버 값을 바로잡을 수는 없습니다.
정리: 전체 설정을 유지한 채 연결 결과를 비교하세요
VMess와 VLESS 설정을 각각 별도 항목으로 저장하고 인증 정보, 전송 방식, TLS를 하나씩 확인한 다음 같은 조건에서 테스트하세요. 유효한 설정이 하나뿐이라면 먼저 해당 설정으로 안정적으로 연결하세요. 다른 프로토콜을 사용하려고 설정 항목을 추측해 바꾸지 마세요.