VMess·VLESS·Trojan·Shadowsocks 비교: 프록시 프로토콜별 특징과 선택 기준

VMess·VLESS·Trojan·Shadowsocks의 암호화, 핸드셰이크, 전송 방식, 클라이언트 호환성을 비교하고 사용 환경에 맞는 선택 기준을 안내합니다.

이 글의 핵심

프로토콜을 선택하기 전에 서버에서 제공하는 설정과 클라이언트의 코어를 확인하고, 전송 방식과 보안 매개변수도 살펴보세요. 구독을 가져오거나 기존 노드를 옮기거나 연결 방식을 비교하려는 사용자에게 적합한 글입니다. 프로토콜과 전송 계층을 구분하고 UUID, 비밀번호, SNI, flow 등의 항목을 확인한 뒤 같은 회선에서 테스트해 네트워크 차이를 프로토콜 차이로 오해하지 않도록 안내합니다.

프로토콜·전송·보안 계층 구분하기

VMess, VLESS, Trojan, Shadowsocks는 프록시 프로토콜의 이름입니다. WebSocket과 gRPC 등은 프록시 데이터를 전달하는 전송 방식이고, TLS와 REALITY는 별도로 확인해야 하는 보안 설정입니다. 구독 설정에 ‘VLESS + WebSocket + TLS’가 표시되어도 서로 바꿔 쓸 수 있는 프로토콜 세 가지가 아니라, 하나의 연결을 이루는 서로 다른 계층입니다.

클라이언트와 프로토콜도 서로 다릅니다. v2rayN은 데스크톱 클라이언트이고, v2rayNG는 안드로이드에서 Xray 코어를 사용하며, v2flyNG는 안드로이드에서 V2Fly 코어를 사용합니다. 설정을 저장할 수 있다고 해서 현재 코어가 모든 항목을 지원하는 것은 아닙니다. 특히 REALITY, 특정 flow, 최신 암호화 방식은 실제 코어의 지원 여부를 확인해야 합니다.

프로토콜별 암호화 및 설정 차이

아래에서는 흔히 사용하는 구성 방식을 비교합니다. 특정 전송 방식을 하나의 프로토콜에만 연결해 설명하지 않습니다. 특히 ‘프록시 프로토콜 자체의 데이터 암호화’와 ‘외부 TLS’를 구분해야 합니다. 두 방식은 적용되는 계층이 다르므로 이름만 보고 연결 전체가 제대로 보호되는지 판단할 수 없습니다.

프로토콜 인증 및 암호화 일반적인 구성 가져온 후 확인할 항목
VMess UUID로 사용자를 식별합니다. 최신 구성에서는 일반적으로 AEAD 인증을 사용하며, 데이터 암호화 여부는 security 설정에 따라 달라집니다. TCP 또는 WebSocket + TLS UUID, security, 전송 유형, 경로, TLS. 구형 설정에는 alterId가 포함될 수도 있습니다.
VLESS UUID로 인증합니다. 일반적인 encryption=none 설정은 프로토콜 계층에서 데이터를 암호화하지 않으므로, 보통 TLS 또는 REALITY와 함께 사용합니다. TCP + TLS, TCP + REALITY 또는 WebSocket + TLS UUID, encryption, flow, 서버 이름, REALITY 공개 키와 shortId
Trojan 비밀번호로 인증하며, 기존 구성에서는 TLS로 연결을 보호합니다. TCP + TLS. 다른 전송 방식으로 캡슐화하려면 양쪽 구현이 모두 지원하는지 확인해야 합니다. 비밀번호, 포트, SNI, 인증서 유효성, 전송 유형
Shadowsocks 암호화는 방식과 비밀번호 또는 키에 따라 결정됩니다. AEAD 방식과 Shadowsocks 2022의 키 규칙은 서로 다릅니다. 프로토콜 자체의 TCP·UDP 전달을 사용합니다. 별도 캡슐화는 따로 확인해야 합니다. method, 비밀번호 또는 키, 서버 주소, 포트, UDP 개방 여부

VMess 인증은 시간에 영향을 받으므로 기기 시계가 크게 어긋나면 연결에 실패할 수 있습니다. 먼저 시스템 자동 시간 설정을 켠 다음 UUID와 전송 매개변수를 확인하세요. 오래된 공유 링크에 alterId가 있더라도 구형 안내를 따라 특정한 0이 아닌 값으로 일괄 변경하지 마세요. 최신 AEAD 구성에서는 보통 0을 사용하지만, 최종적으로는 서버 설정과 일치해야 합니다.

VLESS에서 흔히 쓰는 encryption=none 설정은 외부에서 TLS나 REALITY를 사용할 수 있으므로 ‘연결 전체가 평문’이라는 뜻은 아닙니다. 그렇다고 VLESS가 자동으로 이러한 보호 기능을 제공하는 것도 아닙니다. 새 VLESS 암호화 확장을 사용하는 구성이라면 양쪽 구현과 버전에서 모두 지원하는지 확인해야 합니다. 기존 구성의 필드 해석을 그대로 적용해서는 안 됩니다.

