
맥을 쓰다 보면 은근히 스트레스 받는 순간이 있어요. 모니터 한쪽엔 IDE를, 다른 쪽엔 터미널과 브라우저를 띄워두고 싶은데요, 창 모서리를 하나하나 끌어서 크기를 맞추다 보면 몇 분이 그냥 사라지거든요. 윈도우에는 Win+화살표 키로 창을 화면 반쪽에 붙이는 스냅 기능이 오래전부터 있었어요. 반면 macOS는 꽤 오랫동안 이런 기본 기능이 부족했어요. 그래서 맥 개발자들의 ‘새 맥 세팅 체크리스트’에는 창 관리 앱이 거의 항상 하나씩 들어가 있죠.
GridSnap은 이 영역에 새로 나온 오픈소스 프로젝트예요. 소개 문구 그대로 ‘Divvy 스타일’ 창 스내퍼인데요, Divvy를 안 써본 분들도 있을 테니 이게 어떤 방식인지부터 풀어볼게요.
Divvy 스타일이 뭐냐면
대부분의 창 관리 앱은 ‘왼쪽 절반’, ‘오른쪽 절반’, ‘4분할 중 왼쪽 위’처럼 미리 정해둔 배치에 단축키를 하나씩 붙여두는 방식이에요. 편하긴 한데요, ‘화면 왼쪽 3분의 2를 쓰되 위쪽은 살짝 비워두기’ 같은 애매한 배치는 할 수가 없죠.
Divvy 방식은 접근이 달라요. 단축키를 누르면 화면 위에 작은 격자판(예를 들면 6×6 칸)이 떠요. 여기서 원하는 칸들을 마우스로 쭉 드래그하면 지금 보고 있는 창이 딱 그 영역의 크기와 위치로 맞춰져요. 엑셀에서 셀 범위를 선택하는 느낌이라고 생각하면 쉬워요. B2부터 D5까지 드래그하듯이, 화면에서 ‘이만큼’을 손으로 지정하는 거죠. 프리셋을 외울 필요 없이 그때그때 원하는 배치를 바로 만들 수 있다는 게 가장 큰 매력이에요.
원조인 Divvy는 유료 앱인 데다 업데이트도 뜸한 편이에요. 그래서 같은 경험을 오픈소스로 쓰고 싶어 하는 사람이 꾸준히 있었고, GridSnap은 바로 그 빈자리를 노린 프로젝트예요.
이런 앱은 내부적으로 어떻게 동작할까
macOS에서 다른 앱의 창을 움직이려면 접근성(Accessibility) API를 써야 해요. 원래는 스크린 리더처럼 다른 앱의 화면 요소를 읽고 조작하는 보조 기술을 위해 만들어진 API인데요, 창 관리 앱들도 이걸 활용해요. 이런 앱을 처음 실행하면 ‘시스템 설정 > 개인정보 보호 및 보안 > 손쉬운 사용’에서 권한을 달라고 하는 게 바로 이 때문이에요.
이런 앱들이 동작하는 방식을 단순하게 정리하면 이래요.
1. 전역 단축키를 감지해요. 어떤 앱이 앞에 떠 있든 단축키가 먹혀야 하니까 시스템 수준에서 키 입력을 등록해둬요.
2. 투명한 오버레이 창에 격자를 그리고, 마우스로 드래그한 영역을 계산해요.
3. AXUIElement로 지금 포커스된 창을 가져와서 위치(kAXPositionAttribute)와 크기(kAXSizeAttribute) 값을 새로 지정해요.
말로는 간단한데 실제로는 함정이 꽤 있어요. 대표적인 게 좌표계 문제예요. 접근성 API는 화면 왼쪽 위를 원점(0, 0)으로 쓰는데, AppKit의 NSScreen은 왼쪽 아래를 원점으로 쓰거든요. 모니터를 여러 대 연결하거나 세로 모니터를 섞어 쓰면 계산이 꼬여서 창이 엉뚱한 화면으로 날아가는 버그가 생기는데, 이런 앱들의 단골 이슈예요. 메뉴 막대와 Dock이 차지하는 영역(visibleFrame)을 빼고 계산해야 하는 것도 챙겨야 해요.
경쟁 도구들과 비교하면
맥 창 관리 도구는 크게 세 갈래로 나눌 수 있어요.
- 단축키 프리셋형: Rectangle(Spectacle을 잇는 오픈소스 앱)이나 Magnet 같은 앱이에요. 정해진 배치를 키보드로 빠르게 적용하는 데 강해요.
- 격자 자유 선택형: Divvy와 이번에 나온 GridSnap이에요. 영역을 마우스로 직접 지정하니까 배치를 훨씬 자유롭게 할 수 있어요.
- 자동 타일링형: yabai, AeroSpace, Amethyst처럼 리눅스의 i3 같은 타일링 윈도우 매니저(창을 겹치지 않게 자동으로 나눠 배치해주는 프로그램)를 흉내 낸 도구들이에요. 창을 열면 알아서 화면을 나눠주니 강력하지만, 익숙해지는 데 시간이 걸려요. 게다가 yabai는 일부 기능을 쓰려면 SIP(시스템 무결성 보호)를 부분적으로 꺼야 해서 부담스러워하는 분도 많아요.
한국 개발자에게 주는 시사점
첫째, 당장 써볼 만해요. 특히 34인치 이상 와이드 모니터를 쓴다면 ‘IDE는 가운데 넓게, 양옆에 터미널과 문서’ 같은 배치를 자주 바꾸게 될 거예요. 이럴 땐 격자 드래그 방식이 프리셋보다 훨씬 유연해요.
둘째, macOS 네이티브 개발을 공부하는 교재로도 좋아요. 메뉴 막대에 상주하는 앱 구조, 전역 단축키, 접근성 권한 처리, 멀티 모니터 좌표 계산까지 실무에서 만날 법한 주제가 작은 코드베이스 안에 모여 있거든요. 맥 유틸리티를 직접 만들어보고 싶었다면 코드를 읽으면서 구조를 익혀보세요.
셋째, 권한에 대한 감각도 챙기세요. 손쉬운 사용 권한은 다른 앱의 화면을 읽고 조작할 수 있는 꽤 강한 권한이에요. 그래서 이런 도구가 오픈소스라서 코드를 직접 확인할 수 있다는 건 큰 장점이에요. 다만 직접 빌드했거나 서명·공증을 거치지 않은 바이너리를 받으면 Gatekeeper(맥의 앱 실행 보안 검사) 경고가 뜰 수 있어요. 출처를 확인하고 설치하는 습관은 기본이에요.
마무리
한 줄로 정리하면, GridSnap은 창 배치를 손으로 ‘그리는’ Divvy의 경험을 오픈소스로 가져온 맥 유틸리티예요. 거창한 기술은 아니어도, 하루에 수십 번 반복하는 동작을 줄여주니까 생산성 차이는 꽤 크게 느껴질 거예요.
여러분은 맥에서 창 관리를 어떻게 하고 계세요? 단축키파인가요, 마우스파인가요, 아니면 아예 타일링 매니저로 넘어가셨나요? 각자 쓰는 세팅을 공유해주시면 다른 분들께도 큰 도움이 될 거예요.
🔗 출처: Hacker News