MIHOMO · 설정 가이드
Clash 고급 설정가이드
프록시 그룹, 규칙 세트, DNS, 네트워크 트래픽 처리까지. 설정이 적용되는 순서에 따라 각 단계의 입력값과 한계, 검증 결과를 확인하세요.
처음 설치하고 구독을 가져오는 경우 먼저 사용 가이드에 따라 연결을 완료하세요. 이 페이지는 이미 작동하는 설정을 사용하는 분을 위해 장기적으로 관리할 매개변수를 설명합니다. 빠른 시작 절차는 반복하지 않습니다. 예제는 mihomo 설정 형식을 기준으로 하며, 클라이언트마다 메뉴 이름과 오버라이드 방식이 다를 수 있습니다.
설정 계층과 적용 여부 확인
Clash 설정 파일은 인터페이스의 모든 설정을 그대로 복사한 파일이 아닙니다. Clash Plus 같은 데스크톱 클라이언트에서는 앱이 구독 다운로드, 창 조작, 시스템 연동을 담당하고 mihomo 코어가 포트 수신, 규칙 매칭, 연결 생성을 담당합니다. 클라이언트는 구독을 읽은 뒤 로컬 설정을 덧붙여 최종 실행 설정을 만들 수 있습니다. 원본 구독 파일을 편집해도 생성 과정에서 다시 덮어쓰면 변경 사항이 계속 적용되지 않습니다. 고급 설정은 먼저 이 계층을 구분하는 데서 시작합니다.
코어가 실제로 읽는 설정 확인
클라이언트 설정 페이지에서 현재 활성화된 항목을 확인한 다음, 로그 페이지에서 시작 시 사용한 설정 디렉터리를 살펴보세요. ‘실행 설정 보기’와 비슷한 메뉴가 있다면 편집기 원본보다 최종 생성 결과를 우선 확인합니다. 혼합 포트, 실행 모드, DNS 활성화 여부, 규칙 목록을 중점적으로 살펴보세요. 클라이언트마다 파일 저장 위치가 다르므로 다른 컴퓨터의 절대 경로를 그대로 사용하지 말고, 코어가 실행 중일 때 작업 디렉터리를 직접 옮기지 마세요.
변경하기 전에 현재 정상적으로 작동하는 설정을 보관하고 시스템 프록시, TUN, 서비스 모드 상태를 기록하세요. 한 번에 한 종류의 설정만 변경합니다. 예를 들어 프록시 그룹을 바꾸고 정상적으로 불러온 것을 확인한 뒤 DNS를 수정하세요. 구독 교체, 가상 네트워크 어댑터 활성화, 리졸버 변경을 동시에 하면 문제가 어느 단계에서 생겼는지 파악하기 어렵습니다. 설정 백업은 로컬에 보관하세요. 구독 주소, 노드 비밀번호, 제어 인터페이스 인증 정보가 포함될 수 있으므로 공개 게시판에 그대로 올리면 안 됩니다.
최소 설정으로 문법 문제와 네트워크 문제 구분
아래는 로컬에서 직접 연결을 테스트하기 위한 최소 설정입니다. 별도 파일로 저장해 코어가 읽을 수 있는지 확인할 수 있습니다. 프록시 노드가 없어 원격 프록시 기능은 제공하지 않습니다. YAML을 읽을 수 있는지, 로컬 포트가 시작되는지, 규칙 모드에서 직접 연결 경로가 정상인지 확인하는 용도입니다. 실제 사용 시에는 기존 구독 설정으로 돌아가세요. 이 파일을 완전한 프록시 설정으로 사용하면 안 됩니다.
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies: []
proxy-groups:
- name: 수동 선택
type: select
proxies:
- DIRECT
rules:
- MATCH,수동 선택
YAML 들여쓰기에는 공백을 사용하고 같은 계층에서는 들여쓰기를 일관되게 유지하세요. 목록 항목 앞의 하이픈과 콜론 뒤 공백도 문법의 일부입니다. 특수 문자가 포함된 이름은 따옴표로 감쌀 수 있지만, 참조하는 곳에서도 이름을 정확히 일치시켜야 합니다. 특히 최상위 키가 중복되면 혼동하기 쉽습니다. 한 파일에 dns:가 두 번 있다고 해서 설정이 자동으로 병합되는 것은 아니며, 파서에 따라 동작이 다를 수도 있습니다. 먼저 하나의 객체로 정리한 뒤 클라이언트가 지원하는 오버라이드 방식을 사용하세요.
검증 통과가 연결 성공을 보장하지는 않습니다
코어를 직접 실행한다면 설정 파일이 있는 디렉터리에서 아래 명령을 실행할 수 있습니다. 작업 디렉터리에 따라 상대 경로의 기준이 달라지므로 -d와 -f는 같은 파일 구성을 가리켜야 합니다. 문법 검사를 통과했다는 것은 설정을 읽을 수 있다는 뜻일 뿐, 원격 규칙 세트를 다운로드하거나 노드 인증을 통과하거나 DNS 서버에 연결할 수 있다는 의미는 아닙니다. 실제로 시작한 뒤에는 종료 코드만 보지 말고 초기 로드 로그도 확인하세요.
mihomo -t -d . -f config.yaml
포트가 이미 사용 중이라는 메시지가 표시되면 먼저 다른 클라이언트나 코어가 백그라운드에서 실행 중인지 확인하세요. 오류를 없애려고 포트를 여러 번 바꾸지 마세요. 앱의 수동 프록시 설정, 시스템 프록시, 클라이언트 수신 포트는 서로 일치해야 합니다. 설정은 불러오지만 일부 앱만 실패한다면 해당 앱이 시스템 프록시를 따르는지, 자체 DNS를 사용하는지, 트래픽이 TUN으로 들어가는지 구분하세요. 이는 YAML 들여쓰기 오류와는 다른 문제입니다.
클라이언트는 다운로드 센터에서 살펴볼 수 있습니다. 일반적으로 Clash Plus를 먼저 고려한 뒤 운영체제와 기존 작업 흐름에 따라 다른 클라이언트를 비교하세요. 원본 Clash, mihomo, 그래픽 인터페이스의 관계는 코어와 클라이언트 파생 프로젝트 정리를 참고할 수 있습니다. 이후 장에서는 설정의 동작을 다루며, 특정 인터페이스의 버튼 위치를 모든 클라이언트에 공통으로 적용하지 않습니다.
프록시 그룹 유형과 활용
프록시 그룹은 규칙과 노드 사이에 있습니다. 규칙은 연결을 어느 그룹에 맡길지 결정하고, 그룹은 사용할 출구를 정합니다. 규칙이 노드를 직접 가리키면 단순하지만 노드 이름이 바뀔 때마다 참조를 수정해야 합니다. 업무별로 고정된 그룹을 규칙에서 참조하고, 그 그룹이 수동 선택 또는 자동 선택 그룹을 참조하도록 구성하면 관리가 편리합니다. 그룹은 실제 필요에 맞춰 구성하고, 웹사이트마다 같은 계층을 반복해서 만들 필요는 없습니다.
네 가지 유형의 용도
select는 수동 선택 그룹으로, 고정 출구가 필요하거나 일시적으로 문제를 진단할 때 적합합니다. url-test는 탐지 결과에 따라 출구를 자동으로 선택하므로 경로가 바뀌어도 되는 일반적인 연결에 적합합니다. fallback은 설정 순서에 따라 사용 가능한 항목을 선택합니다. 주 목적은 주·보조 경로이며 가장 빠른 경로를 항상 고르는 것은 아닙니다. load-balance는 여러 출구에 연결을 분산합니다. 단일 다운로드 연결의 대역폭을 여러 배로 합쳐 주지는 않습니다.
| 유형 | 선택 기준 | 주의 사항 |
|---|---|---|
select | 사용자가 직접 선택 | 선택 후에도 출구가 사용 가능한지 확인 |
url-test | 탐지 응답 | 탐지에 성공해도 서비스 사이트가 작동한다는 뜻은 아닙니다 |
fallback | 순서와 상태 확인 | 주 출구가 복구되면 다시 전환될 수 있습니다 |
load-balance | 분산 알고리즘 | 로그인 서비스는 출구가 안정적으로 유지되어야 할 수 있습니다 |
탐지 주소는 안정적이고 응답이 가벼우며 모든 후보 노드에서 접근할 수 있는 주소를 사용하세요. 주소 자체가 차단되면 그룹의 모든 노드가 비정상으로 표시될 수 있지만 실제 서비스에는 문제가 없을 수도 있습니다. 반대로 한 사이트에 연결되는 것을 확인했다고 해서 스트리밍 이용 권한, 업무 시스템 로그인, 지역 제한까지 해결되는 것은 아닙니다. 문제를 진단할 때 상태 확인과 실제 서비스 테스트 결과를 따로 기록하세요.
업무별 진입점 고정
아래 예제는 자동 선택 그룹을 수동 선택 그룹 안에 구성합니다. include-all은 전체 설정에 이미 포함된 프록시 후보를 가져옵니다. 사용 가능한 노드가 설정에 로드되어 있어야 합니다. 노드 공급원이 아니며 프록시를 새로 만들어 주지도 않습니다. 예제의 탐지 주소는 일반적인 연결 확인용입니다. 현재 네트워크에서 접근할 수 없다면 연결 가능 여부를 확인한 다른 경량 주소로 바꾸세요.
proxy-groups:
- name: 자동 선택
type: url-test
include-all: true
url: https://www.gstatic.com/generate_204
interval: 300
tolerance: 50
- name: 네트워크 출구
type: select
proxies:
- 자동 선택
- DIRECT
interval은 초 단위로 탐지 주기를 설정합니다. tolerance는 밀리초 단위의 전환 허용 오차로, 결과가 비슷한 경로 사이에서 잦은 전환을 줄이는 데 사용됩니다. 주기가 짧다고 반드시 좋은 것은 아닙니다. 백그라운드 요청이 늘고 일시적인 변동에 더 민감해질 수 있습니다. 노트북이나 모바일 네트워크에서는 우선 여유 있는 주기를 사용하고 로그를 살펴보세요. 속도 측정 빈도가 연결 품질을 보장하지는 않습니다.
프록시 공급자 목록을 사용한다면 이미 정의된 proxy-providers 이름을 use로 참조해 그룹에 노드 이름을 하나씩 쓰지 않을 수 있습니다. 공급자 이름과 노드 이름은 서로 다른 계층입니다. 공급자 이름은 노드 출처를 관리하고, 노드 이름은 실제 출구를 가리킵니다. 공급자에 필터 표현식을 적용할 때는 상위 출처에서 이름이 변경되거나 필터 결과가 비는 경우를 고려하세요. 수정 후에는 설정을 불러온 것만 확인하지 말고 후보 목록도 살펴봐야 합니다.
전환 조건과 복구 방법
자동 그룹 전환은 일반적으로 새 연결에 적용되며 이미 설정된 장기 연결은 즉시 이동하지 않을 수 있습니다. 웹페이지를 새로고침해도 기존 출구가 사용된다면 해당 앱의 연결을 종료한 뒤 다시 시도하세요. 프록시 그룹이 작동하지 않는다고 바로 판단할 필요는 없습니다. 동영상 재생, 터미널 세션, 업무 시스템은 출구 변경을 견디는 정도가 다릅니다. 접속 IP를 유지해야 하는 서비스에는 여러 지역을 자동으로 오가는 그룹보다 수동 고정 그룹이 더 적합합니다.
그룹끼리 서로 참조할 수 있지만 순환 참조를 만들면 안 됩니다. 예를 들어 ‘네트워크 출구’가 ‘업무’를 참조하고 ‘업무’가 다시 ‘네트워크 출구’를 참조하면 최종 출구를 정할 수 없습니다. 참조를 따라가며 마지막에 실제 노드나 DIRECT 같은 내장 정책에 도달하는지 확인하세요. 그룹 이름을 노드 이름과 똑같이 만들지 마세요. 인터페이스 표시와 규칙 대상을 구분하기 어려워집니다.
검증은 먼저 프록시 페이지에서 후보가 비어 있지 않은지 확인하고, 사용 가능한 노드를 하나 수동으로 고정한 다음 자동 선택을 활성화하는 순서로 진행하세요. 고정 노드는 작동하지만 자동 그룹이 실패한다면 탐지 주소, 필터 조건, 참조 계층을 확인하세요. 고정 노드도 실패한다면 노드 인증과 기본 네트워크부터 점검하고 그룹을 더 추가하지 마세요. 인터페이스 사용법은 프록시·설정·로그 페이지 안내를 참고하세요.
규칙 세트 구독 관리
규칙은 목록 순서대로 평가되며 처음 일치한 규칙의 정책이 적용됩니다. 규칙 세트는 많은 조건을 별도 파일에 모아 둘 뿐 이 순서를 바꾸지 않습니다. 관리할 때는 소수의 로컬 예외를 앞에 두고, 업무별 규칙 세트와 일반 지역 규칙을 이어 붙인 뒤 마지막에 MATCH로 처리하는 방식을 권장합니다. 도메인 조회 결과에 의존하는 규칙에만 코어가 대상 주소를 조회하도록 설정하면 됩니다.
명확한 조건을 먼저 매칭하고 나머지는 기본 규칙으로 처리
DOMAIN은 도메인과 정확히 일치하며 DOMAIN-SUFFIX는 해당 도메인과 하위 도메인에 적용됩니다. IP-CIDR은 주소 범위를 기준으로 매칭하고 GEOIP는 지리 데이터에 의존합니다. 범위가 넓은 규칙을 앞에 두면 뒤쪽의 구체적인 예외가 적용되지 않습니다. 특정 웹사이트가 계속 잘못된 출구를 사용한다면 목록 끝에 같은 도메인을 반복해서 추가하지 말고 가장 먼저 일치하는 규칙부터 찾으세요.
설정에서 지정한 정책 대상은 실제로 존재해야 합니다. 규칙이 ‘네트워크 출구’를 지정하는데 프록시 그룹 이름은 ‘프록시 출구’라면 자동으로 수정되는 사소한 차이가 아닙니다. 구독을 업데이트하면서 그룹 이름이 바뀔 수도 있으므로 로컬 규칙에서는 직접 관리하는 고정 진입 그룹을 참조하는 편이 좋습니다. 또 규칙 모드를 전역 모드로 변경하면 일반 규칙 목록이 예상대로 적용되지 않습니다. 규칙 매칭을 조사하기 전에 실행 모드부터 확인하세요.
로컬 규칙 세트로 검증용 예제 만들기
아래 예제는 로컬 파일을 사용하므로 경로, 형식, 규칙 참조부터 검증하기 좋습니다. 파일 경로는 코어의 작업 디렉터리를 기준으로 해석됩니다. 예제는 문서용 도메인을 직접 연결로 보내는 설정일 뿐 실제 서비스의 분할 규칙을 제시하지는 않습니다. 동작을 확인한 뒤 직접 관리하는 도메인 목록으로 바꾸세요. 기본 설정 파일과 규칙 파일은 별도 파일이므로 두 코드를 이어 붙여 저장하면 안 됩니다.
# 기본 설정 파일의 관련 부분
rule-providers:
local-direct:
type: file
behavior: domain
format: yaml
path: ./rules/local-direct.yaml
rules:
- RULE-SET,local-direct,DIRECT
- GEOIP,CN,DIRECT
- MATCH,네트워크 출구
# rules/local-direct.yaml
payload:
- '+.example.com'
- '+.example.org'
behavior: domain은 도메인 목록에 사용하며 항목에 DOMAIN-SUFFIX 접두사를 붙이지 않습니다. ipcidr은 주소 범위에, classical은 기존 규칙 조건에 사용할 수 있습니다. 다만 항목에 최종 정책 이름을 덧붙이면 안 됩니다. format은 파일의 실제 형식과 일치해야 합니다. 다운로드 결과가 HTML 오류 페이지, JSON API 응답 또는 일반 텍스트인데 YAML로 표시하면 설정을 불러오지 못합니다.
원격 업데이트로 로컬 예외를 덮어쓰지 않기
규칙 공급자를 HTTP 방식으로 설정하려면 유효한 url, 캐시 path, 업데이트 interval을 지정해야 합니다. 규칙 세트 업데이트 주기도 초 단위입니다. 원격 주소는 코드 호스팅 사이트의 미리보기 페이지가 아니라 규칙 파일 자체를 반환해야 합니다. 서로 다른 공급자에 같은 캐시 경로를 사용하면 업데이트와 롤백 시 로컬 파일의 출처를 파악하기 어렵습니다.
규칙 세트를 다운로드할 때도 사용할 수 있는 네트워크 경로가 필요합니다. 규칙 세트를 가져오려면 특정 정책이 필요한데 그 정책이 아직 로드되지 않은 규칙이나 노드 공급자에 의존한다면 시작 단계에서 순환 의존성이 발생할 수 있습니다. 처음 설정할 때는 기본 출구가 작동하는지 확인한 다음 원격 규칙을 연결하세요. 다운로드 프록시가 필요하다면 사용 가능한 그룹을 명확히 지정합니다. 업데이트가 실패하면 로그의 HTTP 상태와 파싱 오류를 보관하고 캐시를 모두 삭제하지 마세요.
IP-CIDR 또는 GEOIP에 no-resolve를 사용하면 해당 주소 규칙을 시도하기 위해 불필요한 도메인 조회를 유발하지 않을 수 있습니다. 다만 실제 대상 주소를 아직 얻지 못했다면 규칙이 일치하지 않을 수 있습니다. 범용 속도 향상 옵션은 아닙니다. 알려진 도메인 규칙을 앞에 두고, 실제 IP를 확인한 연결은 주소 규칙으로 처리한 뒤 연결 기록으로 동작을 확인하는 편이 좋습니다.
검증할 때는 샘플 목록에 포함된 도메인 하나와 포함되지 않은 도메인 하나를 사용해 규칙, 프록시 그룹, 최종 출구를 각각 확인하세요. 규칙을 바꾼 뒤에는 새 연결을 관찰해야 합니다. 브라우저가 연결을 재사용하면 이전 경로가 유지될 수 있습니다. 구독 업데이트는 성공했지만 규칙 파일이 실패했다면 구독 및 설정 파싱 점검 목록을 참고해 다운로드 단계와 파싱 단계를 구분하세요. 두 오류를 같은 문제로 취급하지 마세요.
DNS 설정과 조회 경로
DNS 설정에서는 세 가지를 확인해야 합니다. 앱의 조회를 누가 받는지, 상위 DNS 서버가 어디인지, 조회 요청이 어떤 네트워크 경로로 전송되는지입니다. 상위 주소를 암호화 DNS로 바꾸는 것만으로 모든 앱의 DNS 조회가 코어를 거치는 것은 아닙니다. 브라우저 보안 DNS, 시스템 캐시, 앱 내장 리졸버, 로컬 네트워크 게이트웨이가 우회 경로가 될 수 있습니다. Clash DNS 누수를 점검하기 전에 현재 기기의 실제 조회 경로를 먼저 정리하세요.
수신, 부트스트랩, 일반 조회 구분
listen은 코어 DNS 서비스의 수신 주소를 지정합니다. nameserver는 일반 조회에 사용하는 상위 DNS 서버입니다. default-nameserver는 상위 DNS 서버 자체의 도메인을 조회하는 부트스트랩 등에 사용하며, 실패한 모든 조회를 자동으로 넘기는 범용 백업 서버가 아닙니다. 호스트 이름이 있는 HTTPS 리졸버는 자신의 주소를 알아내기 위해 먼저 조회가 필요합니다. 리졸버에 접속해야 리졸버의 주소를 알 수 있는 순환 문제를 피하세요.
아래는 로컬 진단을 위해 별도의 루프백 포트를 사용하는 DNS 설정 예제입니다. 운영체제의 DNS 주소를 이 값으로 자동 변경하거나 앱 트래픽을 가로채지는 않습니다. 먼저 명령줄에서 해당 수신 포트에 직접 조회한 뒤 TUN이나 시스템 설정으로 트래픽 처리 여부를 확인하세요. 그러면 ‘DNS 서비스 자체의 오류’와 ‘앱의 조회가 DNS 서비스에 도달하지 않는 문제’를 구분할 수 있습니다.
dns:
enable: true
listen: 127.0.0.1:1053
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 223.5.5.5
nameserver:
- https://dns.alidns.com/dns-query
nameserver-policy:
'+.example.com':
- 223.5.5.5
예제 주소는 설정 구조를 보여주기 위한 것입니다. 실제 서버 선택은 통신사 네트워크, 지역, 접속 정책을 고려하세요. nameserver-policy로 특정 도메인의 리졸버를 지정하면 내부 DNS 조회나 특정 지역 결과가 필요한 경우에 유용합니다. 업무 도메인 전체를 공용 리졸버에 맡기면 내부 주소가 반환되지 않을 수 있습니다. 매칭 범위는 가능한 한 좁게 설정하고 도메인 하나부터 확인한 뒤 하위 도메인으로 확대하세요.
DNS 조회와 출구 정책 연동
DNS 연결이 라우팅 규칙을 따르게 하려면 respect-rules를 검토하고 노드 서버의 호스트 이름을 조회할 proxy-server-nameserver도 올바르게 설정하세요. 그렇지 않으면 노드 주소를 알아내려면 프록시가 필요한데 프록시를 연결하려면 노드 주소가 필요한 순환 문제가 생길 수 있습니다. 모든 구독에 적용되는 단일 옵션 조합은 없습니다. 아직 연결되지 않은 프록시에 의존하지 않는 부트스트랩 경로를 하나 이상 확보하는 것이 핵심입니다.
direct-nameserver는 직접 연결 출구에 필요한 DNS 조회에 사용할 수 있습니다. 도메인 정책과 함께 사용한다면 nameserver-policy를 따르는지도 확인하세요. 동작을 살펴보지 않은 상태에서 여러 nameserver, fallback, 정책 매핑을 한꺼번에 지정하지 마세요. 설정이 복잡해지면 같은 도메인에 여러 조회가 발생할 수 있고 응답 출처를 추적하기도 어려워집니다.
기존의 fallback과 fallback-filter는 DNS 응답을 선택하는 방식입니다. ‘첫 번째 DNS가 시간 초과되면 두 번째 DNS를 요청한다’고 단순하게 이해하면 안 됩니다. 필터 조건, 지리 정보, 후보 응답이 최종 결과에 영향을 줍니다. 현재 환경에서 명시적인 도메인 정책으로 문제가 해결된다면 설정을 단순하게 유지하세요. 오염이나 비정상 응답이 재현되는 경우에만 실제 사례를 바탕으로 필터 조건을 설계하세요.
응답 결과와 요청 경로를 따로 확인
dig가 설치된 환경에서는 아래 명령으로 로컬 수신 서버를 조회할 수 있습니다. Windows 기본 도구는 기본 포트가 아닌 경우 지원 방식에 차이가 있을 수 있으므로 시스템 DNS 조회 결과를 로컬 코어 조회 결과로 착각하지 마세요. 조회 시간과 응답 유형, 로그에 표시된 상위 DNS 선택, 앱 연결을 함께 기록해야 근거를 온전히 확인할 수 있습니다.
dig @127.0.0.1 -p 1053 example.com A
Fake-IP 모드에서 가상 주소가 반환되는 것은 정상 동작입니다. 공용 DNS 결과와 다르다는 이유만으로 조회 오류라고 판단하면 안 됩니다. IPv6도 코어 전체 설정, DNS의 AAAA 응답, 시스템 IPv6 라우팅, 노드의 전송 지원 여부를 구분해야 합니다. 예제에서 DNS의 IPv6 응답을 끄는 것은 초기 진단 변수를 줄이기 위한 것이며 모든 네트워크에서 IPv6를 영구적으로 끄라는 뜻은 아닙니다.
일반적인 DNS 누수 테스트는 특정 웹 요청에서 사용된 조회 출처를 확인할 뿐 모든 앱과 프로토콜을 검사하지는 않습니다. 브라우저에서 별도의 보안 DNS를 사용한다면 해당 설정을 따로 확인하세요. 기업 기기에는 조직에서 관리하는 정책이 적용될 수도 있습니다. 특정 테스트 페이지를 통과하려고 시스템 설정을 계속 바꾸지 마세요. 먼저 보호 범위와 조회 가로채기 범위를 정한 뒤 로그, 라우팅, 앱 동작을 교차 확인하세요.
TUN과 Fake-IP 연동
TUN과 Fake-IP는 서로 다른 계층에서 작동합니다. TUN은 가상 네트워크 인터페이스를 만들어 라우팅 조건에 맞는 IP 트래픽을 코어로 전달합니다. Fake-IP는 DNS 응답 방식을 바꿔 가상 주소에 도메인 정보를 연결합니다. TUN은 트래픽이 코어로 들어오는 경로를 만들고 Fake-IP는 트래픽이 어떤 도메인으로 향하는지 식별하도록 돕습니다. 둘을 함께 쓰는 경우가 많지만 각각 따로 설정할 수 있으며, 하나를 켰다고 다른 하나도 적용되는 것은 아닙니다.
권한과 라우팅 적용 범위부터 확인
데스크톱 클라이언트에서 TUN을 활성화하려면 관리자 권한, 시스템 승인 또는 설치된 백그라운드 서비스가 필요한 경우가 많습니다. 시스템 프록시 설정은 주로 시스템 설정을 따르는 앱에 적용됩니다. 자세한 조작 방법은 시스템 프록시 설정을 참고하세요. 브라우저는 되지만 명령줄 도구가 연결되지 않는다면 명령줄 도구가 시스템 프록시를 사용하지 않는 것일 수 있습니다. 이때는 노드와 DNS를 동시에 바꾸기보다 TUN이 실제로 필요한지 먼저 판단하세요.
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
이 설정은 일반적인 트래픽 처리 방식을 보여주지만 실제 동작은 시스템 권한, 클라이언트 서비스, 로컬 라우팅에 따라 달라집니다. auto-route는 관련 경로를 추가하고 auto-detect-interface는 출구 인터페이스를 자동으로 찾습니다. 네트워크 어댑터가 여러 개 있거나 가상 머신, VPN을 함께 사용하면 자동 감지가 예상과 다를 수 있습니다. 변경 전에 기본 출구를 기록하고 문제가 발생하면 네트워크 스택을 계속 바꿔 보기보다 라우팅부터 확인하세요.
| 환경 | 우선 확인 | 일반적인 충돌 |
|---|---|---|
| Windows | 서비스 권한, 가상 인터페이스, 시스템 방화벽 | 다른 VPN, 가상 스위치, 루프백 제한 |
| macOS | 네트워크 권한, 기본 경로, 서비스 상태 | 다른 터널 인터페이스, 네트워크 필터링 소프트웨어 |
| Linux | TUN 장치, 권한, 정책 라우팅 | 방화벽 규칙, 컨테이너, 네트워크 네임스페이스 |
가상 주소와 예외 도메인 이해
Fake-IP는 도메인을 전용 가상 주소 풀에 매핑합니다. 연결이 코어로 돌아오면 도메인 정보가 다시 연결됩니다. 앱이 IP만 저장하거나 이 주소를 다른 기기로 전달하거나 코어가 종료된 뒤에도 캐시를 재사용하면 연결이 실패할 수 있습니다. 따라서 가상 주소를 웹사이트의 실제 IP처럼 방화벽 허용 목록에 등록하면 안 되며, 같은 코어를 거치지 않는 기기에 복사해 사용하는 것도 적절하지 않습니다.
프린터 검색, 로컬 네트워크 기기, 실제 주소가 필요한 서비스는 fake-ip-filter에 예외를 설정해 해당 조회에서 실제 주소가 반환되도록 할 수 있습니다. 필터는 실제 문제가 확인된 도메인을 기준으로 설정하고 공용 서비스를 광범위하게 제외하지 마세요. 제외된 연결은 기존 도메인 매핑의 이점을 잃을 수 있어 이후 주소 규칙이나 스니핑에 의존하게 됩니다. 지나치게 넓은 필터는 트래픽 분할 동작을 파악하기 어렵게 만듭니다.
# 기존 dns 객체에 병합하고 별도의 dns 설정을 중복 선언하지 마세요
dns:
fake-ip-filter:
- '*.lan'
- '*.local'
.local 서비스는 멀티캐스트 DNS를 사용할 수도 있습니다. 일반 DNS 예외를 설정해도 기기 검색이 복구된다고 보장할 수 없습니다. TUN에서 일반적인 53번 포트 요청을 가로채더라도 모든 암호화 DNS나 멀티캐스트 조회까지 자동으로 처리하지는 않습니다. 프린터에 고정 주소로는 연결되지만 자동 검색되지 않는다면 DNS 서버만 바꾸지 말고 멀티캐스트, 로컬 네트워크 라우팅, 시스템 서비스도 확인하세요.
중복 가로채기와 잘못된 라우팅 방지
기업 VPN, 원격 근무용 터널, 다른 프록시 클라이언트도 라우팅을 변경할 수 있습니다. 일반적으로 불필요한 트래픽 처리 프로그램을 먼저 종료한 뒤 TUN 하나만 활성화해 확인하세요. 함께 사용해야 한다면 업무용 네트워크 대역, 프록시 서버 주소, 로컬 관리 주소가 각각 어떤 경로를 사용하는지 하나씩 확인합니다. 제외할 네트워크 대역은 실제 네트워크 설계를 기준으로 해야 합니다. 온라인에서 본 긴 목록을 그대로 사용하면 프록시를 거쳐야 할 트래픽이 우회될 수 있습니다.
Fake-IP를 전환하거나 TUN을 끄거나 코어를 다시 시작한 뒤에도 앱에 이전 주소가 캐시되어 있을 수 있습니다. 앱 연결을 종료하고 도메인을 다시 조회한 뒤 필요하면 시스템 DNS 캐시를 지우고 새 연결을 확인하세요. 기존 연결이 남아 있는 상태에서 웹페이지만 한 번 새로고침해 판단하지 마세요. 특정 앱만 실패한다면 모든 경로를 한꺼번에 바꾸기보다 앱의 대상 주소와 사용 프로토콜을 기록하는 편이 효과적입니다.
복구 순서를 명확히 유지하세요. 먼저 TUN을 끄고 기본 네트워크가 복구되는지 확인한 다음 클라이언트가 관련 경로를 삭제했는지 확인하고 이전 시스템 프록시 상태를 복원합니다. 클라이언트를 정상 종료하면 자체적으로 설정한 트래픽 처리를 정리하는 경우가 많지만 비정상 종료 후에는 잔여 설정이 남을 수 있습니다. 자주 발생하는 증상은 문제 해결 Q&A에서 확인하세요. 시스템 네트워크를 변경하기 전, 특히 원격 기기를 조작할 때는 로컬에서 복구할 방법을 마련해야 합니다.
도메인 스니핑과 인식 범위
도메인 스니핑은 연결이 코어에 들어온 뒤 일부 프로토콜의 초기 데이터에서 대상 호스트 정보를 추출합니다. 일반적인 정보 출처로 HTTP의 Host와 TLS 핸드셰이크의 서버 이름이 있습니다. 대상 IP만 있는 연결에 도메인 규칙을 적용하는 데 도움이 될 수 있지만 DNS를 대신하거나 모든 암호화 트래픽을 인식하는 기능은 아닙니다. 완전한 앱 식별 기능이라기보다 보조 정보로 보는 것이 정확합니다.
트래픽이 들어와야 인식할 수 있습니다
스니핑은 코어가 이미 수신한 연결만 처리합니다. 앱이 시스템 프록시를 우회하고 TUN에도 들어오지 않는다면 스니핑을 켜도 트래픽이 자동으로 들어오지 않습니다. 반대로 연결에 이미 신뢰할 수 있는 도메인 정보가 있다면 추가 스니핑이 필요하지 않을 수 있습니다. 문제를 진단할 때는 먼저 클라이언트 연결 페이지에 해당 연결이 표시되는지 확인한 뒤 도메인 필드, 적용 규칙, 최종 출구를 살펴보세요. 처음부터 스니핑 대상 포트를 확대하지 마세요.
sniffer:
enable: true
sniff:
HTTP:
ports:
- 80
- 8080-8880
override-destination: false
TLS:
ports:
- 443
- 8443
override-destination: false
QUIC:
ports:
- 443
override-destination: false
예제는 일반적으로 사용하는 프로토콜 포트로 스니핑 범위를 제한하고 원래 대상 주소를 덮어쓰지 않아 인식 결과를 먼저 확인할 수 있습니다. 포트는 프로토콜이 사용할 수 있는 위치일 뿐, 실제 데이터가 해당 프로토콜임을 보장하지 않습니다. 443번 포트에서도 다른 프로토콜이 사용될 수 있습니다. 모든 포트를 스니핑하면 불필요한 처리가 늘고 비표준 서비스의 호환성 문제를 찾기 어려워집니다. 실제 업무에 따라 범위를 점진적으로 넓히세요.
도메인 인식과 대상 주소 변경은 별개입니다
override-destination은 스니핑한 결과로 연결 대상을 덮어쓸지 결정합니다. 지정 IP에 의존하는 서비스는 주소를 바꾸면 다른 서버에 연결될 수 있고, CDN을 사용하는 사이트는 다시 조회하면서 서버 선택이 달라질 수 있습니다. 분할 판단만 개선하려는 목적이라면 먼저 대상 주소를 유지하고 연결 기록으로 규칙 동작을 확인하세요. 실제로 주소를 덮어써야 하는 경우에만 해당 옵션을 사용하면 됩니다.
parse-pure-ip를 활성화하면 IP만 대상으로 하는 일부 트래픽도 스니핑할 수 있지만, 인식 여부는 프로토콜에 읽을 수 있는 도메인이 포함되어 있는지에 달려 있습니다. IP로 직접 접속하는 HTTP 요청에는 기대하는 도메인이 없을 수 있고 TLS에도 서버 이름이 없을 수 있습니다. 앱 자체 암호화 프로토콜은 HTTP, TLS, QUIC 분석 방식에 맞지 않을 수 있습니다. 실패하더라도 ‘HTTPS에 접속했다’는 이유만으로 반드시 인식될 것이라고 판단하면 안 됩니다.
특정 연결의 스니핑을 강제하거나 건너뛰려면 force-domain, skip-domain 등의 설정으로 범위를 지정할 수 있습니다. 예외는 재현 가능한 서비스에 한정하고 출처를 모르는 도메인 목록을 통째로 복사하지 마세요. 공유 IP, 리버스 프록시, 내부 게이트웨이가 있는 환경에서는 인식된 이름이 연결의 최초 목적을 뜻하지 않을 수 있으므로 원래 대상도 함께 확인해야 합니다.
암호화 프로토콜과 개인정보 보호의 한계
일부 TLS 환경에서는 암호화된 클라이언트 인사말 등의 기능으로 기존 서버 이름 추출이 작동하지 않을 수 있습니다. QUIC는 UDP 기반이라 TCP와 프로토콜 처리 방식이 다르고 노드의 UDP 지원, 라우팅, 네트워크 정책의 영향도 받습니다. 브라우저에서는 접속되지만 클라이언트가 도메인을 인식하지 못할 수 있습니다. 반드시 설정 오류인 것은 아닙니다. 다른 신뢰할 수 있는 정보로 규칙이 정상적으로 작동한다면 모든 연결에 도메인 이름이 표시될 필요는 없습니다.
스니핑은 HTTPS 본문을 복호화하지 않으므로 일반적인 도메인 인식을 위해 기기에 자체 서명 루트 인증서를 설치할 필요가 없습니다. 사용자의 로그인 비밀번호나 웹페이지 내용도 읽지 않습니다. 다만 도메인 이름만으로도 방문 의도를 알 수 있으므로 로그를 내보내거나 대시보드를 공유할 때는 주의하세요. 문제를 공유할 때 개인 도메인, 구독 정보, 노드 인증 정보를 제거하고 규칙 문제를 재현하는 데 필요한 내용만 남기세요.
검증할 때는 도메인을 하나 선택해 스니핑을 끈 상태와 켠 상태에서 각각 새 연결을 만들고 도메인 필드와 규칙 적용 결과를 비교하세요. 웹페이지가 열리는지만 확인하면 안 됩니다. 두 경우 모두 같은 기본 규칙을 사용해 접속에 성공했을 수 있습니다. 활성화 후 접속에 문제가 생기면 먼저 대상 주소 덮어쓰기를 끄고 포트 범위를 좁히세요. 여전히 문제가 있으면 스니핑을 잠시 끄고 DNS 매핑과 규칙 설정부터 확인하세요.
금융 서비스 로그인, 기업 내부망, 고정 주소를 사용하는 서비스에서는 인식 범위를 넓히는 것보다 안정성이 중요합니다. 명확한 주소 규칙이나 도메인 규칙을 유지하고 호환되지 않는 서비스에는 좁은 범위의 예외를 설정할 수 있습니다. 스니핑 설정의 기준은 ‘모든 연결에 이름이 표시되는가’가 아니라 ‘대상 서비스가 예상대로 분할되고 문제가 발생하지 않는가’여야 합니다. 화면을 보기 좋게 만들려고 실제 사용성을 희생하지 마세요.
로컬 오버라이드와 여러 구독 병합
구독은 원격 노드와 기본 설정을 제공하고 로컬 오버라이드는 기기별 설정을 저장합니다. 둘을 분리하면 구독 업데이트로 포트, DNS, 규칙 예외가 덮어써지는 일을 줄일 수 있습니다. 다만 오버라이드는 모든 클라이언트에서 동일한 파일 형식을 뜻하지 않습니다. 객체 병합을 지원하는 클라이언트도 있고, 규칙을 앞에 추가하거나 스크립트로 설정을 생성하는 클라이언트도 있습니다. 작업 전에 현재 클라이언트의 기능을 확인하고 한 앱의 편집 방법을 다른 앱에 그대로 적용하지 마세요.
데이터 종류별 관리 주체를 먼저 정하세요
노드 주소, 인증 매개변수, 서버 변경은 일반적으로 구독 공급자가 관리합니다. 로컬 수신 주소, 로컬 네트워크 접근 범위, 기기 전용 규칙, 제어 인터페이스 설정은 로컬에 두는 편이 적합합니다. DNS와 프록시 그룹은 상위 설정에 완성된 구성이 포함되어 있는지에 따라 달라집니다. 이 두 항목을 직접 관리하려면 객체 전체를 덮어쓸지 일부 필드만 추가할지 명확히 정하세요. 상위 설정의 전제와 로컬 로직을 뒤섞지 않도록 해야 합니다.
객체 병합과 배열 병합을 각각 확인하세요. 예를 들어 dns.enable을 바꾸는 작업은 보통 불리언 값 하나에 그치지만 rules와 proxy-groups는 배열입니다. 클라이언트에 따라 기존 항목을 교체하거나 앞에 추가하거나 뒤에 덧붙이거나 이름으로 처리할 수 있습니다. 편집기에 새 규칙이 보인다고 해서 실행 설정에도 기존 규칙이 남아 있다는 뜻은 아닙니다. 병합 방식을 바꿀 때마다 최종 규칙 순서와 프록시 그룹 수를 확인하세요.
| 항목 | 권장 관리 위치 | 중점 확인 |
|---|---|---|
| 노드 인증과 주소 | 구독 공급자 | 업데이트 성공 여부, 노드 사용 가능 여부 |
| 수신 포트와 접근 범위 | 로컬 설정 | 인터페이스 설정이 다시 덮어쓰는지 여부 |
| 개인 도메인 예외 | 로컬 우선 규칙 | 범위가 넓은 규칙보다 앞에 있는지 |
| 프록시 그룹과 DNS | 한쪽을 관리 주체로 명확히 지정 | 이름 참조와 객체 전체 구조 |
프록시 공급자로 여러 출처 구성
여러 구독을 병합할 때 완전한 YAML 두 개를 단순히 이어 붙이면 안 됩니다. 두 파일에 같은 최상위 키, 기본 규칙, 프록시 그룹이 포함되는 경우가 많아 중복되거나 설정이 덮어써질 수 있습니다. 기본 설정 하나를 유지하고 여러 출처를 프록시 공급자로 불러온 다음 공통 로컬 프록시 그룹에서 참조하는 편이 명확합니다. 원격에서 완전한 클라이언트 설정을 받는다면 해당 내용이 프록시 공급자 형식에 맞는지 먼저 확인하세요. URL만 바꾸면 호환되는 것은 아닙니다.
proxy-providers:
personal:
type: file
path: ./providers/personal.yaml
work:
type: file
path: ./providers/work.yaml
proxy-groups:
- name: 출처 선택
type: select
use:
- personal
- work
proxies:
- DIRECT
위 로컬 파일에는 각각 유효한 proxies 목록이 있어야 하며, 경로는 준비된 노드 파일을 가리켜야 합니다. 임의의 구독 본문을 넣는 곳이 아닙니다. 원격 업데이트가 필요하면 HTTP 공급자로 바꾸고 각 출처에 별도의 캐시 경로를 지정하세요. 구독 링크에는 서비스를 직접 이용할 수 있는 인증 정보가 들어 있는 경우가 많으므로 문서, 스크린샷, 동기화 저장소에 공개하지 마세요.
서로 다른 출처에서 같은 노드 이름을 사용할 수 있습니다. 클라이언트나 코어가 지원하는 출처 오버라이드 기능으로 구분 가능한 접두사를 추가하고, 프록시 그룹이 올바른 대상을 참조하는지 확인하세요. 노드 표시 순서만으로 출처를 판단하지 마세요. 정규식 필터는 접두사 변경도 고려해야 하며, 특히 지역이나 용도별로 필터링할 때 주의해야 합니다. 병합한 뒤 후보 목록을 확인하고 두 출처에서 각각 연결할 수 있는지 검증하세요.
되돌릴 수 있는 업데이트 절차 마련
현재 설정을 복사하고 출처 하나를 추가해 정상 동작을 확인한 뒤 두 번째 출처를 추가하고 마지막에 공통 규칙 진입점을 정하는 순서가 안전합니다. 단계마다 복구할 수 있는 상태를 남겨 두세요. 구독 업데이트가 실패해도 모든 출처를 바로 삭제하지 마세요. 인증 만료, 다운로드 실패, 콘텐츠 파싱 오류 중 무엇인지 먼저 확인합니다. 캐시가 손상된 것이 확실하고 사용할 수 있는 원격 출처도 있을 때만 해당 캐시를 정리하세요.
스크립트 오버라이드를 사용한다면 필드 누락, 빈 배열, 이름 변경도 처리해야 합니다. 출처 하나가 일시적으로 비어 있을 때 존재하지 않는 그룹을 참조하는 설정을 생성하지 말고, 결과가 명확히 드러나도록 스크립트를 작성하세요. 네트워크 요청이나 파일 읽기·쓰기 기능이 있는 스크립트를 신뢰할 수 없는 출처에서 가져오지 마세요. 간단한 변경은 선언형 설정으로 해결할 수 있다면 전체 스크립트를 도입하지 않는 편이 유지보수와 검토에 유리합니다.
최종 확인 기준은 ‘두 구독 모두 가져오기에 성공했는가’가 아닙니다. 업데이트 전후로 로컬 규칙이 올바른 위치에 있는지, 노드 출처가 명확한지, 프록시 그룹에 순환 참조가 없는지, DNS와 포트가 예기치 않게 바뀌지 않았는지 확인해야 합니다. 빠른 가져오기 방법은 구독 가져오기 가이드를 참고하세요. 이 페이지의 병합 구성은 장기 관리용이며 처음 연결하기 전부터 여러 출처를 구성할 필요는 없습니다.
외부 제어 대시보드와 보안 범위
외부 제어 대시보드는 mihomo 제어 인터페이스를 통해 실행 상태를 읽고 프록시 그룹을 전환하거나 연결을 확인합니다. 프록시 연결 지점도 구독 서버도 아닙니다. 혼합 포트는 앱 트래픽을 처리하고 제어 포트는 관리 작업을 처리하므로 서로 바꿔 쓸 수 없습니다. 대시보드가 열리지 않으면 정적 페이지 로드, 제어 인터페이스 연결, 인증 성공 여부를 각각 확인하세요. 인터넷에 연결하는 혼합 포트를 바로 변경하지 마세요.
로컬 관리에는 루프백 수신 사용
데스크톱 클라이언트에 내장된 인터페이스를 사용한다면 일반적으로 별도의 제어 포트를 열 필요가 없습니다. 로컬 대시보드를 연결해야 한다면 먼저 루프백 주소를 사용해 관리 인터페이스가 로컬 네트워크에 노출되지 않도록 하세요. 아래 인증 정보는 교육용 예시일 뿐입니다. 실제로 사용할 때는 직접 생성한 강력한 비밀번호로 바꾸고 로컬에만 보관하세요. 다른 기기에서 접근할 수 있는 서비스에 예시 값을 사용하면 안 됩니다.
external-controller: 127.0.0.1:9090
secret: "your-password"
external-ui: ./ui
external-ui는 준비된 대시보드 정적 파일 디렉터리를 가리키며 코어 작업 디렉터리를 기준으로 해석됩니다. 설정만으로 대시보드 파일이 생성되지는 않습니다. 디렉터리는 있지만 진입 파일이 없으면 인터페이스는 정상이어도 페이지에서 오류가 발생할 수 있습니다. 신뢰할 수 있는 프로젝트 출처에서 대시보드 파일을 받아 안내에 따라 로컬에 배포하세요. 알 수 없는 웹페이지에 입력하는 제어 인증 정보를 일반 사이트 로그인 정보처럼 취급하지 마세요.
127.0.0.1에 바인딩하면 해당 주소를 통해 로컬 기기에서만 접근할 수 있습니다. 모든 인터페이스에서 수신하도록 변경하면 로컬 네트워크나 그 밖의 연결 가능한 네트워크에서도 포트에 접근할 수 있습니다. 실제로 연결 가능한지는 방화벽과 네트워크 구성에 따라 달라집니다. 한편 allow-lan은 주로 프록시 수신 범위를 제어하며 제어 인터페이스 전체를 관리하는 옵션이 아닙니다. 이 값을 꺼도 제어 포트의 수신 및 접근 제한을 대신할 수는 없습니다.
연결, 인증, 브라우저 제한을 구분
인터페이스 연결이 거부되면 코어 실행 여부, 수신 주소, 포트 사용 여부를 먼저 확인하세요. 연결은 되지만 인증되지 않았다는 응답이 돌아온다면 방화벽을 계속 조정하기보다 대시보드에 저장된 제어 비밀번호를 확인하세요. 페이지는 표시되지만 데이터를 가져오지 못한다면 브라우저의 교차 출처 제한이나 페이지와 인터페이스 주소 불일치가 원인일 수 있습니다. 브라우저 개발자 도구에서 실제 요청 결과를 확인하세요.
HTTPS 페이지에서 HTTP 제어 인터페이스에 접근하면 혼합 콘텐츠 제한이 발생할 수 있습니다. 교차 출처 설정이 필요하지 않도록 같은 기기에서 같은 출처로 로컬 배포하는 방식을 우선 사용하세요. 리버스 프록시가 필요하다면 TLS, 인증, 출처 제한을 각각 어느 계층에서 처리할지 명확히 정합니다. 브라우저 오류를 없애려고 모든 출처를 허용하지 마세요. 제어 비밀번호를 공개 URL에 넣으면 방문 기록, 로그, 공유 내용에 남을 수 있습니다.
여러 기기에서 관리해야 한다면 관리되는 보안 터널을 사용하거나 신뢰할 수 있는 관리 네트워크에서만 접근하도록 설정하고 시스템 방화벽으로 허용 기기 범위를 좁히세요. 제어 인터페이스를 인터넷에 직접 공개하면 상태 확인뿐 아니라 사용 중인 정책과 설정까지 변경될 수 있어 위험이 커집니다. 비밀번호 하나만 설정했다고 전송 암호화, 무차별 대입 공격, 대시보드 출처의 신뢰성까지 해결되는 것은 아닙니다.
설정 변경 후 검증 절차 완료
대시보드에서 그룹을 전환한 뒤 클라이언트 인터페이스와 새 연결의 실제 출구가 함께 바뀌었는지 확인하세요. 대시보드에서 실행 모드를 변경했다면 현재 규칙 검증에 영향이 있는지도 살펴봅니다. 대시보드 표시, 설정 파일, 실행 상태가 항상 동일하게 유지되지는 않습니다. 일부 선택은 클라이언트에 저장되지만 일부는 다시 불러올 때 덮어써질 수 있습니다. 계속 적용해야 하는 매개변수는 제어 인터페이스에서 임시 변경하는 대신 관리 위치가 명확한 설정에 반영하세요.
로그는 문제 해결에 필요한 최소 범위로 유지하세요. 디버깅할 때만 일시적으로 상세도를 높이고 재현이 끝나면 평소 수준으로 되돌려 방문 도메인이 장시간 대량 기록되지 않도록 합니다. 자료를 공유하기 전에 노드 인증 정보, 구독 링크, 제어 비밀번호, 개인 접속 기록을 확인하세요. 관리 인증 정보가 공개되었다면 실제 사용 중인 값을 변경하고 대시보드에 저장된 이전 값도 삭제해야 합니다. 스크린샷에서 글자만 지우는 것으로는 충분하지 않습니다.
가이드 전체의 최종 점검은 다음 순서로 진행하세요. 설정을 불러올 수 있는지, 노드 출처를 사용할 수 있는지, 프록시 그룹 참조가 완결되는지, 규칙이 올바르게 일치하는지, DNS 경로가 명확한지, TUN이 예상대로 트래픽을 처리하는지, 스니핑으로 호환성 문제가 생기지 않는지, 제어 인터페이스가 필요한 범위에서만 접근 가능한지 확인합니다. 한 번에 변수 하나만 바꾸고 되돌릴 지점을 남겨 두면 매개변수를 계속 추가하는 것보다 관리하기 쉽습니다. 원인을 찾기 어렵다면 민감 정보를 가린 로그와 함께 문제 해결 분류에서 증상별로 확인하세요.