숨은 제어문자 제거 도구

Jekyll 블로그의 마크다운 파일에서 숨은 제어문자를 찾아 제거하는 도구들입니다.

🚨 문제 상황

외부에서 복사-붙여넣기할 때 보이지 않는 제어문자가 포함되어 RSS 피드 생성 시 XML 파싱 오류가 발생할 수 있습니다:

error on line 94 at column 99: CData section not finished

🛠️ 제공 도구

1. Python 스크립트 (권장)

  • 파일: clean-control-chars.py
  • 장점: 크로스 플랫폼, 안전한 파일 처리, 상세한 로그
  • 요구사항: Python 3.6+

2. Bash 스크립트

  • 파일: clean-control-chars.sh
  • 장점: 빠른 실행, 시스템 도구 활용
  • 요구사항: Unix/Linux/macOS, sed 명령어

3. Makefile

  • 파일: Makefile
  • 장점: 간단한 명령어, Jekyll 빌드와 통합
  • 요구사항: make 명령어

4. Git 파이프라인 도구

  • 파일: smart-git-add.sh, Git hooks
  • 장점: Git add 전 자동 제어문자 정리
  • 요구사항: Git 저장소

📖 사용법

Python 스크립트 사용

# 기본 사용 (_posts 폴더 검사)
python3 clean-control-chars.py

# 특정 디렉토리 검사
python3 clean-control-chars.py /path/to/posts

# 읽기 전용 검사
python3 clean-control-chars.py --check-only

# 실행 권한 부여 (필요시)
chmod +x clean-control-chars.py

Bash 스크립트 사용

# 기본 사용 (_posts 폴더 검사)
./clean-control-chars.sh

# 특정 디렉토리 검사
./clean-control-chars.sh /path/to/posts

# 실행 권한 부여
chmod +x clean-control-chars.sh

Makefile 사용

# 도움말 보기
make help

# 제어문자 검사 (읽기 전용)
make check-control-chars

# 제어문자 제거
make clean-control-chars

# 제어문자 정리 후 빌드
make clean-and-build

# 전체 재빌드
make rebuild

🚀 Git 파이프라인 사용 (권장)

방법 1: 스마트 Git Add

# 모든 변경사항을 제어문자 정리 후 스테이징
make git-smart-add

# 또는 직접 실행
./smart-git-add.sh --all

# 특정 파일만 처리
./smart-git-add.sh _posts/tech/new-post.md

# 제어문자만 검사
./smart-git-add.sh --check-only

방법 2: Git Hooks 자동화

# Git hooks 설치
make git-hooks-install

# 또는 직접 설치
chmod +x install-git-hooks.sh
./install-git-hooks.sh

설치 후에는 git commit을 실행할 때마다 자동으로:

  1. 제어문자 검사
  2. 발견 시 자동 정리
  3. Jekyll 빌드 테스트
  4. 정리된 파일 재스테이징

방법 3: 안전한 커밋

# 커밋 전 모든 검사 수행
make git-commit-safe

🔍 제어문자 검사 (읽기 전용)

실제로 파일을 수정하지 않고 제어문자만 검사하려면:

# Python 스크립트 사용
python3 clean-control-chars.py --check-only

# Makefile 사용
make check-control-chars

# 스마트 Git Add 사용
./smart-git-add.sh --check-only

🛡️ 안전 기능

  • 자동 백업: 처리 전 모든 파일을 backup_YYYYMMDD_HHMMSS/ 폴더에 백업
  • 재검사: 처리 후 제어문자 완전 제거 확인
  • 에러 처리: 파일 읽기/쓰기 오류 시 안전하게 처리
  • Git 통합: 자동 스테이징 및 커밋 전 검사

📋 제거되는 제어문자

다음 제어문자들이 제거됩니다 (유용한 문자는 제외):

  • \x00 - Null
  • \x01 - Start of Heading
  • \x02 - Start of Text
  • \x03 - End of Text
  • \x04 - End of Transmission
  • \x05 - Enquiry
  • \x06 - Acknowledge
  • \x07 - Bell
  • \x08 - Backspace
  • \x0B - Vertical Tab
  • \x0C - Form Feed
  • \x0E - Shift Out
  • \x0F - Shift In
  • \x10 - Data Link Escape
  • \x11 - Device Control 1
  • \x12 - Device Control 2
  • \x13 - Device Control 3
  • \x14 - Device Control 4
  • \x15 - Negative Acknowledge
  • \x16 - Synchronous Idle
  • \x17 - End of Transmission Block
  • \x18 - Cancel
  • \x19 - End of Medium
  • \x1A - Substitute
  • \x1B - Escape
  • \x1C - File Separator
  • \x1D - Group Separator
  • \x1E - Record Separator
  • \x1F - Unit Separator
  • \x7F - Delete

🔒 유지되는 문자

다음 문자들은 유지됩니다:

  • \x09 - Tab (탭)
  • \x0A - Line Feed (개행)
  • \x0D - Carriage Return (캐리지 리턴)

📝 사용 예시

1. 정기적인 검사

# 매주 한 번 제어문자 검사
make check-control-chars

2. 새 포스트 작성 후

# 새 포스트 작성 후 제어문자 정리
make clean-control-chars

3. 빌드 전 정리

# 빌드 전 제어문자 정리 및 빌드
make clean-and-build

4. Git 작업 전 정리

# Git add 전 자동 정리
make git-smart-add

# 또는 특정 파일만
./smart-git-add.sh _posts/tech/new-post.md

5. 커밋 전 안전 검사

# 커밋 전 모든 검사
make git-commit-safe

6. 자동화된 Git Hooks

# Git hooks 설치 (한 번만)
make git-hooks-install

# 이후 git commit 시 자동 검사
git commit -m "새 포스트 추가"

⚠️ 주의사항

  1. 백업 확인: 스크립트 실행 전 중요한 파일 백업
  2. Git 상태: 변경사항을 Git에 커밋하기 전에 검토
  3. 테스트: 정리 후 로컬에서 빌드 테스트
  4. 권한: 스크립트 실행 권한 확인
  5. Git Hooks: hooks 설치 후 커밋 시 자동 실행됨

🐛 문제 해결

스크립트 실행 권한 오류

chmod +x clean-control-chars.sh
chmod +x clean-control-chars.py
chmod +x smart-git-add.sh
chmod +x install-git-hooks.sh

Python 모듈 오류

# Python 3 확인
python3 --version

# 필요한 경우 pip 설치
pip3 install --user pathlib

Git Hooks 비활성화

# pre-commit 훅 비활성화
chmod -x .git/hooks/pre-commit

# 다시 활성화
chmod +x .git/hooks/pre-commit

sed 명령어 오류 (macOS)

# macOS에서는 gsed 사용 권장
brew install gnu-sed

�� 지원

문제가 발생하면 다음을 확인해주세요:

  1. Python 3.6+ 또는 bash 설치 여부
  2. 파일 권한 설정
  3. 백업 폴더 생성 가능 여부
  4. 대상 디렉토리 접근 권한
  5. Git 저장소 상태

💡 팁: make git-smart-add를 사용하여 Git add 전에 자동으로 제어문자를 정리하세요!

💡 팁: Git hooks를 설치하면 git commit 시 자동으로 제어문자 검사가 실행됩니다!

💡 팁: 정기적으로 make check-control-chars를 실행하여 제어문자 문제를 사전에 방지하세요!