Clash 실행하자마자 종료될 때: 시작 오류 점검 순서와 해결 방법
설정 파일 문법 오류, 코어와 설정의 호환성, 캐시 손상, 시스템 권한 충돌을 차례로 점검하고 데이터 삭제와 설정 재가져오기를 안전하게 진행하는 방법을 안내합니다.
먼저 구분하세요: 앱이 종료되나요, 코어가 멈추나요, VPN 연결이 실패하나요?
‘Clash를 열자마자 종료된다’는 증상은 앱 화면 종료, 프록시 코어 중단, 시스템 VPN 세션 연결 실패 등 서로 다른 문제일 수 있습니다. 어느 단계에서 종료되는지 먼저 확인한 뒤 설정 변경 여부를 결정하세요. 웹페이지가 열리지 않거나 노드 연결 시간이 초과되거나 구독 업데이트에 실패했다는 것만으로 앱이 종료됐다고 볼 수는 없습니다.
| 관찰된 증상 | 우선 확인할 항목 | 첫 번째 조치 |
|---|---|---|
| 아이콘을 누르면 홈 화면으로 돌아가고 설정 화면에도 들어갈 수 없음 | 앱 데이터, 설치 파일 아키텍처, 시스템 호환성 | 강제 종료한 뒤 다시 실행하고 시스템 안내 메시지를 기록합니다 |
| 화면은 열리지만 서비스를 시작하면 바로 중단됨 | 설정 파싱, 코어 기능, 리소스 파일 | 시작 로그에서 가장 먼저 나타난 오류를 확인합니다 |
| 연결을 누른 뒤 실패하지만 화면은 계속 조작할 수 있음 | VPN 권한, 다른 VPN 앱, 상시 VPN 설정 | 먼저 VPN 터널을 사용하는 다른 앱의 연결을 해제합니다 |
| 화면을 끄면 연결이 끊기지만 다시 켜면 연결 가능 | 배터리 최적화, 백그라운드 제한, 메모리 회수 | 백그라운드 실행 권한을 확인하고 설정은 먼저 삭제하지 않습니다 |
먼저 네 가지 정보를 기록해 두세요. 기기 모델과 OS 버전, 클라이언트 이름과 버전, 코어 이름과 버전, 문제가 발생하는 동작입니다. 특히 ‘구독 업데이트 후’, ‘클라이언트 업그레이드 후’, ‘TUN 활성화 후’ 중 언제 문제가 시작됐는지 기억해 두세요. 이런 시점 정보가 반복해서 재설치하는 것보다 원인을 찾는 데 더 유용합니다.
1단계: 설정을 보존하고 위험이 적은 방법부터 시도
앱을 열 수 있다면 먼저 로컬 설정과 오버라이드 내용을 내보내세요. 구독 URL은 별도로 안전한 비공개 위치에 보관해야 합니다. 보통 접근 자격 정보가 포함되므로 공개 스크린샷에 노출하지 마세요. 설정 출처에 계속 접근할 수 있는지 확인한 다음 데이터 삭제를 고려하세요.
- 다른 VPN 앱을 종료합니다. 로컬 VPN으로 트래픽을 필터링하는 방화벽, 광고 차단 앱, 패킷 캡처 도구도 포함됩니다. 테스트 중 시스템 VPN 터널을 서로 차지하려는 상황을 방지할 수 있습니다.
- 클라이언트를 강제 종료합니다. Android에서는 ‘설정’ → ‘앱’ → ‘모든 앱 보기’ → 대상 클라이언트 → ‘강제 종료’를 선택합니다. 제조사에 따라 메뉴 이름은 조금 다를 수 있습니다.
- 한 번 다시 실행합니다. 설정 화면에 들어갈 수 있다면 클라이언트의 시작 시 자동 연결 옵션을 잠시 끄고 화면이 안정적으로 유지되는지 확인하세요.
- 필요하면 휴대전화를 재부팅합니다. 재부팅한 뒤 다른 VPN 앱은 열지 말고 대상 클라이언트만 실행해 백그라운드 서비스 간 간섭을 줄이세요.
2단계: YAML 문법과 구독 응답 내용 확인
구독 업데이트나 규칙 변경 직후 문제가 생겼다면 먼저 설정 파싱을 확인하세요. 일반적으로 클라이언트는 설정 오류를 알려 주지만, 일부 클라이언트는 잘못된 설정을 처리하다 종료될 수도 있습니다. 마지막의 ‘서비스 중지’ 메시지만 보지 말고 그보다 앞에 처음 나타난 파싱 오류를 찾으세요.
로그 키워드로 문제 찾기
yaml,unmarshal,line: 들여쓰기와 자료형, 오류가 표시된 줄 주변을 먼저 확인하세요. 실제 오류는 안내된 줄의 바로 윗줄에 있을 수도 있습니다.proxy not found또는 정책 참조 오류: 규칙에서 참조하는 정책 그룹이 있는지, 이름과 대소문자, 공백이 일치하는지 확인하세요.unsupported,unknown: 로그가 가리키는 항목이 프로토콜인지, 규칙 유형인지, 필드인지 확인한 뒤 코어 호환성을 점검하세요.- 다운로드한 내용이
<html로 시작한다면 설정 파일이 아니라 로그인 페이지, 오류 페이지 또는 접근 확인 페이지를 받은 것일 수 있습니다.
YAML 계층 들여쓰기에는 공백을 사용하고 탭은 섞지 마세요. 콜론이나 샵(#) 같은 특수 문자가 들어간 이름 또는 문자열은 필요한 경우 따옴표로 감싸세요. 구독 URL이 브라우저에서 열린다고 해서 응답 내용이 반드시 Clash 설정인 것은 아닙니다. 일부 구독 형식은 인코딩된 노드 목록만 포함하므로 제공업체가 해당 형식에 맞는 주소를 안내해야 합니다.
최소 설정으로 문제 분리하기
클라이언트에서 로컬 YAML 가져오기를 지원한다면 임시 설정 파일을 새로 만들어 테스트하세요. 유일한 원본 설정을 덮어쓰지 마세요. 아래 설정은 기본 파싱과 코어 시작 여부를 확인하기 위한 것으로 프록시 노드가 없으며 트래픽을 프록시로 전달하지 않습니다. 모바일 클라이언트는 VPN, DNS 또는 TUN 설정을 별도로 생성할 수 있으므로 해당 클라이언트의 가져오기 안내도 따라야 합니다.
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies: []
proxy-groups: []
rules:
- MATCH,DIRECT
7890은 이 예시에서 로컬 혼합 프록시가 수신 대기하는 포트이며 원격 노드 포트가 아닙니다. 모바일 클라이언트가 이 값을 덮어쓸 수도 있습니다. 최소 설정은 시작되지만 원래 설정은 시작되지 않는다면 정책 그룹, 규칙 세트, 오버라이드 내용을 하나씩 복구하세요. 항목을 한 종류씩 복구할 때마다 테스트하면 여러 항목을 한꺼번에 추가해 원인을 놓치는 일을 막을 수 있습니다.
구독에서 생성된 설정이라면 클라이언트가 지원하는 오버라이드 기능을 사용하거나 설정 제공업체에 원본 파일 수정을 요청하는 것이 좋습니다. 다운로드한 설정을 직접 수정하면 다음 업데이트 때 변경 사항이 다시 덮어써질 수 있습니다.
3단계: 클라이언트 코어와 설정 기능의 호환성 확인
Clash는 프로젝트와 설정 생태계에서 흔히 쓰이는 이름일 뿐, 이름이 같은 모든 클라이언트가 같은 코어를 사용하는 것은 아닙니다. Clash Meta 계열은 이후 mihomo라는 이름으로 발전했으며 지원 범위도 기존 Clash와 완전히 같지 않습니다. 겉모습이 비슷한 클라이언트라도 지원하는 프로토콜, 규칙 필드, TUN 구현이 다를 수 있습니다.
설정 업데이트 후에만 문제가 생기면 새로 추가한 기능부터 확인
예를 들어 설정에 특정 프로토콜, rule-providers 필드의 확장 옵션, 특정 DNS 설정이 추가되면 구형 코어는 이를 지원하지 않을 수 있습니다. 알 수 없는 필드는 무시되기도 하고 검증 오류를 일으키기도 합니다. ‘오류가 없으니 적용된 것’이라고 단정하지 마세요. 해당 코어 버전의 문서와 실제 로그를 기준으로 확인하세요.
- 클라이언트의 ‘정보’ 또는 코어 정보 화면에서 앱 버전과 코어 버전을 각각 기록하세요. 두 버전을 혼동하지 마세요.
- 오류 메시지가 가리키는 필드나 프로토콜을 확인하고 코어 문서에서 지원 여부를 대조하세요.
- 업그레이드가 필요하다면 해당 클라이언트의 정식 안정 버전을 선택하고 먼저 설정 사본을 보관하세요.
- 업그레이드 후에는 최소 설정으로 먼저 시작한 다음 전체 구독을 가져오고, 마지막으로 로컬 오버라이드를 복구하세요.
Android 설치 파일 아키텍처도 확인하세요
일반적인 arm64-v8a와 armeabi-v7a는 서로 다른 아키텍처입니다. 에뮬레이터는 x86_64를 사용할 수도 있습니다. 아키텍처가 맞지 않으면 대개 설치 단계에서 오류가 나지만, 호환되는 네이티브 라이브러리가 없으면 시작할 때 문제가 드러날 수도 있습니다. 프로세서가 64비트를 지원한다는 이유만으로 시스템이 모든 64비트 앱을 지원한다고 단정하지 말고, 클라이언트 배포 안내와 기기 OS에 맞는 설치 파일을 선택하세요.
앱 업그레이드 직후 문제가 시작됐다면 로그를 보존하고 해당 프로젝트의 알려진 문제를 확인하세요. 다운그레이드가 항상 해결책인 것은 아닙니다. 새 버전에서 저장한 데이터 형식이 구버전과 호환되지 않을 수 있고, 구버전 설치 파일이 기존 앱 위에 설치되지 않을 수도 있습니다. 출처가 다른 클라이언트를 반복해서 덮어 설치하지 마세요.
4단계: 캐시, 리소스, 앱 데이터 순으로 조치
캐시 손상, 규칙 세트 다운로드 중단, 로컬 데이터베이스 오류로 시작 단계에서 문제가 반복될 수 있습니다. 영향이 가장 적은 조치부터 시작하세요. Android에서는 ‘설정’ → ‘앱’ → 대상 클라이언트 → ‘저장공간 및 캐시’ → ‘캐시 삭제’를 선택한 뒤 다시 실행합니다.
화면에 들어갈 수 있다면 특정 리소스부터 다시 생성
- 로그에 특정 규칙 제공자가 표시되면 해당
rule-providers만 업데이트하거나 잠시 사용 중지하세요. 모든 구독을 한꺼번에 삭제하지 마세요. - 로그에 지리 데이터베이스 읽기 오류가 명시되어 있다면 클라이언트의 리소스 업데이트 기능을 사용하고 다운로드가 완료된 뒤 시작하세요.
- 저장 공간 부족이나 파일 쓰기 오류가 발생하면 먼저 기기의 여유 저장 공간을 확인해 업데이트 중 불완전한 파일이 다시 생성되지 않도록 하세요.
시스템 캐시를 지워도 클라이언트가 저장한 데이터베이스나 설정 리소스까지 삭제된다는 보장은 없습니다. 앱이 파일을 저장하는 위치에 따라 달라집니다. 캐시 삭제 후에도 문제가 전혀 달라지지 않는다면 같은 작업을 반복하지 말고 로그를 다시 확인하세요.
데이터를 꼭 삭제해야 한다면 단계별로 복구
- 구독 URL, 로컬 규칙, 필요한 설정을 백업했고 다시 가져올 수 있는지 확인하세요.
- ‘저장공간 삭제’를 실행하거나 앱을 삭제 후 다시 설치합니다. Android에서는 앱을 삭제하면 로컬 앱 데이터도 보통 함께 삭제됩니다.
- 처음 실행한 뒤에는 오래된 백업 전체를 바로 복구하지 말고 초기 상태에서 화면이 안정적인지 먼저 확인하세요.
- 설정 하나만 가져와 실행을 테스트하세요. 성공하면 오버라이드와 다른 구독을 차례로 복구합니다.
이전 백업을 모두 복구한 뒤 같은 문제가 다시 발생한다면 문제를 유발하는 조건도 함께 복구된 것일 가능성이 큽니다. 이때는 원인을 설치 실패로만 돌리지 말고 백업에 포함된 설정, 리소스 참조 또는 앱 설정을 확인하세요.
5단계: VPN 권한, TUN, 백그라운드 제한 확인
Android 모바일 기기에서는 보통 시스템 VPN 서비스를 통해 기기 트래픽을 처리합니다. 일반적인 사용에 루트 권한은 필요하지 않습니다. 다만 클라이언트의 TUN 설정은 데스크톱과 완전히 같지 않으므로 데스크톱용 네트워크 인터페이스 이름, 라우팅 매개변수, 권한 복구 명령을 그대로 적용하지 마세요.
연결 직후 실패하면 VPN 세션 충돌 확인
Android에서 흔히 볼 수 있는 경로는 ‘설정’ → ‘네트워크 및 인터넷’ → ‘VPN’입니다. 다른 앱에서 ‘항상 켜진 VPN’을 사용 중인지, ‘VPN 없이 연결 차단’ 설정이 현재 테스트에 영향을 주는지 확인하세요. 시스템에 따라 이 메뉴가 ‘연결 및 공유’ 아래에 있을 수 있습니다. 테스트 전에 기존 설정을 기록하고, 완료 후에는 보안 요구사항에 맞게 복원하세요.
권한을 다시 부여할 때는 대상 클라이언트에서 시스템 VPN 연결 요청을 띄운 다음 시스템 팝업에 표시된 앱 이름을 확인하세요. 업무 프로필, 기기 관리 정책 또는 회사에서 관리하는 휴대전화는 VPN 사용이 제한될 수 있습니다. 이런 제한은 기기 관리자에게 문의해야 하며 클라이언트를 재설치해도 해결되지 않는 경우가 많습니다.
화면을 끈 뒤 연결이 끊기는 것은 시작 단계에서 앱이 종료되는 것과 다릅니다
앱이 화면에 표시될 때는 정상 작동하고 화면을 끈 뒤에만 연결이 끊긴다면 ‘설정’ → ‘앱’ → 대상 클라이언트 → ‘배터리’에서 백그라운드 실행 옵션을 확인하세요. 일부 제조사는 자동 시작이나 백그라운드 보호 설정을 별도로 제공합니다. 제한을 완화하면 배터리 소모가 늘 수 있으므로 백그라운드에서 실제로 앱이 종료되는지 먼저 확인한 뒤 필요한 항목만 조정하세요.
로그에 노드 연결 시간 초과나 DNS 조회 실패만 나타나고 화면과 서비스는 계속 실행 중이라면 네트워크와 DNS 문제를 점검해야 합니다. DNS 서버 변경으로 YAML 파싱 오류를 해결할 수는 없으며 노드를 바꿔도 앱 네이티브 라이브러리 오류는 해결되지 않습니다.
iOS에서 앱을 열자마자 종료될 때: 앱과 네트워크 확장을 따로 확인
iOS 클라이언트는 보통 Network Extension으로 VPN 터널을 생성합니다. 설치 방식은 Android APK와 다르며, 모든 iOS 클라이언트가 mihomo 설정을 완벽하게 지원하는 것도 아닙니다. 화면은 열리지만 연결이 곧바로 중단된다면 클라이언트 연결 로그를 확인하세요. 아이콘을 누르자마자 종료된다면 앱 자체, 시스템 호환성, 설치 출처 상태를 먼저 점검하세요.
- 기기를 재시동한 뒤 원래 설치 경로에서 사용 가능한 업데이트를 확인하세요. TestFlight로 설치했다면 테스트 빌드가 만료되지 않았는지도 확인해야 합니다.
- ‘설정’ → ‘일반’ → ‘VPN 및 기기 관리’에서 기존 VPN 항목을 확인하세요. 회사나 학교에서 관리하는 프로파일은 함부로 삭제하지 마세요.
- ‘설정’ → ‘개인정보 보호 및 보안’ → ‘분석 및 향상’ → ‘분석 데이터’에서 문제가 발생한 시각에 해당하는 앱 또는 확장 기록을 찾으세요. 기록 유무는 시스템과 진단 설정에 따라 달라질 수 있습니다.
분석 데이터의 JetsamEvent는 메모리 압박으로 프로세스가 종료된 상황과 관련이 있을 수 있지만, 코드 충돌이 확인됐다는 뜻은 아닙니다. 용량이 큰 규칙 세트를 불러온 뒤에만 종료된다면 규칙 제공자 수를 줄여 비교 테스트한 다음 로그를 클라이언트 유지관리자에게 전달해 확인하세요.
iOS의 ‘앱 정리하기’는 일반적으로 문서와 데이터를 보존하지만 ‘앱 삭제’는 로컬 데이터를 제거합니다. 두 기능은 용도가 다릅니다. 전자는 기존 문제 상태가 남을 수 있고, 후자는 먼저 설정을 내보내야 합니다. 복구할 방법이 없는 상태에서 앱을 바로 삭제하지 마세요.
계속 종료된다면 재현 정보를 제출하고 구독 정보를 공개하지 마세요
문제를 제보할 때는 재현 과정을 한 문장으로 설명하세요. 예: ‘앱을 처음 실행하면 설정 화면에 들어갈 수 있지만, 특정 설정을 선택하고 연결을 누르면 같은 단계에서 화면이 종료됩니다.’ 시스템 버전, 앱 버전, 코어 버전, 마지막으로 정상 작동한 시각, 최소 설정의 시작 여부도 함께 첨부하세요. 유지관리자에게 필요한 것은 재현 가능한 조건이지 홈 화면 스크린샷 한 장이 아닙니다.
선택 사항: Android에서 ADB로 충돌 기록 수집
PC 디버깅에 익숙하다면 신뢰할 수 있는 PC에 Android 플랫폼 도구를 설치하고 USB 디버깅을 켠 뒤 권한을 허용하고 다음 명령을 실행할 수 있습니다. 앱 종료 문제를 한 번 재현한 뒤 기록을 내보내고, 완료하면 USB 디버깅을 끄세요. ADB 사용이 익숙하지 않다면 앱 내 로그 내보내기 기능을 먼저 이용하세요.
adb devices
adb logcat -b crash -d > clash-crash.txt
충돌 버퍼에 별도 프록시 코어의 오류가 모두 포함되지 않을 수 있으므로 클라이언트 시작 로그도 보관하세요. 공유하기 전에 구독 URL, 토큰, 노드 비밀번호, 서버 주소, 개인 경로를 삭제하고 오류 전후 내용만 남기세요. 전체 설정을 공개 게시판에 붙여넣지 마세요.