WCAG 성공 기준 · Level A

WCAG 2.1.4: 문자 키 바로가기

WCAG 2.1.4는 문자, 숫자, 문장 부호 또는 기호와 같은 단일 문자 키만을 사용하여 구현된 모든 키보드 단축키가 꺼지거나, 다시 매핑되거나, 포커스가 있을 때에만 활성화될 수 있도록 요구합니다. 이는 음성 입력에 의존하거나 운동 장애가 있는 사용자를 해칠 수 있는 우발적인 트리거를 방지하기 위한 것입니다.

이 규칙의 의미

WCAG 2.1.4 — 문자 키 단축키는 WCAG 2.1에서 도입된 레벨 A 성공 기준입니다. 이 기준은 특정하지만 심각한 접근성 위험을 다룹니다. 바로 웹 애플리케이션이 하나의 인쇄 가능한 문자(문자, 숫자, 구두점, 기호)만으로 이루어진 키보드 단축키를, Ctrl, Alt, Meta, Shift와 같은 보조 키를 함께 요구하지 않은 채 할당하는 경우입니다.

이 성공 기준은, 콘텐츠에서 키보드 단축키가 단일 문자 키만 사용하여 구현된 경우, 다음 중 적어도 하나는 반드시 참이어야 한다고 규정합니다.

  • 끄기: 사용자가 단축키를 완전히 끌 수 있는 메커니즘이 제공되어야 합니다.
  • 재매핑: 사용자가 단축키를 하나 이상의 인쇄 불가능한 보조 키(예: Ctrl 또는 Alt)를 사용하도록 재매핑할 수 있는 메커니즘이 제공되어야 합니다.
  • 포커스 상태에서만 활성: 사용자 인터페이스 구성 요소에 대한 키보드 단축키는 해당 구성 요소에 포커스가 있을 때만 활성 상태여야 합니다.

단일 문자 키 단축키란, 하나의 키를 눌렀을 때 인쇄 가능한 문자를 생성하면서 활성화되는 단축키를 말합니다. 예를 들어, 갤러리를 열기 위해 G를 누르거나, 검색창에 포커스를 주기 위해 /를 누르거나, 새 메시지를 작성하기 위해 N을 누르는 경우입니다. 이는 Ctrl+SAlt+F4처럼 인쇄 불가능한 보조 키를 요구하는 단축키와는 근본적으로 다르며, 후자는 이 성공 기준의 범위 밖에 있습니다.

단축키는 애플리케이션이 다음 중 하나를 수행하는 경우 이 성공 기준을 충족합니다. (1) 단일 키 단축키를 비활성화하거나 다중 키 조합으로 변경할 수 있는 설정 또는 환경설정 페이지를 제공하는 경우, (2) 자동으로 보조 키 기반 단축키로 재매핑하는 경우, 또는 (3) 트리거 요소 자체에 키보드 포커스가 있을 때만 단축키가 작동하도록 하여, 포커스가 다른 곳에 있을 때 해당 키를 눌러도 아무 일도 일어나지 않도록 하는 경우입니다.

단축키는 단일 문자 키 입력이, 어떤 요소에 포커스가 있는지와 관계없이 언제든지 전역 동작을 실행하고, 사용자가 이를 끄거나 변경할 방법이 전혀 없는 경우 실패합니다. 실제로 흔한 예는, 사용자가 텍스트 필드를 채우거나 음성으로 텍스트를 받아쓰는 동안에도, 글자 키를 누를 때마다 내비게이션 동작을 실행하는 싱글 페이지 애플리케이션입니다.

이 성공 기준에는 하나의 중요한 공식 예외가 있습니다. 단축키가 특정 구성 요소에 포커스가 있을 때만 활성인 경우에는 적용되지 않습니다. 예를 들어, 드롭다운이 열려 있고 포커스를 가진 상태에서만 문자 키를 수신하는 커스텀 드롭다운 위젯은 허용됩니다. 포커스가 해당 위젯에 한정되어 있기 때문에, 우발적인 활성화 위험이 제한되기 때문입니다.

왜 중요한가

이 성공 기준은 주로 두 사용자 집단을 보호하기 위해 존재하지만, 그 이점은 더 넓게 확장됩니다.

