Swift를 모르는 채로 macOS 앱을 만들었다

Swift를 모르는 채로 macOS 앱을 만들었다

MacBook과의 첫 만남, 그리고 한영키

MacBook을 쓰기 시작하면서 가장 먼저 부딪힌 벽은 한영 전환이었다. Windows에서는 당연하게 오른쪽 Alt 키 하나로 해결되던 일이, macOS에서는 Caps Lock이나 Fn + Globe 같은 낯선 조합을 요구했다. 손에 익지 않았다.

검색하면 Karabiner-Elements를 추천받는다. 훌륭한 도구이지만, 한영키 하나 바꾸자고 커널 extension을 로드하고 JSON 설정 파일을 작성하는 건 배보다 배꼽이 큰 느낌이었다. "Right Command 키 하나만 한영 전환키로 쓰는 가벼운 앱"이 필요했다.

그런 앱은 없었다. 그래서 만들었다.

Swift? 한 줄도 모른다

문제는 내가 Swift를 전혀 모른다는 것이었다. macOS 네이티브 앱 개발 경험도 없었다. hidutil이 뭔지, CGEvent tap이 뭔지, LaunchAgent가 뭔지도 몰랐다.

예전이었으면 여기서 멈췄을 것이다. "Swift 공부부터 해야 하나", "그냥 Karabiner 쓸까" 하면서 미루다가 영원히 안 만들었을 것이다.

하지만 지금은 vibe coding의 시대다. 내가 모르는 API는 LLM이 안내해주고, 나는 "이건 이렇게 동작해야 해"라는 방향만 잡으면 된다. Swift 문법을 몰라도, macOS의 키 매핑 구조를 처음 접해도, 핵심 아이디어만 있으면 앱이 나온다.

만들면서 느낀 것들

Hangul Key Changer는 이렇게 태어났다. hidutil로 키 리매핑을 하고, 시스템 단축키 설정을 자동으로 바꿔주는 간단한 유틸리티다. 기능은 단순하다.

  • 원하는 키를 한영 전환키로 설정
  • Enable 한 번 클릭으로 키 매핑 + 시스템 설정 자동 적용
  • LaunchAgent로 재부팅 후에도 유지
  • 메뉴바에서 빠르게 제어

Initial commit부터 v2.3.0까지, 28번의 커밋을 거치며 조금씩 다듬어왔다. 처음에는 Right Command만 지원하던 것이 임의의 키를 설정할 수 있게 됐고, 다크모드 대응, Homebrew Cask 배포, 공증(notarization)까지 갖추게 됐다.

이 과정에서 재미있었던 건, 내가 Swift를 "배운" 게 아니라 "써본" 것에 가깝다는 점이다. 문법을 체계적으로 공부한 적은 없다. 그때그때 필요한 API를 찾고, LLM과 대화하면서 구현하고, 동작을 확인하고, 다음 기능으로 넘어갔다. 지금도 Swift의 프로토콜이나 제네릭을 설명하라고 하면 못 한다. 하지만 macOS에서 키 이벤트를 가로채는 앱은 만들 수 있다.

내가 편하면 남도 편하다

처음에는 순전히 나를 위한 앱이었다. 그런데 만들고 나니 생각이 바뀌었다. macOS로 넘어오면서 한영키 때문에 불편한 사람이 나만은 아닐 것이다. 특히 Windows에서 Mac으로 전환한 한국어 사용자라면 같은 고통을 겪고 있을 것이다.

그래서 GitHub에 올리고, Homebrew Cask로 설치할 수 있게 만들었다.

brew install --cask hulryung/tap/hangulkeychanger

한 줄이면 설치가 끝난다. "내가 편하자고 만든 것"이 "같은 불편을 겪는 사람들도 편한 것"이 되는 순간이다.

대학 때의 그 감각

요즘 이상한 감각이 돌아오고 있다. 대학 다닐 때 느꼈던 개발에 대한 갈증 같은 것이다.

그때는 뭐든 만들고 싶었다. 기술적으로 부족해도, 완성도가 떨어져도, "이게 돌아간다"는 사실 자체가 즐거웠다. 프로그래밍이라는 행위 자체에서 오는 원초적인 재미. 일을 하면서 어느 순간 잃어버린 그 감각.

vibe coding이 그걸 되살려주고 있다. 아이디어가 떠오르면 바로 만들어볼 수 있다는 감각. 모르는 언어여도 상관없다는 자신감. "이거 만들면 재밌겠다"는 생각이 "이거 만드는 데 얼마나 걸리지"로 꺾이지 않는 경험.

Hangul Key Changer는 그 첫 번째 결과물이다. Swift를 모르는 채로 시작해서, 지금은 Homebrew에서 설치할 수 있는 앱이 됐다. 다음에는 또 뭘 만들게 될지 모르겠다. 확실한 건, 지금 만들고 싶은 게 많다는 것이다.

그리고 그게 즐겁다.