📋 목차

TextExpander 평생 라이선스를 구매해서 잘 쓰고 있었는데, 어느 날 갑자기 활성화가 안 된다. 확인해보니 라이선스 서버가 종료됐다는 청천벽력과 같은 소식을 들었다.

TextExpander에 무슨 일이

The discontinuation of TextExpander's legacy license servers has rendered my lifetime purchase useless, leading me to lose trust in cloud-dependent paid services despite their offer of a one-year free subscription TextExpander 측에서 온 메일 내용을 요약하면 이렇다:

구버전 평생 라이선스를 관리하던 서드파티 서버가 운영을 종료했습니다. 라이선스 인증 서버가 없어졌기 때문에, 기존 라이선스 키로는 더 이상 활성화가 불가능합니다.

평생 라이선스를 샀는데 서버가 꺼지면 끝이라니. 보상으로 구독 서비스 1년 무료를 제안하긴 했지만, 그 이후엔 또 구독료를 내야 한다. 이런 경험을 하니 클라우드 의존적인 유료 서비스에 대한 신뢰가 확 떨어졌다.

그래서 대안을 찾았다. Espanso.

Espanso란

Espanso는 한마디로 오픈소스 텍스트 확장기다. 자주 사용하는 긴 문장, 이메일 주소, 코드 조각 등을 짧은 단축어로 등록해두고, 타이핑하면 즉시 변환해준다. Linux 환경에서 TextExpander 대체재로 사용하던 소프트웨어다.

주요 특징

  • 크로스 플랫폼: Windows, macOS, Linux 모두 지원
  • 오픈소스 & 무료: 비용 없음, 프라이버시 걱정 없음
  • Rust 기반: 가볍고 빠름, 시스템 자원 거의 안 먹음
  • 텍스트 기반 설정: YAML 파일로 단축어 관리. Git으로 동기화 가능
  • 강력한 확장성: 날짜 삽입, 쉘 스크립트 실행, 폼 입력 등 복잡한 자동화 지원

설치

# macOS (Homebrew)
brew install espanso

# Windows (Winget)
winget install espanso

# Linux
# https://espanso.org/install/ 참고

설치 후 espanso start로 실행하면 된다.

기본 사용법

설정 파일 위치:

  • macOS: ~/.config/espanso/match/base.yml
  • Windows: %APPDATA%\espanso\match\base.yml

기본 예제

matches:
  # 이메일 주소
  - trigger: ":email"
    replace: "myemail@example.com"

  # 인사말
  - trigger: ":hello"
    replace: "안녕하세요, 문의 주셔서 감사합니다."

  # 특수 기호
  - trigger: "::shrug"
    replace: "¯\\_(ツ)_/¯"

이제 어디서든 :email을 입력하면 이메일 주소로 자동 변환된다.

동적 값 삽입

matches:
  # 오늘 날짜
  - trigger: ":date"
    replace: ""
    vars:
      - name: date
        type: date
        params:
          format: "%Y-%m-%d"

  # 현재 시간
  - trigger: ":time"
    replace: ""
    vars:
      - name: time
        type: date
        params:
          format: "%H:%M"

  # 클립보드 내용 활용
  - trigger: ":clip"
    replace: "클립보드: "
    vars:
      - name: clipboard
        type: clipboard

쉘 스크립트 실행

matches:
  # 현재 Git 브랜치
  - trigger: ":branch"
    replace: ""
    vars:
      - name: output
        type: shell
        params:
          cmd: "git branch --show-current"

폼 입력

matches:
  - trigger: ":meeting"
    form: |
      회의록
      --------
      일시: [[date]]
      참석자: [[attendees]]
      안건: [[agenda]]

:meeting 입력 시 폼이 뜨고, 각 필드를 채우면 완성된 템플릿이 삽입된다.

TextExpander에서 마이그레이션

기존 TextExpander 스니펫을 Espanso로 옮기는 건 수동으로 해야 한다. 다행히 TextExpander 앱에서 스니펫 그룹을 우클릭해 내보내기가 가능하다. 내보낸 파일을 보면서 YAML로 옮겨 적으면 된다.

스니펫이 많다면 좀 귀찮긴 하지만, 한 번 옮기고 나면 Git으로 버전 관리도 되고 여러 기기 간 동기화도 자유롭다.

왜 Espanso인가

  TextExpander Espanso
가격 연 $59.95 (구독) 무료
라이선스 클라우드 의존 로컬, 서버 불필요
설정 GUI YAML (Git 동기화 가능)
플랫폼 macOS, Windows, iOS macOS, Windows, Linux
확장성 제한적 쉘 스크립트, 폼 등

TextExpander 사태를 겪고 나니, 로컬에서 돌아가고 서버 의존성이 없다는 게 얼마나 큰 장점인지 체감했다. 설정 파일 기반이라 처음엔 약간의 진입장벽이 있지만, 개발자라면 오히려 이 방식이 더 편하다.

정리

평생 라이선스라고 믿고 산 서비스가 서버 종료로 못 쓰게 되는 경험은 꽤 허탈하다. 이번 기회에 오픈소스, 로컬 우선 도구의 가치를 다시 느꼈다.

텍스트 확장기가 필요하다면 Espanso를 추천한다. 무료고, 빠르고, 내 데이터는 내 컴퓨터에 있다.