음성 입력 사용자가 가장 직접적인 영향을 받습니다. 운동 장애가 있는 사람들은 Dragon NaturallySpeaking(현재 Dragon Professional)과 같은 음성 인식 소프트웨어를 통해 컴퓨터를 전적으로 제어하는 경우가 많습니다. 텍스트를 받아쓰거나 음성 명령을 내릴 때, 이 도구들은 활성 웹페이지에서 단일 문자 단축키를 의도치 않게 트리거할 수 있는 키 입력을 발생시킵니다. 사용자가 의료 양식을 작성하면서 “next”라고 말하는 상황을 상상해 보십시오. 애플리케이션이 전역적으로 문자 N을 수신한다면, 양식에서 벗어나 내비게이션을 수행하여 사용자의 작업을 날려버릴 수 있습니다. CDC에 따르면 미국의 성인 약 6,100만 명이 장애를 가지고 있으며, 이들 중 상당수가 음성 인식을 포함한 대체 입력 방식을 사용합니다.

운동 장애가 있는 사용자 중 스위치 액세스, sip-and-puff 장치, 키보드 전용 내비게이션을 사용하는 사람들도 위험에 노출됩니다. 이들은 키를 실수로 누르거나, 목표 키에 도달하는 과정에서 여러 키를 연속적으로 누를 수 있습니다. 이메일 보관, 파일 삭제, 양식 제출과 같이 되돌릴 수 없는 동작을 단 한 번의 오입력으로 트리거하면, 상당한 좌절감과 데이터 손실을 초래할 수 있습니다.

인지 장애가 있는 사용자도 피해를 입을 수 있습니다. 주의력 결핍 장애가 있는 사용자나 인터페이스에 익숙하지 않은 사용자는 페이지를 탐색하기 위해 시험 삼아 키를 눌러볼 수 있으며, 단일 문자 단축키가 활성화되어 있다는 사실을 모를 수 있습니다. 예기치 않은 내비게이션이나 상태 변화는 인지적 부담과 방향 감각 상실을 증가시킵니다.

다음과 같은 실제 시나리오를 생각해 보십시오. 한 터키 전자상거래 플랫폼이 파워 유저를 위해 단일 키 단축키를 구현했습니다. C를 누르면 장바구니로 이동하고, F를 누르면 즐겨찾기로 이동합니다. 한 음성 입력 사용자가 양식 필드에 배송 주소를 받아쓰려고 합니다. 사용자가 “Caddesi”(터키어로 “거리”라는 뜻)를 말하는 동안, 포커스가 완전히 입력 필드로 들어가기 전에 음성 소프트웨어가 문자 C를 발생시켜 장바구니 페이지로 이동을 트리거합니다. 부분적으로 입력된 주소는 사라집니다. 사용자는 처음부터 다시 시작해야 하고, 이런 경험이 반복되면 사이트를 완전히 떠날 수도 있습니다.

접근성을 넘어, 이 성공 기준을 준수하면 전반적인 사용성도 향상됩니다. 단축키를 사용자 정의할 수 있는 UI를 제공하는 것은 성숙하고 사용자를 존중하는 제품이라는 신호입니다. 또한 실수로 단축키를 트리거한 사용자들의 불만으로 인한 지원 티켓을 줄이는 데도 도움이 됩니다.

관련 Axe-core 규칙

