VMess·VLESS·Trojan·Shadowsocks 비교: 프록시 프로토콜 특징과 선택 가이드

암호화, 핸드셰이크 비용, 전송 방식, 탐지 회피 특성을 비교하고 데스크톱과 Android 환경별 프로토콜 선택 기준을 안내합니다.

핵심 내용

프로토콜을 고를 때는 먼저 서버가 제공하는 항목을 확인하고, 클라이언트의 코어가 해당 기능을 모두 지원하는지 살펴보세요. 기존 VMess 노드는 이름이 오래됐다는 이유만으로 바꿀 필요가 없습니다. 새 설정은 지원 여부를 확인한 뒤 VLESS와 TLS 또는 REALITY 조합을 고려할 수 있습니다. 인증서와 도메인이 이미 있다면 Trojan을, 간단한 암호화 프록시가 필요하다면 Shadowsocks의 세부 방식을 확인해 보세요. 이 글에서는 프로토콜과 전송 방식, 보안 계층을 구분해 macOS와 Android 사용자가 구독 설정을 점검하고 동일한 조건에서 실제 성능을 비교할 수 있도록 안내합니다.

1. 프로토콜·전송 방식·보안 계층 구분하기

v2rayN은 데스크톱 클라이언트이지 프록시 프로토콜이 아닙니다. V2Ray와 Xray는 연결, 라우팅, DNS 등의 설정을 실행하는 프록시 코어입니다. VMess, VLESS, Trojan, Shadowsocks는 클라이언트와 서버가 데이터를 인증하고 캡슐화하거나 암호화하는 방식을 정의합니다. 가져오기에 성공했다는 것은 클라이언트가 링크를 읽었다는 뜻일 뿐, 현재 코어가 모든 기능을 실행할 수 있다는 보장은 아닙니다.

노드 이름에 표시된 “VLESS + WebSocket + TLS”는 세 가지 계층을 포함합니다. VLESS는 프록시 요청과 사용자 정보를 처리하고, WebSocket은 데이터를 전달하며, TLS는 연결을 암호화하고 서버 신원을 확인합니다. 이 세 계층을 하나의 “프로토콜”로 뭉뚱그리면 노드를 바꿀 때 경로, 도메인 또는 보안 설정을 빠뜨리기 쉽습니다.

프록시 프로토콜
VMess, VLESS, Trojan, Shadowsocks 중 어떤 프로토콜인지 확인하세요. 양쪽에서 같은 프로토콜을 사용해야 하며, 클라이언트에서 이름만 바꿔서는 연결되지 않습니다.
전송 방식
TCP, WebSocket, gRPC 등 실제 설정을 확인하세요. 프로토콜과 코어, 버전에 따라 지원하는 조합이 다를 수 있습니다.
연결 보안
TLS나 REALITY 등의 설정을 확인하세요. REALITY는 Xray의 보안 기능 중 하나로, 독립된 프록시 프로토콜이 아니며 일반 인증서 옵션처럼 바꿔 사용할 수도 없습니다.

2. 네 가지 프로토콜의 암호화 및 인증 방식

암호화 여부는 프로토콜 항목만 볼 것이 아니라 연결 전체를 기준으로 판단해야 합니다. 일반적인 VLESS 설정에서 encryption=none은 프로토콜 자체가 페이로드를 암호화하지 않는다는 뜻입니다. 바깥 계층에 TLS 또는 REALITY를 올바르게 설정했다면 연결은 여전히 보호될 수 있습니다. 반대로 포트만 443으로 설정했다고 TLS가 활성화된 것은 아닙니다.

프로토콜 인증 및 암호화 일반적인 조합 확인할 항목
VMess UUID를 사용자 식별 정보로 사용합니다. 최신 설정은 AEAD 인증 방식을 사용하며, 페이로드 암호화 여부는 보안 옵션에 따라 달라집니다. VMess + TCP 또는 WebSocket + TLS UUID, 페이로드 보안 옵션, 시스템 시간, 전송 설정
VLESS UUID로 인증합니다. 프로토콜 자체는 페이로드를 암호화하지 않으므로 보통 외부 보안 계층과 함께 사용합니다. VLESS + TLS 또는 Xray가 지원하는 REALITY 조합 UUID, 보안 계층, flow, REALITY에 필요한 공개 키 등의 설정
Trojan 비밀번호로 인증하며, 인증 정보와 프록시 데이터를 TLS로 보호합니다. Trojan + TCP + TLS。 비밀번호, 인증서 도메인, SNI, 인증서 검증 상태
Shadowsocks 선택한 암호화 방식으로 데이터를 보호합니다. 기존 AEAD 방식과 2022 계열은 키 규칙이 다릅니다. 기본 TCP/UDP 암호화 프록시 정확한 방식 이름, 비밀번호 또는 키, 코어 지원 범위

