POOOLING FOREST
맥에서 잃어버린 창을 찾아서: Aerospace와 Spacelist로 광명 찾기 - 맥(macOS)에서 타일링 윈도우 매니저 Aerospace와 TUI 도구 Spacelist를 활용해 마우스
Engineering & Tech

맥에서 잃어버린 창을 찾아서: Aerospace와 Spacelist로 광명 찾기

맥(macOS)에서 타일링 윈도우 매니저 Aerospace와 TUI 도구 Spacelist를 활용해 마우스 없이 효율적으로 창을 전환하고 관리하는 방법을 소개합니다.

김영태

테크리드

안녕하세요. 풀링포레스트 테크리드 김영태입니다.

개발자라면 누구나 한 번쯤 겪는 고질병이 있습니다. 바로 '창 찾기 지옥'입니다. 터미널 창 5개, IDE 3개, 브라우저 탭 수십 개, 슬랙, 노션까지 띄워놓고 작업하다 보면, 방금 봤던 그 로그 창이 어디로 갔는지 몰라 Cmd+Tab을 무한 연타하게 되죠.

솔직히 말해, 저는 마우스에 손이 가는 순간 집중력이 깨지는 느낌을 아주 싫어합니다. 그래서 맥(macOS)에서도 리눅스의 i3wm 같은 타일링 윈도우 매니저 환경을 구축하려고 부단히 노력해왔습니다. 최근에는 Aerospace라는 훌륭한 윈도우 매니저에 정착했는데, 다 좋은데 딱 하나 아쉬운 점이 있더군요. 바로 "특정 창을 빠르게 찾아 포커싱하는 것"이었습니다.

오늘은 이 가려운 부분을 시원하게 긁어준 도구, Spacelist를 소개하고, 이 도구가 어떻게 만들어졌는지 기술적인 관점에서 살짝 들여다보려고 합니다.

터미널 덕후를 위한 내비게이션

Aerospace는 키보드 단축키로 창을 타일처럼 배치해 주는 도구입니다. 하지만 작업 공간(Workspace)이 늘어나면, "아, 내가 DB 접속 터미널을 워크스페이스 3번에 뒀던가, 5번에 뒀던가?" 헷갈리기 시작합니다. Aerospace 자체 CLI 명령어로 목록을 볼 수 있지만, 직관적이지 않죠.

이때 등장한 것이 Spacelist입니다. 이름 그대로 Aerospace의 창 목록(Space list)을 보여주는 TUI(Terminal User Interface) 도구입니다.

이 도구의 핵심은 단순함입니다. 터미널에 `spacelist`라고 치면 현재 열려 있는 모든 창이 워크스페이스별로 정리되어 나옵니다. 여기서 텍스트를 입력하면 퍼지(Fuzzy) 검색으로 실시간 필터링이 되고, 엔터를 누르면 해당 창으로 즉시 이동합니다. 마우스 없이, 생각의 흐름을 끊지 않고 창을 전환할 수 있는 것이죠.

Go와 Bubble Tea의 맛있는 조합

백엔드 개발자로서 이 도구가 흥미로웠던 또 다른 이유는 바로 기술 스택 때문입니다. Spacelist는 Go 언어로 작성되었고, TUI 프레임워크인 Bubble Tea를 사용했습니다.

Bubble Tea는 'The Elm Architecture'를 Go에서 구현한 라이브러리인데, 상태(Model)와 뷰(View), 업데이트(Update) 로직을 깔끔하게 분리해 줍니다. 덕분에 터미널 앱임에도 불구하고 굉장히 세련되고 반응성이 좋은 UI를 만들 수 있죠.

Spacelist의 동작 원리는 꽤 단순하면서도 효율적입니다. 내부적으로 다음과 같은 흐름을 탑니다.

  1. 명령어를 실행해 모든 작업 공간을 가져옵니다.

  2. 각 작업 공간마다 를 호출해 창 정보를 수집합니다.

  3. 이 데이터를 Go 구조체로 매핑한 뒤, Bubble Tea를 통해 리스트 형태로 렌더링합니다.

  4. 사용자가 선택하면 Aerospace에 해당 창으로 포커스를 이동하라는 명령을 보냅니다.

복잡한 시스템 API를 직접 건드리는 대신, 기존 CLI 도구(Aerospace)의 출력을 파싱해서 UI만 씌운 래퍼(Wrapper) 형태인 셈입니다. 우리가 흔히 레거시 시스템 위에 모던한 API 게이트웨이를 붙이는 전략과 비슷해서 묘한 동질감이 느껴졌습니다.

설치 및 트러블슈팅

설치는 맥 사용자라면 익숙한 Homebrew를 사용하면 됩니다.

brew install magicmark/tap/spacelist

다만, 설치 직후 바로 실행하면 맥의 보안 정책 때문에 실행이 차단될 수 있습니다. "개발자를 확인할 수 없다"는 팝업이 뜨며 실행이 안 되는 경우죠. 저도 처음에 당황했는데, 터미널 도구를 설치할 때 종종 겪는 일입니다.

이때는 당황하지 말고, 애플의 격리 속성(quarantine)을 제거해 주면 됩니다.

xattr -d com.apple.quarantine /opt/homebrew/bin/spacelist

이 명령어 한 줄이면 해결됩니다. (물론 경로는 본인의 Homebrew 설치 위치에 따라 다를 수 있으니 로 확인해 보세요.)

마무리하며

도구 하나 바꾼다고 개발 실력이 갑자기 늘지는 않습니다. 하지만 개발자 경험(DX)은 확실히 좋아집니다. 반복되는 컨텍스트 스위칭 비용을 줄이고, 키보드 위에서 손이 춤추듯 작업할 수 있게 해주니까요.

Spacelist는 거창한 기술이 들어간 소프트웨어는 아닙니다. 하지만 자신이 사용하는 도구(Aerospace)의 불편함을 해소하기 위해 적절한 기술(Go, Bubble Tea)을 사용해 해결책을 만들어낸, 아주 모범적인 사이드 프로젝트 사례라고 생각합니다.

혹시 여러분도 매일 반복하는 비효율적인 작업이 있나요? 이번 주말에는 불평만 하는 대신, 직접 작은 스크립트나 TUI 도구를 만들어보는 건 어떨까요? 생각보다 훨씬 재미있고, 꽤나 유용할 겁니다.

오늘도 즐거운 코딩 하세요.

지금 읽으신 내용, 귀사에 적용해보고 싶으신가요?

상황과 목표를 알려주시면 가능한 옵션과 현실적인 도입 경로를 제안해드립니다.