TIP: 개발자의 생산성을 200% 끌어올리는 "앱 전환 단축키"

김민상·2021년 9월 27일
11
post-thumbnail

서: 시간 아끼기

소프트웨어 개발자는 일반적인 사용자들과 비교할 때 훨씬 많은 수의 툴들을, 훨씬 높은 빈도로 오갑니다.

VSCode/SublimeText에서 코드를 타이핑하고, 구글에서 레퍼런스를 찾고, iTerm에서 명령어를 실행하고, 로그를 확인하고, DB툴에서 쿼리를 날렸다가, 듣던 음악을 넘기다가, 볼륨을 줄였다가, 트렐로를 확인하고, 잔디/슬랙에 온 메세지를 확인하고, 메일 확인도 했다가, 일정도 보고, 제플린 열어서 디자인을 체크하고, 시뮬레이터도 열었다가, CPU/메모리 사용량도 확인했다가, 노트앱에서 기억할 것을 정리했다가 등등등.

저만 그런가요? ㅋㅋ (image: 지니뮤직)

개발자는 참 자기 시간을 아까워하는 사람들입니다. IDE의 단축키들을 꼬박꼬박 외워쓰고, 부족하면 익스텐션이라도 찾아서 쓰고요. 자주 사용하는 코드의 모양은 스니펫을 만들어 두고, 쓸모가 많은 코드는 모듈화 해두었다가 재사용을 하기도 하고요. 복잡한 커맨드는 Alias를 지어두고, 자주 사용하는 일련의 작업들은 배치 스크립트를 만들지요.

하지만 하루에도 수십-수백번 앱 사이를 오가는 시간들은 어떻게 줄이고 계신가요? 지금보다 더 효율적인 방법은 없을까요?

일반적인, 아주 일반적인.

저는 이런 방법들을 사용해왔고, 지금도 필요에 따라 사용하고 있습니다.

1. Cmd+Tab / 마우스

대부분의 일반 유저가 사용하는 방법이죠? 딱 두가지 앱만 사용할 땐 Cmd+Tab의 효용성이 있지만, 개발자가 쓰는 앱이 어디 한두개인가요? 길게 누르면 좌우로 (Shift를 같이 누르면 왼쪽으로) 오갈 수 있긴한데, 이렇게 길어지면 포기할 수밖에 없는 방법입니다.

2. Expose(Mission Control) + 마우스

맥 유저에게 미션 컨트롤은 필수품입니다. 맥북에는 F4 자리에 바로 열 수 있는 키가 있고, 트랙패드를 쓰리핑거 스와이프-업, 매직마우스를 쓰면 투핑거 터치로 열립니다. 앱의 화면이 직관적으로 보이는 점 때문에 한 앱에서 여러개의 창을 열어놨더라도 원하는 창을 찾기가 쉽죠.

3. Spotlight/Alfred

저는 Spotlight가 OSX에 들어오기 전부터 맥을 사용했습니다. 그 당시엔 지금의 Spotlight와 거의 동일한 기능을 제공하는 Quicksilver 라는 킬러앱이 있었지요.

그 이후에는 같은 기능을 제공하지만 훨씬 더 파워풀한 기능을 갖춘 Alfred 앱의 Powerpack License 유저가 되었습니다. 이걸로 몇년을 별 불만없이 써왔고, 지금도 '아주 가끔 쓰는 앱'은 이 방식을 사용합니다. 그러다가 문득 의문이 들었어요. "왜 내가 매일 오가는 앱들을 2뎁스로 타이핑해서 들어가야하지?"

"핫키"를 고민하다.

Function Key 들을 활용해볼까?

당시 저는 Windows 레이아웃의 키보드를 쓰고 있었고, 대부분의 Windows 레이아웃의 키보드들은 맥 레이아웃과 다르게 fn키를 누르지 않고 F1~F12키를 사용할 수 있습니다. 그래서 이 펑션키들에 자주 사용하는 앱으로 '바로 가는' 기능을 할당해서 써보면 어떨까 생각해봤어요.

이건 OSX에서 기본으로 제공하는 '단축키'로도 가능은 한데, 우선 Automator로 사용할 앱을 실행하는 workflow를 짜두고, 이걸 설정-키보드-단축키 메뉴에 들어가 할당하는 방식을 쓰게 됩니다. (참고 링크: How to create keyboard shortcuts to launch apps in macOS using Automator)

한마디로, 너무 귀찮아요ㅠ

BetterTouchTool (BTT)