VMess의 alterId는 호환성 관련 설정입니다. 최신 AEAD 구성에서는 보통 0을 사용하므로, 오래된 가이드를 따라 임의의 값을 입력하지 마세요. VMess 인증은 시간 정보에도 영향을 받습니다. 시스템 시간이 크게 어긋나 있다면 먼저 macOS의 ‘시스템 설정’ → ‘일반’ → ‘날짜 및 시간’에서 자동 설정을 켠 뒤 노드를 확인하세요.

Shadowsocks는 하나의 고정된 암호화 방식이 아닙니다. aes-128-gcm과 2022-blake3-aes-128-gcm은 서로 다른 설정입니다. 후자는 규격에 맞는 사전 공유 키가 필요하며, 임의로 짧은 비밀번호를 키로 입력할 수 없습니다. 방식을 변경할 때는 서버 설정도 함께 바꿔야 합니다.

443
HTTPS에서 자주 쓰는 TCP 포트일 뿐, TLS가 활성화됐다는 뜻은 아닙니다
128비트
UUID 식별자의 길이이며, 암호화 강도를 뜻하지 않습니다
16바이트
2022-blake3-aes-128-gcm의 원시 마스터 키 길이

3. 핸드셰이크 비용과 속도: 테스트 조건부터 맞추기

웹페이지를 처음 열 때는 DNS 조회, 연결 설정, 보안 핸드셰이크, 프록시 요청, 대상 사이트의 응답이 차례로 이루어집니다. Trojan은 일반적으로 TLS 연결을 수립한 뒤 프록시 요청을 전달합니다. VMess와 VLESS의 실제 오버헤드는 TLS, WebSocket 또는 다른 전송 방식이 추가되는지에 따라 달라집니다. Shadowsocks는 기본 연결에서 TLS 인증서 핸드셰이크를 거치지 않지만, 모든 네트워크에서 더 빠르다는 뜻은 아닙니다.

일반적인 HTTP/1.1 환경에서 WebSocket을 사용하려면 업그레이드 핸드셰이크가 추가됩니다. 연결을 재사용하면 이후 요청마다 연결을 새로 설정하는 비용을 줄일 수 있지만, 혼잡이나 장애가 미치는 범위도 달라집니다. 따라서 프로토콜 이름만으로 고정된 지연 시간을 추정할 수 없고, 한 번 측정한 ‘핑’의 밀리초 수를 웹페이지 전체 로딩 시간으로 볼 수도 없습니다.

  1. 회선 조건 통일: 가능한 한 같은 서버와 출구 노드, 비슷한 시간대의 설정끼리 비교하세요. 서로 다른 지역의 노드로는 프로토콜 차이만 따로 비교할 수 없습니다.
  2. 프록시 진입점 통일: 테스트 중에는 시스템 프록시 또는 TUN 모드, 라우팅 규칙, DNS 설정을 동일하게 유지하세요. 한쪽은 프록시를 사용하고 다른 쪽은 직접 연결하는 상황을 피해야 합니다.
  3. 항목별로 기록: 페이지 최초 로딩 시간, 지속 다운로드 속도, 실패 횟수를 각각 기록하세요. 각 조건에서 최소 5회 측정하고, 가장 좋은 결과만 보지 말고 중앙값을 확인하세요.
  4. UDP 별도 확인: 통화, 게임 또는 QUIC가 필요하다면 실제 앱으로 테스트하세요. 웹페이지가 열린다고 UDP 전달까지 정상이라는 뜻은 아닙니다.

결론: 불안정한 설정을 먼저 제외한 뒤 속도 비교

5회 테스트에서 반복적으로 시간 초과가 발생한다면 먼저 회선과 전송 방식의 호환성을 확인하세요. 모든 설정에서 요청이 안정적으로 완료될 때만 중앙값을 비교할 의미가 있습니다. 동일한 조건에서 측정한 기록이 없다면 프로토콜 이름만으로 속도를 순위 매기지 마세요.

4. TLS·REALITY와 탐지 회피의 한계