WCAG 2.1.4는 수동 테스트가 필요합니다. 자동화 도구는 모든 단일 문자 키보드 단축키를 신뢰성 있게 감지하거나, 재매핑/비활성화 메커니즘이 존재하는지 검증할 수 없기 때문입니다. 자동화가 부족한 이유와, 테스트 담당자가 수동으로 확인해야 할 사항은 다음과 같습니다.

  • 전용 axe-core 규칙 없음(수동 확인 필요): Axe-core와 Lighthouse에는 단일 문자 키보드 단축키를 구체적으로 표시하는 자동 규칙이 없습니다. 그 이유는 구조적인 문제입니다. 키보드 단축키 동작은 JavaScript 이벤트 리스너(keydown, keyup, keypress)에 구현되며, 정적 DOM 분석만으로는 특정 키 입력이 어떤 동작을 트리거하는지, 그 동작이 전역인지 포커스 범위 내인지, 사용자에게 노출된 비활성화/재매핑 메커니즘이 존재하는지 판단할 수 없습니다. 도구는 가능한 모든 문자 입력에 대해 키 입력을 시뮬레이션하고, 그에 따른 애플리케이션 상태 변화를 관찰해야 하는데, 이는 조합 폭발적이고 맥락 의존적인 작업으로, 현재 자동화된 테스트 능력을 넘어섭니다.
  • 이벤트 리스너 검사(부분 자동화): 브라우저 DevTools는 document, window, body 요소에 연결된 이벤트 리스너를 나열할 수 있습니다. 사이트가 documentkeydown 리스너를 연결하고, 그 소스를 검사했을 때 단일 문자 매칭 로직이 드러난다면, 이는 수동 검증이 필요한 강력한 신호입니다. 그러나 도구 자체만으로는 그 결과 동작이 단축키에 해당하는지, 비활성화 메커니즘이 존재하는지 판단할 수 없습니다.
  • 프레임워크 전용 단축키 라이브러리: 많은 React, Vue, Angular 애플리케이션은 react-hotkeys-hook, tinykeys, Mousetrap과 같은 라이브러리를 사용해 전역 단축키를 등록합니다. 수동 감사에서는 페이지 소스나 네트워크 탭에서 이러한 의존성을 확인한 뒤, 각 등록된 단축키를 이 성공 기준의 요구사항에 비추어 테스트해야 합니다.

테스트 방법

  1. 애플리케이션에서 알려진 단일 문자 단축키 검토: 사용 가능한 문서, 도움말 페이지, 키보드 단축키 참조 대화상자(종종 ?로 열리거나 도움말 메뉴를 통해 접근 가능)를 읽습니다. 보조 키 없이 단일 문자만 사용하는 모든 문서화된 단축키를 나열합니다.
  2. JavaScript 이벤트 리스너 검사: Chrome DevTools 또는 Firefox DevTools를 열고, Elements 또는 Sources 패널로 이동한 뒤 Event Listeners 탭을 사용해 document, window, body의 리스너를 검사합니다. keydown, keyup, keypress 핸들러를 찾습니다. 핸들러 소스를 펼쳐 읽으면서, 보조 키 검사 없이 단일 문자 키를 테스트하는지(즉, event.ctrlKey || event.metaKey || event.altKey를 함께 확인하지 않고 event.key === 'n'만 확인하는지) 확인합니다.
  3. 텍스트 입력에 포커스가 있을 때 키보드 단축키 테스트: 텍스트 필드, 검색 상자, textarea를 클릭해 포커스를 둡니다. 그런 다음 식별한 각 단일 문자 단축키를 누릅니다. 이때 단축키가 작동(내비게이션 발생, 동작 트리거, 상태 변경)하면 실패입니다. 단축키가 포커스 범위에 한정되지 않고, 사용자가 입력 중일 때도 활성 상태인 것입니다.
  4. NVDA + Firefox로 테스트: NVDA 브라우즈 모드를 활성화합니다(Insert+Space로 토글). 브라우즈 모드에서 NVDA는 단일 문자 내비게이션 키(H는 제목, B는 버튼 등)를 사용합니다. 테스트할 웹 애플리케이션을 실행합니다. 포커스 모드(Insert+Space)로 전환한 뒤 텍스트를 받아쓰거나 입력합니다. 페이지의 단일 문자 단축키가 NVDA 브라우즈 모드의 키 입력과 충돌하지 않는지, 의도치 않은 동작이 발생하지 않는지 확인합니다.
  5. JAWS + Chrome으로 테스트: 마찬가지로 JAWS도 단일 문자 빠른 내비게이션을 사용합니다. 애플리케이션을 실행하고, JAWS 가상 커서를 통해 탐색하면서, 애플리케이션의 단축키가 JAWS가 키 입력을 처리하는 동안 예기치 않게 작동하지 않는지 확인합니다.
  6. VoiceOver + Safari(macOS)로 테스트: VoiceOver를 활성화합니다(Cmd+F5). VO+Shift+Down을 사용해 콘텐츠 영역과 상호작용합니다. 페이지의 문자 키 단축키가 VoiceOver 내비게이션 명령을 방해하지 않는지 확인합니다.
  7. 음성 입력 시뮬레이션: Dragon NaturallySpeaking 또는 Windows 음성 인식이 사용 가능하다면, 애플리케이션을 연 상태에서 양식 필드에 텍스트를 받아씁니다. 단축키로 사용되는 문자로 시작하는 일반적인 단어와 구를 말합니다. 의도치 않은 동작이 트리거되지 않는지 확인합니다.
  8. 비활성화 또는 재매핑 메커니즘 검증: 단일 문자 단축키가 존재한다면, 이를 끄거나 재매핑할 수 있는 설정 또는 환경설정 UI를 찾습니다. 키보드만으로 접근 가능하고 제대로 동작하는지 확인합니다. 단축키를 비활성화한 후 해당 문자를 눌렀을 때 더 이상 동작이 트리거되지 않는지도 테스트합니다.