그래서 그 대안으로 찾은 앱이 BetterTouchTool 입니다. 45일의 무료 사용을 제공하고, 2년 $9.99 / LifeTime $21.99의 라이센스를 판매하는 유료앱이에요. 개인적으로 단순히 단축키 할당 외에도 굉장히 다양한 편의 기능을 제공하는 앱이기 때문에 이 가격이 매우 저렴하다고 생각하고 있습니다. (BTT와 저는 아무 관계가 없어요ㅋ)

어쨌든 그렇게 시도했고, 결과는 성공적!

https://twitter.com/minsangk/status/1266186430495158272

하지만 오랜 시간이 지나지 않아 단점이 발견되었습니다. 우선 펑션키의 숫자가 부족합니다. 실제로 높은 빈도로 사용하는 몇 개는 빼두고 나머지만으로 앱을 하나씩 할당하다보니 갯수가 모자랐습니다. 두번째로, 내가 어떤 앱에 어떤 키를 할당했는지 기억이 잘 안 나는 문제가 있었어요. 펑션키 숫자와 할당한 앱과의 상관관계 따위가 있을 리가 없으니까요.

F8 키와 Chrome 의 상관관계를 서술하시오. (5점)

하지만 적응에 오랜 시간을 써서 어느 정도 즉각적으로 칠 수 있을만큼 숙달은 되었는데, 물리적으로 숫자가 부족한 문제는 해결할 길이 막막했습니다.

개발자용 핫키-패드.

없다면? 만들어보자!

물리적으로 숫자가 부족하다면? 물리적으로 이 역할을 담당할 키보드를 추가로 만들어 보고싶었습니다.

별도의 단축키패드가 생긴다면?

  1. 내가 원하는 숫자만큼 꽉꽉 채워 할당할 수 있고,
  2. 메인 키보드를 바꿔도 이질감이나 별도의 셋팅이 필요 없을 것이고, (키감 때문에 키보드를 자주 바꿔쓰는 편)
  3. 라벨링까지 해서 GANZI도 좀?ㅋㅋ

처음엔 딱 맞는 사이즈의 한손키보드를 기웃거리다가,

https://twitter.com/minsangk/status/1331206706206969865

결과적으로는 저렴한 키패드를 구매하여, 키캡 교체 후 라벨링을 진행했습니다. 해놓고는 엄청 뿌듯뿌듯ㅋㅋ

https://twitter.com/minsangk/status/1332593101903257603

직접 사용해보는 영상 https://twitter.com/minsangk/status/1332600547333992450

이걸로 끝- 이면 좋았을텐데.

이래저래 공을 많이 들였는데, 막상 써보니 생각보다 그렇게까지 좋진 않았어요. 보통 이런 별도의 핫키패드는 포토샵/영상편집 하시는 분들이 많이 쓰시는데, 개발자는 그분들보다 훨씬 더 많은 상황에 두손이 키보드 정위치에 있어야 한다는 것을 깨달았거든요ㅠ

정위치에 있던 두 손이 핫키패드로 향할 때마다 버벅댈 수 밖에 없고, 돌아오느라 시간을 쓰니, 이게 별로 효율적이지 않았던 것이죠. 처음엔 적응의 문제로 생각하고 애썼는데, 몇 달을 써도 나아지지가 않았습니다.

듀얼 키보드?

이 글을 보게 되었고

https://twitter.com/GeekNewsBot/status/1441217077780512769

재밌어보여서 시도도 해봤습니다.

https://twitter.com/minsangk/status/1441228409254780930

"동일한 키보드를 2개 사용하게 되면 그 가운데에 있는 키들을 펑션키 대신으로 활용할 수 있지 않을까?" 라는 기대를 가지고, 시도해 본 것이었는데, 역시 이것도 해답이 될 수는 없었습니다.

자세를 흐트러뜨리는 문제는 동일하며, 더 큰 문제는 핫키 할당 자체가 쉽지 않다는 것. 두개의 키보드의 조합키들을 같이 활용하려면, 이 두개를 하나의 키보드처럼 싱크해주는 작업이 필요한데, (Karabiner-Elements) 이럴 경우 왼쪽/오른쪽 키보드의 나머지 영역을 활용할 방도가 없어지거든요. (이미 합쳤으니까)


https://twitter.com/minsangk/status/1441569794633863168

최적해, HyperKey.

HyperKey?