TLS는 전송 내용을 보호하지만, “TLS 사용”이 트래픽을 일반 웹페이지와 완전히 똑같이 보이게 한다는 뜻은 아닙니다. 핸드셰이크 특성, 도메인, IP 평판, 패킷 크기와 타이밍, 비정상 요청에 대한 서버 응답 등이 탐지 결과에 영향을 줄 수 있습니다. VMess도 TLS와 함께 사용한다면 이름만으로 다른 프로토콜보다 취약하다고 단정할 수 없습니다.

Trojan은 TLS를 통해 프록시 트래픽을 전달하지만, 인증서와 도메인, 서버 동작을 올바르게 설정해야 합니다. VLESS와 REALITY를 함께 사용할 때는 양쪽 코어가 지원해야 하며, 공개 키, serverName, shortId 등의 설정도 정확해야 합니다. 일부 구성에서는 특정 flow가 필요하므로 관련 필드를 많이 채울수록 좋다고 생각해서는 안 됩니다.

5. 사용 환경별 선택: 신규 설정, 기존 구독, Android 기기

아래의 ‘추천’은 새 설정을 만들고, 서버를 변경할 수 있으며, 클라이언트가 해당 기능을 지원하는 경우에 한합니다. 기존 구독이 정상 작동한다면 서비스 제공자가 지정한 조합을 그대로 유지하는 편이 좋습니다. 프로토콜은 상위 단계로 올라가는 선택지가 아닙니다. 현재 네트워크와 관리 여건에 맞는 설정을 선택해야 합니다.

VLESS + TLS 또는 REALITY

추천

새 설정이라면 우선 검토할 수 있습니다. 프로토콜 자체는 페이로드를 별도로 암호화하지 않으므로, 보안은 외부 보호 계층을 올바르게 설정하는 데 달려 있습니다. REALITY 또는 특정 flow를 사용하기 전에는 Xray 코어와 서버 설정이 호환되는지 확인하세요.

적합한 사용자: 서버 설정을 직접 관리하고 보안 계층의 설정을 확인할 수 있는 경우

Trojan + TLS

도메인과 인증서를 관리하는 절차가 이미 있다면 설정을 이해하기 쉽습니다. 비밀번호, SNI, 인증서 검증을 확인하세요. 연결 오류를 해결하려고 인증서 검증을 계속 건너뛰면 안 됩니다.

적합한 사용자: TLS 구축 경험이 있고 서버에서 Trojan을 명시적으로 제공하는 경우

VMess AEAD

안정적으로 작동하는 기존 VMess 구독은 계속 사용할 수 있습니다. 기존 전송 방식과 TLS 설정을 유지하고 시간 동기화를 확인하세요. 현재 조합에 문제가 있다는 근거가 없다면 프로토콜 이름만 바꾸려고 다시 구성할 필요는 없습니다.

적합한 경우: 기존 구독과 서버를 유지하고 호환성을 우선하는 환경

Shadowsocks AEAD / 2022

설정 항목이 비교적 간단하며 해당 방식을 명확히 제공하는 서버에 적합합니다. 선택하기 전에 정확한 방식 이름과 키 형식을 확인하세요. UDP가 필요한 앱은 서버와 로컬 진입점 모두에서 전달을 지원하는지도 확인해야 합니다.

적합한 경우: 가벼운 암호화 프록시가 필요하고 암호화 방식과 키를 알고 있는 환경

macOS에서 v2rayN을 사용할 때는 클라이언트 버전만 보지 말고 현재 선택한 코어를 확인해야 합니다. Android용 v2rayNG는 Xray 코어를, v2flyNG는 v2fly 코어를 사용합니다. REALITY, 특정 flow 또는 Shadowsocks 2022를 사용한다면 해당 코어 버전의 실제 지원 여부를 확인하세요. 세 클라이언트가 모든 설정을 똑같이 지원한다고 가정해서는 안 됩니다.

6. 가져온 뒤 확인하기: 프로토콜 설정부터 로컬 프록시 진입점까지