수정 방법

보조 키 검사 없이 전역 단일 문자 단축키 — 잘못된 예

<!-- JavaScript가 document에 연결되어, 전역적으로 'n' 키 입력 시마다 실행됨 -->
<script>
document.addEventListener('keydown', function(event) {
  if (event.key === 'n') {
    // 새 메시지 작성 화면으로 이동
    openComposeWindow();
  }
});
</script>

전역 단일 문자 단축키 — 올바른 예: 보조 키 요구와 비활성화 토글 추가

<!-- 올바른 접근 1: Ctrl+N처럼 보조 키를 요구해 우발적 실행 방지 -->
<script>
document.addEventListener('keydown', function(event) {
  // Ctrl 또는 Meta(Cmd on Mac)가 함께 눌렸을 때만 실행
  if ((event.ctrlKey || event.metaKey) && event.key === 'n') {
    openComposeWindow();
  }
});
</script>

<!-- 올바른 접근 2: 단일 문자 단축키가 꼭 필요하다면 비활성화 토글 제공 -->
<button type='button' id='toggle-shortcuts' aria-pressed='true'>
  Keyboard shortcuts enabled
</button>
<script>
let shortcutsEnabled = true;
document.getElementById('toggle-shortcuts').addEventListener('click', function() {
  shortcutsEnabled = !shortcutsEnabled;
  this.setAttribute('aria-pressed', shortcutsEnabled.toString());
  this.textContent = shortcutsEnabled ? 'Keyboard shortcuts enabled' : 'Keyboard shortcuts disabled';
});

document.addEventListener('keydown', function(event) {
  if (!shortcutsEnabled) return; // 사용자 선호 존중
  if (event.key === 'n') {
    openComposeWindow();
  }
});
</script>

포커스된 위젯 내부에서 활성인 단축키 — 잘못된 예

<!-- 단축키가 위젯 범위가 아니라 전체 document를 수신함 -->
<div id='autocomplete-list' role='listbox'>
  <div role='option'>Istanbul</div>
  <div role='option'>Ankara</div>
</div>
<script>
// 버그: document에 연결되어, 자동완성에 포커스가 없을 때도 실행됨
document.addEventListener('keydown', function(e) {
  if (e.key === 'Enter') selectHighlightedOption();
});
</script>

포커스된 위젯 내부에서 활성인 단축키 — 올바른 예: 리스너를 위젯에 한정

<!-- 올바른 예: 리스너가 위젯 요소에만 연결되어, 포커스가 있을 때만 단축키 실행 -->
<div id='autocomplete-list' role='listbox' tabindex='0'>
  <div role='option'>Istanbul</div>
  <div role='option'>Ankara</div>
</div>
<script>
var widget = document.getElementById('autocomplete-list');
// 리스너가 위젯 자체에만 연결됨: listbox에 포커스가 있을 때만 Enter가 실행됨
widget.addEventListener('keydown', function(e) {
  if (e.key === 'Enter') selectHighlightedOption();
});
</script>

사용자 접근 가능한 재매핑 UI 없음 — 잘못된 예

<!-- 애플리케이션이 라이브러리로 단축키를 등록하지만 설정 페이지를 제공하지 않음 -->
<!-- 사용자는 'g'(갤러리로 이동)나 'c'(장바구니로 이동)를 변경하거나 끌 수 있는 방법이 없음 -->
<script src='hotkeys.min.js'></script>
<script>
hotkeys('g', function() { goToGallery(); });
hotkeys('c', function() { goToCart(); });
</script>

사용자 접근 가능한 재매핑 UI 없음 — 올바른 예: 접근 가능한 설정 패널 추가

<!-- 키보드로 접근 가능한 설정 패널; 사용자가 모든 단일 문자 단축키를 토글할 수 있음 -->
<nav aria-label='Accessibility settings'>
  <button type='button' id='open-shortcut-settings'>Keyboard shortcut settings</button>