결론: 전체 매개변수 조합으로 선택하기

비교할 때는 ‘프로토콜 + 전송 + 보안 계층 + 코어’를 함께 기록하세요. 예를 들면 ‘VLESS + TCP + REALITY + Xray’와 같습니다. ‘VLESS 노드’라고만 적으면 호환성을 좌우하는 조건이 빠져 문제를 재현하기도 어렵습니다.

핸드셰이크와 속도: 올바른 비교 방법

핸드셰이크 횟수만으로 다운로드 속도를 비교할 수는 없습니다. 연결을 수립할 때 TCP, TLS, 프록시 인증, 전송 캡슐화가 대기 시간을 늘릴 수 있습니다. 연결을 재사용한 뒤에는 대용량 전송 속도가 주로 회선 대역폭, 혼잡도, 서버 부하, 패킷 손실에 좌우됩니다. VLESS의 프로토콜 헤더가 더 간결하다고 해서 모든 VLESS 노드가 VMess 노드보다 빠른 것은 아닙니다.

WebSocket과 gRPC는 기존 연결 인프라와 함께 사용하는 경우가 많지만, 저절로 속도를 높여 주는 기능은 아닙니다. TLS 세션 재개, 연결 재사용, 서버 구성에 따라서도 실제 성능이 달라집니다. 아래 두 포트는 연결 방향을 설명하기 위한 예시일 뿐, 특정 클라이언트의 기본 포트나 속도 측정값을 뜻하지 않습니다.

443
일반적인 원격 TLS 서버 포트. 실제 값은 서버 설정을 따르세요.
1080
로컬 SOCKS 인바운드 예시. 원격 포트 입력란에 넣지 마세요.

사용 환경에 맞는 프로토콜 선택

아래 권장 사항은 ‘새로 구축하고, 양쪽에서 Xray를 지원하며, 전체 설정을 확인할 수 있는’ 경우에 한합니다. 기존 서비스가 안정적으로 작동한다면 프로토콜 이름을 바꾸기 위한 이전보다 호환성을 유지하는 것이 중요합니다. 서버 관리 권한이 없다면 로컬에서 새로운 프로토콜을 임의로 추가할 수도 없습니다.

VLESS: 신규 구성 후보

권장

양쪽에서 필요한 기능을 지원한다면 VLESS + TLS 또는 REALITY 구성을 검토할 수 있습니다. flow, 서버 이름, 키 매개변수를 하나씩 확인하고, REALITY가 모든 VLESS 노드에 필수라고 여기지 마세요.

적합한 경우: Xray를 사용하고 서버의 전체 매개변수를 확인할 수 있는 신규 구성

VMess: 기존 구성 유지

기존 VMess + WebSocket + TLS 서비스가 정상 작동한다면 계속 사용할 수 있습니다. 먼저 시간 동기화와 AEAD 관련 설정을 확인하세요. 다른 프로토콜이 있다는 이유만으로 서비스를 다시 구축할 필요는 없습니다.

적합한 경우: VMess 서비스가 이미 있고 현재 연결 설정을 유지해야 하는 경우

Trojan: 기존 TLS 서비스

도메인, 인증서, TLS 인바운드를 관리할 수 있는 환경에 적합합니다. 인증서 만료, SNI 오류, 비밀번호 오류는 각각 따로 확인해야 합니다. 인증서 검증을 끄는 것은 일반적인 해결책이 아닙니다.

적합한 경우: 도메인 인증서 관리 절차가 있고 서버에서 Trojan을 명시적으로 제공하는 경우

Shadowsocks: 암호화 방식이 명확한 연결

주요 매개변수는 주소, 포트, 암호화 방식, 비밀번호입니다. 양쪽에서 모두 지원하는 암호화 방식을 선택하세요. Shadowsocks 2022를 사용할 때는 해당 방식과 키 형식을 양쪽에서 지원하는지도 확인해야 합니다.

적합한 경우: 서버에서 호환되는 Shadowsocks 설정을 직접 제공하는 경우

클라이언트에서는 노드 기능에 맞는 코어를 선택해야 합니다. v2rayN은 노드 기능에 따라 사용할 코어를 선택하고, v2rayNG는 Xray를 사용하지만 새 필드가 있다면 현재 코어의 지원 여부를 확인해야 합니다. v2flyNG는 V2Fly를 사용하므로 관련 생태계에 속한다는 이유만으로 Xray의 REALITY나 특정 flow를 지원한다고 가정하면 안 됩니다. 구독 업데이트에 성공했다는 것은 설정을 가져왔다는 뜻일 뿐, 모든 노드를 실행할 수 있다는 뜻은 아닙니다.

가져오기 및 확인: 공유 링크에서 실제 연결까지