클라이언트에 노드가 표시된다고 앱 트래픽이 노드를 통과한다는 뜻은 아닙니다. 가져오기를 마치면 먼저 노드 편집 창에서 서버 설정을 확인한 뒤 로컬 프록시 진입점을 점검하세요. 아래의 1080은 SOCKS5 테스트용 포트 예시이며 v2rayN의 고정 기본값이 아닙니다. 명령을 실행하기 전에 현재 실제로 사용 중인 포트로 바꿔야 합니다.

  1. 프로토콜 및 인증 정보: VMess/VLESS의 UUID, Trojan 비밀번호 또는 Shadowsocks의 전체 방식 이름과 키를 확인하세요. 복사할 때 앞뒤에 공백이 포함되지 않았는지도 살펴보세요.
  2. 주소 및 포트: 서버 주소와 포트를 확인하세요. 로컬 수신 포트와 원격 서버 포트는 서로 다른 값입니다.
  3. 전송 및 보안: WebSocket은 path와 Host를, gRPC는 serviceName을 확인하세요. TLS에서는 serverName을 확인하고, REALITY에서는 공개 키와 shortId도 확인해야 합니다.
  4. 로컬 수신: v2rayN의 ‘설정’ → ‘매개변수 설정’에서 로컬 수신 또는 인바운드 포트를 찾으세요. 메뉴 이름은 버전에 따라 다를 수 있으므로 현재 설정과 시작 로그를 기준으로 확인하세요.
  5. 앱 연결 경로: 시스템 프록시가 설정되어 있는지, 또는 필요한 경우 TUN이 활성화되어 있는지 확인하세요. 단일 진입점을 테스트할 때 라우팅 및 DNS 규칙을 동시에 변경하지 마세요.
# 1080을 현재 클라이언트의 SOCKS5 수신 포트로 바꾸세요
curl --proxy socks5h://127.0.0.1:1080 --connect-timeout 10 --max-time 30 -I https://example.com/

socks5h는 대상 도메인을 SOCKS 프록시 서버에서 조회하므로 테스트에 영향을 줄 수 있는 로컬 도메인 조회를 줄이는 데 도움이 됩니다. 그렇다고 이후 DNS 요청이 특정 암호화 경로를 반드시 통과하는 것은 아닙니다. 명령 결과는 클라이언트의 라우팅 규칙에도 영향을 받으므로 아웃바운드 로그도 확인하세요. 127.0.0.1에 연결할 수 없다는 메시지가 나오면 먼저 로컬 수신 설정을 확인하세요. 핸드셰이크 또는 인증 오류라면 원격 서버 설정을 점검하세요.

7. 프로토콜 선택 관련 자주 묻는 질문

VLESS의 암호화가 none으로 표시되는데 바꿔야 하나요?

임의로 바꾸지 마세요. 노드 편집 창을 열어 TLS 또는 REALITY 설정이 서버와 일치하는지 먼저 확인하세요. 여기서 none은 VLESS 프로토콜 계층의 설정입니다. 외부 보호 계층도 없다면 안전한 공개 네트워크 연결로 간주해서는 안 되며, 서버 제공자에게 설정 의도를 확인해야 합니다.

VMess 노드가 아직 작동하는데 전부 VLESS로 바꿔야 하나요?

이름만 바꾸기 위해 변경할 필요는 없습니다. 먼저 시간 동기화, 현재 코어, 전송 설정을 확인한 뒤 동일한 네트워크 조건에서 테스트하세요. 서버가 사용 가능한 VLESS 설정을 제공할 때만 가져와 비교할 수 있습니다. 기존 노드에서 프로토콜만 바꾸면 되는 것은 아닙니다.

Trojan에서 인증서 오류가 나는데 검증을 건너뛰면 되나요?

먼저 시스템 시간과 노드의 serverName을 확인한 다음, 서버에서 인증서 유효 기간과 인증서 체인, 도메인 포함 여부를 점검하도록 하세요. 검증 건너뛰기를 계속 사용하지 마세요. 인증서나 도메인 설정을 수정한 뒤 정상적으로 검증되는 상태에서 다시 테스트해야 합니다.

Shadowsocks를 가져오는 데 성공했는데 인증 실패가 계속 표시되나요?

방식 이름이 정확히 일치하는지 확인하고, 입력한 값이 비밀번호인지 규격에 맞는 키인지 살펴보세요. 2022 방식은 일반적으로 Base64로 인코딩된 고정 길이 키를 사용하므로 기존 AEAD의 비밀번호와 임의로 바꿔 쓸 수 없습니다. 코어가 해당 방식도 지원하는지 확인하세요.

같은 구독이 컴퓨터에서는 되는데 Android에서는 왜 시간 초과가 발생하나요?

먼저 양쪽에서 실제로 선택한 노드, 네트워크, 보안 설정을 비교하세요. v2rayNG와 v2flyNG는 코어가 다르므로 REALITY 또는 특정 flow를 사용할 때는 호환성을 먼저 확인해야 합니다. 그런 다음 같은 Wi-Fi에 연결해 테스트하여 설정 문제인지 모바일 네트워크 차이인지 구분하세요.

V2Ray 클라이언트 다운로드