</nav>

<dialog id='shortcut-settings-dialog' aria-labelledby='dialog-title'>
  <h2 id='dialog-title'>Keyboard Shortcuts</h2>
  <label>
    <input type='checkbox' id='enable-single-char' checked />
    Enable single-character keyboard shortcuts (G, C, N...)
  </label>
  <p>Disable this if you use speech recognition software or experience accidental activations.</p>
  <button type='button' id='close-dialog'>Save and close</button>
</dialog>

<script src='hotkeys.min.js'></script>
<script>
var checkbox = document.getElementById('enable-single-char');

function applyShortcuts() {
  if (checkbox.checked) {
    hotkeys('g', function() { goToGallery(); });
    hotkeys('c', function() { goToCart(); });
  } else {
    hotkeys.unbind('g');
    hotkeys.unbind('c');
  }
}

applyShortcuts();
checkbox.addEventListener('change', applyShortcuts);

document.getElementById('open-shortcut-settings').addEventListener('click', function() {
  document.getElementById('shortcut-settings-dialog').showModal();
});
document.getElementById('close-dialog').addEventListener('click', function() {
  document.getElementById('shortcut-settings-dialog').close();
});
</script>

흔한 실수

  • documentwindow에 단축키를 등록하면서, 현재 입력 요소에 포커스가 있는지 확인하지 않는 경우: 비활성화 메커니즘이 있더라도, 많은 구현에서 document.activeElement를 확인해 사용자가 <input>, <textarea>, contenteditable 요소 안에 있을 때 단축키를 막는 처리를 빠뜨립니다. 이로 인해 정상적인 타이핑과 충돌이 발생합니다.
  • ? 단축키(도움말 열기)를 예외로 취급하는 경우: 물음표 문자는 인쇄 가능한 문자이며 단일 문자 단축키입니다. 포커스 범위에 한정되어 있거나 비활성화/재매핑 메커니즘이 존재하지 않는 한, 이 성공 기준에서 예외가 아닙니다.
  • 텍스트 입력에서는 단축키를 비활성화하면서, contenteditable 영역이나 리치 텍스트 에디터에서는 비활성화하지 않는 경우: 음성 입력 사용자는 CMS 플랫폼의 에디터처럼 contenteditable 요소를 사용하는 리치 텍스트 에디터에 자주 받아쓰기를 합니다. 이러한 맥락에서 전역 단축키를 차단하지 않으면 여전히 이 성공 기준을 위반하는 것입니다.
  • 사용자의 단축키 선호를 세션 메모리에만 저장하는 경우: 사용자가 단축키를 비활성화한 뒤 페이지를 새로고침하면, 매 방문마다 다시 단축키를 꺼야 하는 일이 없도록, 선호 설정은 localStorage나 사용자 프로필 설정에 지속적으로 저장되어야 합니다.
  • 단축키 설정 UI 자체를 접근 불가능하게 만드는 경우: 비활성화/재매핑 옵션을 키보드로 접근할 수 없는 깊은 메뉴 안에 두거나, 적절한 role='switch'aria-checked 없이 커스텀 토글 위젯을 사용하는 것은, 바로 도움을 받아야 할 사용자들이 이 메커니즘을 사용할 수 없게 만듭니다.
  • 문자 키만 문제라고 가정하는 경우: 숫자 키(1–9), 구두점 키(슬래시, 마침표, 쉼표, 세미콜론), 기호 키(#, @, !)도 모두 인쇄 가능한 문자입니다. 이러한 문자들을 사용하는 단일 키 단축키 역시 동일하게 이 성공 기준의 적용을 받습니다.
  • 어떤 단축키가 존재하는지 문서화하지 않는 경우: 비활성화 메커니즘이 있더라도, 사용자가 어떤 단축키가 활성 상태인지 모르면 효과적으로 사용할 수 없습니다. 도움말 버튼을 통해 열 수 있는 대화상자처럼, 눈에 잘 보이고 키보드로 접근 가능한 단축키 참조를 제공하는 것이 강력히 권장됩니다.
  • 단축키 라이브러리의 기본 설정이 전역 바인딩이라는 사실을 문서 없이 사용하는 경우: Mousetrap, Hotkeys.js, tinykeys 같은 라이브러리는 기본적으로 전역 범위에 바인딩합니다. 개발자들이 범위 제한이나 보조 키 요구 사항에 대한 문서를 읽지 않은 채 사용하면, 의도치 않게 대규모로 이 성공 기준을 위반하는 상황을 만들 수 있습니다.
  • 출시 전에 음성 인식으로 테스트하지 않는 경우: QA 도구에 Dragon NaturallySpeaking이 없는 팀은, 배포 후 음성 입력 사용자가 문제를 보고한 뒤에야 단일 문자 단축키 충돌을 발견하는 경우가 많습니다.
  • 단축키가 “선택 사항”이거나 “파워 유저용”이라는 이유로 예외라고 믿는 경우: 이 성공 기준은 고급 기능으로 마케팅되는지 여부와 관계없이 모든 단일 문자 단축키에 적용됩니다. 기능이 선택 사항이라는 사실은 적합성 요구사항에서 예외가 되지 않습니다.

터키 접근성 규정과의 관계

터키의 대통령령 2025/10은 2025년 6월 21일 관보 제32933호에 게재되었으며, WCAG 2.2와 정렬된 의무적인 웹 및 모바일 접근성 요구사항을 수립합니다. WCAG 2.1.4 — 문자 키 단축키는 레벨 A 성공 기준으로, 이 대통령령에서 가장 우선순위가 높은 의무 범주에 속합니다.

이 대통령령은 터키에서 운영되는 폭넓은 주체를 포괄합니다. 공공 기관 — 부처, 지방자치단체, 국립 대학, 공공 병원, 정부 기관 등을 포함 — 은 대통령령 공포일로부터 1년 이내에 레벨 A 완전 적합을 달성해야 합니다. 해당 범주에 속하는 민간 부문2년의 준수 기간이 주어집니다. 해당 민간 주체에는 전자상거래 플랫폼, 은행 및 금융 기관, 병원 및 의료 서비스 제공자, 200,000명 이상의 가입자를 보유한 통신사, 여행사, 민간 운송 회사, 그리고 교육부(MoNE)의 인가를 받아 운영하는 사립 학교가 포함됩니다.

이러한 조직에게 WCAG 2.1.4를 준수하지 않는 것은 단순한 모범 사례의 문제가 아니라 법적 의무입니다. 단일 문자 상품 탐색 단축키를 비활성화 메커니즘 없이 구현한 터키 전자상거래 사이트나, 거래 흐름에서 문자 키 단축키를 사용하는 터키 은행의 온라인 포털은 대통령령 요구사항을 직접적으로 위반하는 것입니다.

실무적으로, 해당 기관의 컴플라이언스 팀은 WCAG 2.2 레벨 A 개선 프로젝트의 개별 작업으로, JavaScript 코드베이스와 서드파티 위젯 라이브러리에서 전역적으로 등록된 단일 문자 단축키를 감사해야 합니다. 이 성공 기준은 수동 테스트가 필요하므로, 자동 접근성 스캔만으로는 위반 사항을 발견할 수 없습니다. 전용 키보드 및 음성 입력 테스트가 반드시 필요합니다. 콘텐츠 관리 시스템이나 프런트엔드 프레임워크를 사용하는 조직은, 커스텀 애플리케이션 코드뿐 아니라, 고객에게 노출되는 기본 CMS 관리자 키보드 단축키 등 플랫폼 수준의 단축키 구현도 함께 검토해야 합니다.

Accsible의 오버레이 SDK는 사용자 접근 가능한 접근성 환경설정 패널을 제공하여, 최종 사용자에게 단축키 비활성화 토글을 노출함으로써, 조직이 WCAG 2.1.4의 “끄는 메커니즘 제공” 요구사항을 코드베이스 전체 리팩터링 없이 충족하도록 돕습니다. 이는 기본 JavaScript 단축키 로직을 수정하는 데 많은 리소스가 드는 레거시 애플리케이션을 관리하는 조직에 특히 유용합니다. 그러나 조직은, 준수를 위해 오버레이에만 의존하는 것이 기본 단축키 구현을 해결하는 것을 대체할 수 없다는 점을 인지해야 합니다. 오버레이 도구와 소스 코드 개선을 결합한 다층적 접근이 대통령령 하에서 가장 견고한 적합 경로를 제공합니다.