AutoCua
Automate with computer-use agent (ComputerUse / CUA) for macOS, Windows, Linux, Browser, iOS & Android. It sees the screen, clicks, types, browses and writes the code too. One agent, every computer.
翻译准备中
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
macOS에서 한글 파일명이 NFD(자모 분해)로 저장되는 문제를 실시간으로 해결하는 트레이 앱 + CLI + Node.js 라이브러리 통합 패키지입니다. 웹 버전: 설치 없이 웹 변환기에서 ZIP·파일·폴더를 선택하거나 끌어다 놓으면 한글 파일명을 정리한 ZIP을 받을 수 있습니다. 변환 코드는 파일을 서버로 전송하지 않습니다. Breaking Change (2.0.0): 단일 패키지 구조로 통합됐습니다. MACOS-APP/, nfd2nfc/ 서브 패키지 구조는 제거됐습니다. CLI 명령이 nfd2nfc file / nfd2nfc dir 형태로 변경됐습니다.查看完整 README ↗
macOS의 한글 NFD 파일명을 NFC로 자동 변환하는 SwiftUI·AppKit 네이티브 앱입니다. App Store용 Xcode 프로젝트와 독립적인 웹 변환기·CLI·Node.js 라이브러리를 제공합니다.
웹 버전: 설치 없이 웹 변환기에서 ZIP·파일·폴더를 선택하거나 끌어다 놓으면 한글 파일명을 정리한 ZIP을 받을 수 있습니다. 변환 코드는 파일을 서버로 전송하지 않습니다.
네이티브 앱 개편 (3.0.0): Electron·IPC·chokidar·DMG 배포 경로를 제거했습니다. macOS 13 이상을 지원하며, App Sandbox 때문에 기존 Electron 앱에서 감시하던 폴더는 네이티브 앱에서 다시 선택해 접근 권한을 허용해야 합니다. 기존 CLI·웹·Node.js API는 유지합니다.
~/Documents/NFD2NFC에 저장합니다.macOS/NFD2NFC.xcodeproj를 Xcode에서 열어 실행하거나 아래 네이티브 빌드 명령을 사용합니다. App Store 등록·업로드·심사 승인은 별도 절차이며, 저장소에 실제 스토어 링크나 승인 완료를 가정하지 않습니다.
Git·Node.js·npm이 필요합니다. GitHub 소스를 받아 CLI를 빌드한 뒤 설치합니다.
git clone https://github.com/jung-geun/NFD2NFC.git
cd NFD2NFC
npm install
npm run build:cli
npm install -g .
설치 후 nfd2nfc --help로 명령을 확인할 수 있습니다. CLI는 원본 파일명을 직접 변경하므로 nfd2nfc dir "./my-folder" --recursive --dry-run으로 대상을 확인한 뒤 --dry-run을 빼고 실행하세요.
위에서 받은 소스 디렉토리에서 라이브러리를 빌드한 뒤, 사용할 Node.js 프로젝트에서 해당 디렉토리를 설치합니다.
# NFD2NFC 소스 디렉토리에서
npm run build:lib
# 사용할 Node.js 프로젝트에서 (경로를 실제 소스 위치로 바꾸세요)
npm install /absolute/path/to/NFD2NFC
04:59 남음 형식의 카운트다운을 초 단위로 표시합니다. 새 파일을 추가해도 앞선 결과의 만료 시각은 연장되지 않습니다. 만료 즉시 해당 항목의 임시 파일 참조·다운로드 URL을 해제하며, 행은 먼지처럼 흩어진 뒤 목록에서 자동으로 제거합니다. 행 끝의 **목록에서 삭제(×)**에도 같은 소멸 효과를 적용합니다. 시스템의 동작 줄이기 설정이나 백그라운드 탭에서는 효과 없이 바로 제거합니다. 페이지를 떠나면 모든 결과와 대기 항목을 정리합니다. 원본 파일은 변경하지 않습니다.출력 ZIP은 입력 이름을 기준으로 만듭니다. 일반 파일은 확장자까지 보존해 보고서.pdf.zip, ZIP은 마지막 .zip 확장자를 중복하지 않아 자료.zip, 폴더는 폴더명 뒤에 .zip을 붙여 프로젝트 자료.zip이 됩니다. 한글 NFD 이름은 NFC로 정리합니다. 같은 이름을 다시 추가해도 각 결과와 다운로드 링크는 독립적이며, 다운로드한 파일의 이름 충돌 처리는 브라우저 설정을 따릅니다.
파일 선택은 서버 업로드가 아닙니다. 변환 코드는 File API로 기기 안에서 읽고 ZIP을 만들며, localStorage·sessionStorage·IndexedDB·OPFS·Cache API에 사용자 파일을 저장하지 않습니다. 운영 페이지의 Google AdSense 광고와 Google Analytics 방문·이용 통계 측정은 별도로 외부 통신·쿠키·기기 정보 등을 사용할 수 있고 페이지와 같은 실행 환경을 공유합니다. 따라서 CSP로 모든 네트워크 전송을 차단한다고 보장하지 않습니다. 외부 광고·분석 스크립트 없이 민감한 파일을 처리하려면 로컬 CLI를 이용하세요.
각 변환 항목별로 선택한 파일의 합계, ZIP 해제 후 파일의 합계, 생성 ZIP의 크기를 **각각 100MiB(104,857,600바이트)**로 제한합니다. 서로 다른 최상위 파일·ZIP·폴더는 별도 항목이며, 한 폴더 안의 파일·ZIP은 합산합니다. ZIP 해제 크기는 본문을 풀기 전에 검사합니다. ZIP 헤더도 출력 크기에 포함되므로 입력이 정확히 100MiB이면 결과는 제한을 넘을 수 있습니다. 더 큰 자료는 CLI·데스크톱 앱을 이용해주세요.
메모리 부담을 줄이기 위해 변환은 한 번에 하나씩 진행합니다. 백그라운드 탭에서 카운트다운 갱신을 멈추며, 탭 복귀·포커스·페이지 복원·다운로드 클릭 시 항목별 만료 시각을 다시 검사합니다. 수동 삭제의 소멸 효과가 끝난 뒤에는 Safari 다운로드 시작을 위해 URL 해제를 최대 1초 늦추며, 지연 해제 중인 URL도 페이지를 떠나면 즉시 해제합니다. 만료된 URL은 소멸 효과를 기다리지 않고 즉시 해제합니다. 여러 결과의 실제 메모리 사용량과 회수 시점은 기기·브라우저에 따라 달라집니다. 사용자가 다운로드한 파일은 자동 삭제할 수 없습니다.
GitHub Pages 공식 제한은 게시 사이트 1GB, 월 전송량 100GB(soft limit)입니다. 변환 파일은 GitHub에 저장하거나 전송하지 않으므로 이 용량에 포함되지 않습니다. 브라우저 Web Storage의 origin당 localStorage 약 5MiB 제한은 서버 용량과 별개이며, 이 변환기는 파일 보관에 사용하지 않습니다.
선택한 ZIP과 폴더 안의 ZIP은 한 단계만 해제합니다. 내부 상대 경로를 원래 ZIP의 상위 폴더 아래에 유지하며, ZIP 안에 들어 있는 또 다른 ZIP은 파일 그대로 보관합니다. 빈 디렉토리는 결과에 포함하지 않습니다.
한글 NFD가 있는 경로만 NFC로 바꿉니다. 이름이 겹치면 -2, -3 등의 번호를 붙여 파일 내용을 덮어쓰지 않습니다. 이미 NFC인 이름과 한글 이외의 이름은 정규화하지 않습니다.
ZIP 파일명은 UTF-8 플래그와 유효한 Unicode Path 메타데이터를 우선합니다. 인코딩 표시가 없는 이름은 UTF-8, 한국어 Windows CP949 순서로 읽습니다. 다른 구형 인코딩은 UTF-8 ZIP으로 다시 저장한 뒤 선택해주세요.
ZIP 입력은 STORE·DEFLATE 및 ZIP64를 지원하며, ZIP64 정보 없이 정확히 65,535개 항목을 담은 일반 ZIP도 읽습니다. Windows식 경로 구분자를 처리하며, 경로 이탈·CRC 불일치·손상된 ZIP은 오류로 알립니다. 암호화·분할 ZIP·심볼릭 링크·다른 압축 방식은 지원하지 않습니다.
출력은 내용 재압축 없이 STORE 방식으로 묶고, 65,535개 이상의 항목에는 ZIP64를 사용합니다. 파일을 스트리밍으로 읽어 CRC를 계산하고 원본 Blob을 참조하므로 전체 출력 바이트를 JavaScript 배열에 쌓지 않습니다. DEFLATE 버퍼도 검사한 항목 크기로 제한하고 크기 불일치를 거부합니다. 100MiB 제한 안에서도 실제 처리 가능 여부는 기기의 메모리와 브라우저에 따라 달라집니다.
…/상위/디렉토리 형태의 경로를 확인합니다. Finder 보기·전체 경로 복사·개별 이름 되돌리기를 사용할 수 있습니다. 되돌린 항목은 같은 파일 식별자와 같은 이름인 동안 다시 자동 변환하지 않으며, 이 제외 정보도 재시작 후 복원합니다.SMAppService.mainApp.status에서 읽으며, macOS 승인이 필요한 경우 시스템 설정으로 안내합니다. 앱을 다시 실행하면 저장된 폴더 권한과 감시가 자동으로 복원됩니다.폴더 접근 권한: 앱은 선택한 폴더의 security-scoped bookmark를 로컬 앱 컨테이너에 저장합니다. 권한이 만료되거나 디스크가 분리되면 목록에 오류를 표시합니다. 감시를 제거하지 말고 **폴더 추가…**에서 같은 폴더를 다시 선택해 권한을 갱신하세요. 기존 감시 항목이 유지되어 이전 기록의 되돌리기와 재변환 제외 정보도 유지됩니다. 제거 후 다시 추가하면 새 감시 항목이 되어 이전 기록을 되돌릴 수 없습니다. 샌드박스 접근은 허용된 루트의 파일 디스크립터 안에서만 탐색합니다. 최상위 선택 폴더와 다른 선택 폴더의 상위 경로는 이름을 바꾸지 않습니다. 이름이 .으로 시작하는 숨김 항목·심볼릭 링크는 실시간 변환에서 제외하고, 일반 폴더와 앱·문서 패키지는 재귀 탐색합니다.
ZIP 저장: 최초 사용 시 실제 사용자 Documents 또는 Documents/NFD2NFC를 선택해 저장 권한을 허용해야 합니다. 컨테이너의 가상 Documents나 임의의 다른 폴더로 대신 저장하지 않습니다. 결과 이름은 NFD2NFC.zip, NFD2NFC (2).zip처럼 증가하며 기존 ZIP을 덮어쓰지 않습니다. ZIP 내부 이름 충돌에는 (2) 등의 접미사를 붙이고, 중복·중첩 선택은 정리합니다. 숨김 파일·패키지·빈 디렉토리를 보존하고 원본 내용·원본 이름을 수정하지 않습니다. DEFLATE를 64KiB 버퍼로 스트리밍하고 UTF-8·CRC32·ZIP64·원본 수정 시각·POSIX 모드를 기록합니다. 심볼릭 링크·특수 파일·비 UTF-8 이름·안전하지 않은 상대 경로는 명시적 오류이며, 실패·앱 종료 시 미완성 ZIP을 제거합니다. Finder가 압축 해제한 이름을 다시 NFD로 저장할 수 있지만 ZIP 안의 한글 이름은 NFC로 유지됩니다.
백그라운드 실행: Dock과 메뉴 막대 아이콘은 독립적으로 숨길 수 있습니다. 둘 다 숨겨도 감시는 계속되며 창을 닫아도 종료하지 않습니다. Finder에서 앱을 다시 열면 기존 실행 인스턴스의 창이 열립니다. 완전히 중단하려면 앱 메뉴 또는 메뉴 막대 팝오버에서 종료하세요. 로그인 시 자동 실행은 로그인 때 앱을 실행하는 기능이며, 사용자가 종료한 앱을 강제로 재실행하는 데몬은 아닙니다.
개인정보: 네이티브 앱에는 광고·분석 SDK·서버 업로드·네트워크 클라이언트 권한이 없습니다. 선택 경로·변환 기록·접근 권한·설정은 로컬에만 저장합니다. 웹 버전의 광고 동작과는 별개입니다.
# 디렉토리 변환 (재귀)
nfd2nfc dir <path> --recursive
# 미리보기 (실제 변환 없음)
nfd2nfc dir <path> --dry-run
# 단일 파일 변환
nfd2nfc file <path>
# 경로 자동 감지 (파일/디렉토리 판별 후 처리)
nfd2nfc <path>
# 도움말
nfd2nfc --help
const nfd2nfc = require("@pieroot/nfd2nfc");
// v1 호환 — 단순 문자열 정규화
const nfc = nfd2nfc.normalizeToNFC("NFD로 인코딩된 문자열");
const nfd = nfd2nfc.normalizeToNFD("NFC로 인코딩된 문자열");
// v2 신규 — 파일 시스템 API
const { normalizeEntry, scan, shouldNormalize } = require("@pieroot/nfd2nfc");
// 단일 파일/디렉토리 rename (APFS inode 처리 포함)
const result = await normalizeEntry("/path/to/file", "file");
// result.status: 'renamed' | 'skipped' | 'noop-same-inode' | 'collision'
// 디렉토리 재귀 스캔 (깊이 역순 정렬)
const entries = await scan("/path/to/dir", true);
# 네이티브 앱: Node.js 의존성 불필요
open macOS/NFD2NFC.xcodeproj
make build # Release 앱, 로컬 실행용 서명
make run
make test # 네이티브 빌드·파일 시스템·FSEvents·ZIP·앱 설정 회귀 테스트
# App Store 배포용: Apple Developer 서명·프로비저닝 필요
make archive
make export
# CLI·라이브러리·웹은 별도 Node.js 프로젝트
npm install
npm run build:cli
npm run build:lib
npm run typecheck
# 웹 개발 / 배포용 정적 빌드
npm run web:dev
npm run web:build
npm run web:preview
# 웹 타입 검사 / 전체 회귀 테스트
npx tsc --noEmit --project web/tsconfig.json
npm test
make build 결과는 .build/xcode/Build/Products/Release/NFD2NFC.app, make archive 결과는 .build/NFD2NFC.xcarchive입니다. Release 앱은 Apple Silicon·Intel universal 빌드입니다. Xcode 프로젝트·macOS/ExportOptions.plist의 팀은 기존 todo 프로젝트와 같은 VQXGRP23X5, 앱 식별자는 com.pieroot.nfd2nfc입니다. 다른 계정으로 배포할 때는 두 파일의 팀을 함께 변경하고, App Store Connect에서 같은 앱 식별자의 macOS 앱과 MARKETING_VERSION에 맞는 버전(현재 3.0.2, 빌드 3)을 등록하세요. 유효한 배포 서명·스토어 프로비저닝과 개인정보 처리방침 URL·스토어 메타데이터·스크린샷을 준비한 뒤 Organizer의 Distribute App → App Store Connect로 검증·업로드합니다. 업로드·심사는 이 저장소의 빌드 성공과 별개입니다.
macOS의 CFBundleVersion은 마케팅 버전과 별도로 계속 증가시킵니다. 이전 Electron 앱은 빌드 **2.0.3**을 배포했으므로 네이티브 앱의 빌드 1·2는 오히려 이전 앱보다 낮습니다(2는 2.0.0). Launch Services는 같은 앱의 사본 중 더 높은 CFBundleVersion을 우선할 수 있습니다. Debug·Release의 CURRENT_PROJECT_VERSION은 3, manageAppVersionAndBuildNumber는 false로 유지해 export가 빌드 번호를 다시 정하지 않게 합니다. 이후 배포마다 마지막 배포 빌드보다 증가시키고 최종 .pkg에서 확인하세요. VerifyIcon.swift는 레거시 2.0.3 이하의 빌드를 아이콘 픽셀과 무관하게 거부합니다. 기존 3.0.1 (2) 설치본은 아이콘 리소스가 맞아도 이 배포 정책 검사를 실패합니다.
App Sandbox·사용자 선택 파일 읽기/쓰기·app-scoped bookmark만 활성화합니다. broad Documents 접근·임시 예외·JIT 권한은 사용하지 않습니다. 개인정보 manifest는 macOS/NFD2NFC/PrivacyInfo.xcprivacy에 포함되어 있습니다. GitHub의 기존 Release 워크플로는 네이티브 테스트·빌드 검증으로 전환했으며 DMG 생성·업로드는 하지 않습니다.
USB 장치 직접 접근은 사용하지 않으며 Debug·Release 모두 ENABLE_RESOURCE_ACCESS_USB = NO입니다. .entitlements 파일에 USB가 없어도 Xcode 빌드 설정이 서명 권한을 추가할 수 있으므로, 새 아카이브의 앱에 codesign -d --entitlements -를 실행하고 export된 패키지의 앱에서도 com.apple.security.device.usb가 없는지 확인하세요. 설정 변경 전 아카이브·패키지는 자동 갱신되지 않습니다.
https://nfd2nfc.com/privacy/, https://nfd2nfc.com/support/에 대응합니다. 실제 연락 이메일, 로컬 데이터 처리·초기화 방법, 권한 및 ZIP 문제 해결 안내를 포함합니다.assets/app-store/ko-KR/mac/2880x1800/의 01~05 순서로 사용합니다. 묶음 미리보기는 assets/app-store/preview-ko-KR.jpg입니다.분리된 조각이 하나로 이어지는 N 마크와 코발트 블루를 사용합니다. macOS/NFD2NFC/Assets.xcassets에는 macOS AppIcon의 16·32·128·256·512pt 각 1x/2x 슬롯 10개(최대 1024×1024), 벡터 BrandIcon, 라이트·다크 BrandMark, 18pt 1x/2x 메뉴 막대 템플릿 StatusBarIcon, 라이트·다크 AccentColor가 포함됩니다. 일반 설정·메뉴 위젯·표준 앱 정보 패널에 로고를 적용합니다.
아이콘 도형의 기준은 macOS/Branding/GenerateAssets.swift의 Swift 경로이며 macOS/Branding의 SVG는 생성 결과입니다. xcrun swift macOS/Branding/GenerateAssets.swift로 카탈로그·resources/icon.icns·웹의 web/public/favicon.svg를 같은 N 도형에서 재생성합니다. SVG만 수정해도 앱 아이콘이 바뀌는 것은 아닙니다. 앱 빌드는 카탈로그를 사용하며 별도 생성 스크립트 실행은 필요 없습니다.
Debug·Release의 Standalone Icon File Behavior는 All(ASSETCATALOG_COMPILER_STANDALONE_ICON_BEHAVIOR = all)입니다. 기본값은 일부 크기만 AppIcon.icns에 넣어 App Store 검증의 ‘512pt @2x 필수 아이콘 없음’ 오류를 일으킬 수 있습니다. 수정 전 아카이브는 자동 갱신되지 않으므로 새로 Archive한 항목으로 검증하세요.
Xcode 타깃의 Verify App Icons 빌드 단계가 macOS/Branding/VerifyIcon.swift를 실행하므로 make·npm뿐 아니라 Xcode 직접 빌드와 Organizer용 Archive도 검사합니다. 결과 앱의 ICNS와 Assets.car를 각각 읽어 16·32·128·256·512pt의 1x/2x 총 10개 표현(16–1024px)을 모두 원본 PNG 픽셀과 대조합니다. 크기·배율·픽셀이 다르거나 표현이 빠지면 실패합니다. Assets.car 검사는 ICNS가 없는 임시 번들에서 수행해 파일 폴백으로 통과하지 못하게 합니다. make export는 입력 아카이브와 export가 끝난 실제 .pkg 내부 앱을 각각 검사합니다. 기존 export도 xcrun swift macOS/Branding/VerifyIcon.swift path/to/NFD2NFC.pkg, App Store 설치본도 같은 명령에 .app 경로를 주어 검사할 수 있습니다.
알림의 왼쪽 앱 아이콘은 AppModel이 별도로 지정하지 않으며 macOS가 앱의 번들 아이콘으로 표시합니다. 따라서 리소스 검사 통과는 알림 센터의 실제 표시 성공과 다릅니다. 최종 배포본에서 새 변환 알림을 발생시켜 눈으로 확인하고, 처음 설치한 환경과 구버전에서 업데이트한 환경을 구분하세요. 이전 로고가 보이면 App Store 서명·버전·빌드, 실제 설치본의 ICNS·Assets.car, 실행 중인 앱 경로를 먼저 확인합니다. 중복 설치·등록이나 시스템 캐시는 가능한 원인이지, 확인 없이 단정할 진단이 아닙니다. 재설치만으로 해결된다고 보장하지 않으며 감시 폴더·북마크·기록이 있는 앱 컨테이너나 시스템 전체 알림 캐시를 무조건 삭제하지 않습니다.
CFBundleVersion이 2.0.3에서 1·2로 내려간 메타데이터 결함 수정. 별도 식별자의 Launch Services 실험에서 등록 순서와 무관하게 이전 앱이 선택됐고, 새 빌드 3에서는 신버전이 선택됨을 확인. 이는 앱 선택 규칙의 재현이며 시스템에 남은 알림 아이콘의 최종 갱신까지 보장하지는 않음.web/public/CNAME, canonical, Open Graph, JSON-LD, sitemap의 주소를 이 도메인에 맞춥니다. GitHub Pages의 Custom domain도 nfd2nfc.com인지 확인하세요.npm run web:build는 초기 변환 화면·웹 사용법·CLI 설치법·FAQ를 정적 HTML로 미리 렌더링합니다. 브라우저는 이를 hydrate해 기존 변환 기능을 이어받습니다. JavaScript를 실행하지 않는 크롤러도 소개와 사용법을 읽을 수 있습니다. 개발 서버는 클라이언트 렌더링을 사용합니다./privacy/, /support/를 독립적인 정적 HTML로 내보냅니다. 두 안내 페이지에는 광고·JavaScript·폼·외부 폰트가 없으며, JavaScript 없이 본문과 FAQ를 읽을 수 있습니다. 스타일과 아이콘은 같은 사이트에서 제공하며 호스팅 접속 기록은 별도입니다. sitemap에도 두 페이지를 포함합니다.ca-pub-6070999186513755의 자동 광고 코드를 한 번 로드합니다. web/public/ads.txt에 동일한 게시자를 선언합니다. 수동 슬롯 ID나 빈 광고 박스는 사용하지 않습니다. 개발 서버와 개인정보·지원 페이지에는 광고 코드를 넣지 않습니다.G-LVC6YHJFGK를 <head>에 한 번 초기화합니다. 기존 AdSense와 같은 web/vite.config.ts 빌드 훅에서 삽입하므로 개발 서버와 /privacy/·/support/에는 분석 스크립트가 없습니다. 선택한 파일의 이름·경로·내용을 별도 Analytics 이벤트나 매개변수로 보내지 않습니다. 배포 후 브라우저에서 gtag/js?id=G-LVC6YHJFGK 로드와 동일한 tid의 g/collect 요청을 확인하고, 실제 집계는 Google Analytics 실시간 보고서에서 확인하세요.data-overlays="bottom"으로 앵커 광고를 하단에 고정합니다. 이 속성은 AdSense의 앵커 위치 설정을 덮어쓰며, 계정에서 앵커 광고를 꺼도 활성화할 수 있습니다. 앵커 광고를 끄려면 로더의 이 속성을 제거한 뒤 계정 설정을 사용하세요. 공식 앵커 동작 안내#converter 영역을 제외하는 설정을 권장합니다. 실제 광고 위치·빈도·게재 여부는 Google이 결정하며 코드만으로 보장하지 않습니다. Auto ads 설정form-action 'none', object-src 'none', base-uri 'self', worker-src 'self' blob:를 유지합니다. 광고 통신을 막던 connect-src 'none' 등 리소스 제한은 제거했습니다. 정적 Pages에서 고정 nonce를 만들거나, 변경되는 Google 광고 도메인을 고정 목록으로 제한하지 않습니다. AdSense CSP 공식 안내/privacy/에 개인정보·광고·분석 처리 안내를 제공합니다. EEA·영국·스위스 사용자에게 개인 맞춤 광고를 제공하려면 AdSense의 개인정보 보호 및 메시지에서 Google 인증 CMP와 IAB TCF 통합 등 적용되는 동의 요건을 설정해야 합니다. Analytics 쿠키·분석에도 방문자 지역에 따른 고지·동의 요건을 별도로 확인해야 하며, 태그 설치만으로 동의 관리가 구성되지는 않습니다. 이 프로젝트에 기여하려면 다음 단계를 따르세요:
git checkout -b feat/new-featuregit commit -am 'Add new feature'git push origin feat/new-feature이 프로젝트는 MIT 라이선스를 사용합니다.
모바일·태블릿 레이아웃, 키보드 선택, 라이트·다크 테마, 시스템의 모션 감소 설정을 지원합니다. 완료·오류 상태는 텍스트로도 전달됩니다.
WebSite/WebApplication 구조화 데이터, 크롤링 허용, canonical과 sitemap으로 대응합니다. 존재하지 않는 평점·리뷰·FAQ 리치 결과를 꾸미거나 별도 AI 전용 파일을 추가하지 않습니다. Google AI 검색 가이드, OpenAI 검색 크롤러 안내