구독 주소와 단일 노드 공유 링크는 서로 다른 연결 방법입니다. 구독 주소는 보통 HTTPS를 통해 여러 노드의 설정을 가져옵니다. 단일 공유 링크는 vmess://, vless://, trojan:// 또는 ss://로 시작하는 경우가 많습니다. 접두사는 프로토콜의 큰 범주만 나타낼 뿐, 코어가 모든 확장 필드를 지원한다는 뜻은 아닙니다.

  1. 링크 유형 확인

    먼저 구독 주소와 단일 공유 링크를 구분하세요. 이 안내는 단일 링크를 대상으로 합니다. 구독 페이지의 내용을 노드 비밀번호로 사용하지 말고, UUID·비밀번호·키가 포함된 전체 링크를 공개 게시판에 올리지 마세요.

  2. 노드 가져오기

    v2rayN에서는 보통 ‘서버’ → ‘클립보드에서 공유 링크 가져오기’를 선택합니다. v2rayNG에서는 메인 화면 오른쪽 위의 ‘+’ → ‘클립보드에서 가져오기’를 선택합니다. 화면 문구는 버전에 따라 다를 수 있으므로 구독 설정이 아닌 공유 링크 가져오기 항목을 찾으세요.

  3. 필드 확인

    v2rayN에서는 노드를 선택한 뒤 편집 창을 열고, v2rayNG에서는 노드의 편집 아이콘을 누르세요. 주소, 원격 포트, UUID 또는 비밀번호, 전송 유형, TLS 또는 REALITY를 차례로 확인합니다. WebSocket을 사용한다면 Host와 경로도 확인해야 합니다.

  4. 실행 후 로그 확인

    먼저 노드를 실행한 다음 필요한 프록시 인바운드를 켜세요. v2rayN에서는 하단의 ‘시스템 프록시’에서 ‘시스템 프록시 자동 설정’을 선택할 수 있습니다. v2rayNG를 실행한 뒤에는 시스템 안내에 따라 VPN 연결을 허용하세요. 연결에 실패하면 먼저 로그를 확인해 설정 파싱, 핸드셰이크, 연결 시간 초과 중 어느 단계에서 문제가 발생했는지 파악한 다음 해당 항목을 수정하세요.

자주 묻는 질문: 연결 실패 시 확인할 계층

VLESS를 가져오는 데는 성공했는데 실행할 때 오류가 납니다. 왜 그런가요?

지원하지 않는 필드, flow 또는 보안 유형이 있는지 먼저 확인하세요. 현재 코어와 서버 설정을 대조해 UUID, REALITY 공개 키, shortId도 확인해야 합니다. 설정을 억지로 저장하려고 모르는 필드를 삭제하지 마세요. 해당 필드가 서버에서 요구하는 조건일 수 있습니다.

Trojan에서 인증서 오류가 발생하면 검증을 건너뛰어도 되나요?

먼저 기기 시간, SNI, 인증서 유효 기간을 확인하세요. 연결 주소가 IP 주소여도 서버에서 지정한 서버 이름을 입력해야 합니다. 검증을 건너뛰면 서버 신원 확인이 약해지므로 올바른 인증서와 이름 설정을 대신할 수 없습니다.

Shadowsocks 비밀번호가 같은데도 연결되지 않는 이유는 무엇인가요?

method와 포트도 함께 확인하세요. 암호화 방식마다 비밀번호나 키 요구 사항이 다르므로 비밀번호만 복사해서는 안 됩니다. 웹페이지는 열리지만 UDP를 사용하는 앱이 작동하지 않는다면 서버의 UDP 설정, 방화벽, 클라이언트의 전달 설정을 확인하세요.

노드 지연 시간은 정상인데 브라우저에서 페이지가 열리지 않는 이유는 무엇인가요?

먼저 브라우저 트래픽이 실제로 클라이언트를 통과하는지 확인한 다음 DNS와 라우팅을 살펴보세요. TCP 탐지에 성공해도 프록시 인증이나 TLS 핸드셰이크가 성공했다는 뜻은 아닙니다. 데스크톱에서는 시스템 프록시만 켜서 먼저 테스트하세요. 문제를 확인하는 동안 TUN, 라우팅, 프로토콜을 동시에 바꾸지 마세요.

최종 선택은 확인 가능한 조건에 근거해야 합니다. 서버에서 실제로 제공하는지, 클라이언트 코어가 지원하는지, 전체 매개변수를 가져올 수 있는지, 실제 앱에서 안정적으로 접속할 수 있는지를 확인하세요. 프로토콜 이름은 점검 항목의 첫 번째에 불과합니다. 작동하는 설정을 따로 보관하고 한 번에 변수 하나만 바꾸는 편이 프로토콜을 계속 바꾸는 것보다 원인을 찾기 쉽습니다.

v2rayN 다운로드운영체제와 설치 형식 선택