듀얼키보드 삽질 과정을 거치면서, Karabiner-Elements에 Complex Modifications 를 라는걸 알게 되었습니다. (https://ke-complex-modifications.pqrs.org/) 기본적으로 이 앱은 UI로 단순 맵핑을 제공하는데, 이 수준을 넘어가는 복잡한 룰들을 사용자가 업로드하고 이를 모아둔 저장소 개념이라고 보시면 됩니다.

여기서 가장 인기있는 룰 중에 하나가 바로 "CapsLock ⇒ HyperKey" 룰. 근데 HyperKey가 뭐죠?

그렇게 구글링해서 가장 먼저 나온 글이 바로- BTT Docs - HyperKey 였고, 공교롭게도 제가 이미 핫키 맵핑을 위해 사용하고 있는 툴인 BTT의 가이드 문서였습니다.

HyperKey란 쉽게 말해 모든 Modifier Keys (Shift + Cmd + Option + Ctrl) 를 한번에 누른 상태의 키 조합을 말합니다. 더 정확히 말하면, 그 키들이 모두 눌린 상태를 만들 수 있는 하나의 키를 뜻한다고 볼 수 있어요. 그 어떤 다른 앱의 고유 단축키와도 겹치지 않고, 그러면서도 한 개의 키만으로 간편히 사용할 수 있는, 그런 키.

CapsLock, 너로 정했다.

그럼 어떤 키를 HyperKey로 할당하면 좋을까요? 단축키의 조합키로 사용해야하니 손가락이 꼬이지 않는 좋은 자리에 있으면서도, 그 자체로는 별다른 쓸모가 없는 친구, 누구 있죠?

개인적으로는 크게 고민할 질문이 아니었습니다. 당연히 가장 쓸데 없는 CapsLock 키. 올드맥 유저라서 한/영 전환은 Cmd+Space가 세상 제일 편하고, 영문 대문자도 Shift 눌러서 치는게 익숙하고 빠른데, 도대체 이 좋은 자리에 이 친구가 왜 박혀있는걸까요? HyperKey로 쓰라는 배려였을까요?ㅋㅋ

BTT에 설정하기

위의 링크된 설명글이 BTT의 가이드였던만큼, BTT 자체 기능으로 손쉽게 Caps Lock을 HyperKey로 맵핑할 수 있었습니다. 그리고 기존에 키패드에 할당해놨던 BTT의 모든 앱 전환 단축키를 "HyperKey + 알파벳" 조합으로 변경!

저에게는 별로 쓸모가 없었지만, Named Trigger 기능을 통해 다른 키와 조합되지 않았을 때 (단독으로 눌렸을 때) 별도의 기능을 할당하는 것도 가능합니다. ESC가 없는 맥북 터치바를 쓰신다면 ESC로 할당하셔도 좋고, 원래 CapsLock 본래 용도를 충실히 쓰셨던 분이라면 그렇게 사용할 수도 있다는 뜻.

며칠간 이 방식을 사용해 본 결과, 너무 좋습니다. 더이상의 대안이 없을 정도🥰.

조합키니까 십수개 이상을 할당해도 자리가 남고, 아무 의미없는 펑션키 대신 각 앱에 맞는 알파벳을 맞춰 누르는 방식이다보니 직관적으로 빠르게 적응이 되었습니다. 정말 사용빈도가 높은 앱들은 왼손 하나로 입력 가능하게 셋팅하니 더욱 좋네요. (Chrome은 Hyper+Space 조합인 식)

물론, 제가 원래 사용하고 있던 몇가지 문제들 때문에 이 과정이 모두 매끄러웠던 것은 아니었고, 아래와 같은 문제들을 겪었습니다🥲.

Trouble Shooting

보조키 변경 / 윈도우 레이아웃

제가 보유한 키보드들 중에는 '맥 레이아웃' 자체를 지원하지 않는 (윈도우 레이아웃이 고정된) 키보드가 많습니다. 이 경우 OSX의 키보드 - 보조키 설정을 통해 보조키들을 리맵핑해서 사용하는데요. 거기에 더해 HHKB 레이아웃처럼 CapsLock키를 Ctrl로 리맵핑하여 사용하고 있었습니다.

이렇게 보조키 설정을 해놓은 경우 BTT의 CapsLock ⇒ HyperKey 설정이 정상적으로 동작하지 않았습니다. 키보드의 실제 CapsLock키 (리맵핑 된 키는 Ctrl키인데) 를 누르면 HyperKey로 인식을 하는 문제가 발생한 것이죠. 드라이버단에서 컨트롤하는게 아니라 Key Down/Up이 서로 다른 키코드로 인지되어 생기는 문제로 추정만 될 뿐 BTT 안에서 해결책을 찾을 수 없었어요.

여러 삽질 끝에 Karabiner-Elements 를 통해 답을 찾았습니다.

여기서 보조키 리맵핑을 하고,

CapsLock to HyperKey 설정을 하면, 끝.

해피해킹(HHKB) 레이아웃

마지막으로, HHKB의 경우 일반적으로 CapsLock이 있는 자리에 Control키가 있고, CapsLock 키가 존재하지 않습니다. (아예 없는건 아니고, fn+Tab을 눌러야 동작하는 방식이라 조합키로 사용이 불가능합니다)

그래서 여기서는 CapsLock 대신, 사용빈도가 거의 없는 오른쪽 Cmd키를 CapsLock으로 리맵핑하였고, 문제없이 잘 동작합니다. HHKB의 이상한(ㅋㅋ) 레이아웃도 적응했는데, HyperKey 위치 적응 정도야ㅋㅋ

마무리: 생각의 리듬

서론에 썼던 것처럼, 대부분의 개발자들은 단순 반복적인 작업에 시간을 낭비하는 것을 병적으로 싫어합니다. 그런데 그거, 왜 그럴까요? 사견입니다만, 개발자는 "생각의 리듬"이 정말 중요한 사람들이라서 그런게 아닐까 싶어요.

머릿속에 파편화 된 지식들과 지금 당장 찾아서 머리에 들어온 지식들을 논리적으로 잘 정렬시키고, 그 논리를 코드로 정리하여 써내려 간 뒤, 그 코드의 결과물(출력 결과, 로그 등)을 통해 다음 논리에 접점을 붙이는 일. 이 피드백 루프는 짧으면 짧을수록 리드미컬해지고 그런 유려한 리듬 속에 작업을 할 때는 굉장히 신이 납니다.

"야 다음! 그 다음! 너! 뒤에 너! 앞에 너 틀렸어, 다시! 저 멀리 걔 누구였지? 아 그래 너! 중간에 빨랑 껴! (아 여기는 세가지 선택지인데...) 일단 첫째부터! 두두두! 아 이건 글렀다 패스! 두번째 가즈아! ..."

: 개발할 때 머릿속에 이런 그림이 벌어지지 않나요?ㅋㅋ

자의든 타의든, 사람 때문이든 기계 때문이든, 이 피드백 루프가 늘어지면 급격히 재미가 없어지고 반복되면 짜증이 나지 않나요? 다른 이유 때문에 리듬이 늘어지는 건 어쩔 수 없지만, 적어도 내가 하는 작업 내에서의 텐션은 조금 더 빳빳하게 만들 수 있을 것 같아요.

저는 이 깨알팁이 더 "리드미컬하게" 개발하는 데에 도움이 되었습니다.

이 글이 여러분들의 리듬 또한 들썩거려주길 바랍니다!

profile
Bysuco CTO

4개의 댓글

comment-user-thumbnail
2021년 9월 28일

윈도우즈와 리눅스 데스크탑(Gnome, Unity는 확인했고 KDE는 모르겠네요)에서는 Win(Super) + 숫자키 조합으로 독에 있는 앱을 열거나 전환할 수 있는데 맥은 그런 기능이 기본적으로 아예 없는 것인가요?
Function 키에다가 앱을 할당하는 부분을 보니 너무 의문이 들었습니다.

1개의 답글
comment-user-thumbnail
2022년 9월 28일

진짜 긴 여정을 거치셨네요. ㅋㅋ
저도 이런 세팅 편하게 만드는거 좋아해서 게이밍키패드도 사고 태블릿에다가 마우스 양쪽에 하나씩 놓고 양손으로 쓰면서 태블릿까지 갖다놓고 별에별짓들을 다했는데.....
윈도우에서는 그냥 씽크패드 트랙볼이 정답이라는 결론을 내렸습니다. 비미움이나 런치 스트로크잇같은거 몇달에 걸쳐 세팅해놓은 후에 씽크패드 노트북 키보드를 쓰니 팜레스트에 손을 올려놓고 손가락만 까딱까닥 거리면 되지 트랙패드까지 손이 갈일 자체도 없어졌습니다.
그런데 문제는 윈도우 노트북은 가끔 쓰고 맥북을 쓴다는거....알프레드나 btt같은 걸로 열심히 세팅을 해보는데 어떻게 하든 맥북은 손이 트랙패드에 왔다갔다 해야하니 씽크패드의 효율은 뭔수를 해도 못따라오더군요.
그냥 포기하고 그 시간에 생산성 있는 일을 하기로 했습니다.
씽크패드 키보드를 맥북에 붙여 놓으면 진짜 최강일거 같은데

답글 달기
comment-user-thumbnail
2023년 4월 12일

HyperKey라는 개념이 마음에 드네요! 저는 그대로 받아들여서 모든 키를 직접 손가락으로 눌렀었는데 그 대신 하나의 키를 할당해서 사용한다니 정말 간단하면서도 완벽한 방법 같습니다. 저도 빨리 셋팅하러 가야겠어요. 경험을 공유해 주셔서 정말 감사합니다!

답글 달기