brunch

You can make anything
by writing

C.S.Lewis

by 영춘 Sep 25. 2023

작업 공간 조직하기

나만의 Mise en Place

여는 글

책 "일의 감각"을 보다가 "미장 플라스 Mise en Place"라는 단어를 발견했습니다. 요리를 만드는 셰프들이 사용하는 프랑스어 단어인데 그 뜻 자체로는 "제자리에 두기", "모든 것들이 제 위치에" 정도로 생각할 수 있습니다. 일을 시작하기 전 재료를 손질해 정해진 곳에 두고 도구들 역시 정해진 장소에 두는 일을 말합니다. 업무의 효율을 위해 수행하는 사전작업이죠. "미장 플라스"를 수행함으로써 요리에 필요한 단계들을 효율적으로 진행할 수 있고 혹시 발생할 수 있는 실수 혹은 사고를 줄일 수 있습니다. 재료들 역시 정해진 곳에 준비되어 있으므로 필요할 때 고민 없이 이용할 수 있습니다.


"미장 플라스"는 비단 요리 분야에만 국한되지는 않습니다. 이렇게 이름 붙이지 않아도 이미 많은 영역에서 많은 사람들이 자신만의 규칙과 기준을 세운 다음 작업 환경을 만들어 사용하고 있을 겁니다. 그렇다면 우리 소프트웨어 엔지니어 역시 미장 플라스가 필요하겠지요?


적합한 도구 갖추기

소프트웨어를 작성하는 일은 다양한 종류의 작업이 뒤섞여있고 그만큼 다양한 도구가 필요합니다. 작성할 소프트웨어의 구조를 설계하고 문서로 남기는 작업이 필요하고 실제 구현 단계에서는 필요한 정보를 탐색하고 정리해야 합니다. 소스 코드를 작성하며 컴파일이 필요하면 컴파일을 수행, 인터랙티브 한 수행이 필요하면 인터프리터를 실행합니다. 작성한 코드의 버전 관리를 위해 종종 코드 저장소로 코드를 올리고 동료들의 코드를 리뷰해야 합니다. 작성한 코드를 실행하기 위해 필요한 인프라를 준비하고 실제 제품을 운영 중이라면 운영 인프라의 건강도 확인해야 합니다.


이런 작업들을 수행할 때 어떤 어려움들이 있을까요? 당연한 이야기겠지만 작업에 어울리지 않는 도구를 사용하면 효율이 떨어집니다. 소프트웨어를 작성할 때 코드 하이라이팅 기능이 없거나 실시간 문법 오류 체크, 정의로 이동 등의 기능이 없다면 필요한 정보를 제때 얻을 수 없습니다. 적합한 도구들을 사용하더라도 다양한 작업 사이의 전환이 어려울 수 있습니다. 이를테면 웹브라우징을 하다가 터미널로 이동하여 프로그램을 실행하고 다시 슬랙 같은 메시징 화면으로 이동하여 의견을 나누는 등 작업 사이의 전환이 수차례 발생합니다. 마지막으로 작업을 수행하거나 전환할 때 발생하는 인지 비용이 있습니다. 매번 새로운 창이 새로운 곳에 존재한다면 그곳으로 이동하는 일에 정신적 에너지를 사용할 수밖에 없습니다.


요리에서의 미장 플라스는 재료들을 잘 손질하여 언제든지 이용할 수 있게 해 두고 도구들을 제자리에 두는 것이라면, 소프트웨어 작성의 미장 플라스는

- 적합한 도구를 선택하고

- 다양한 작업 사이의 전환 비용을 줄이며

- 작업 수행과 전환에 필요한 인지적 부하를 줄이는

행위들이라고 볼 수 있습니다.


필자의 작업환경 예시

이번엔 하나의 예시로 제 작업 환경을 소개드리겠습니다.


저는 백엔드 엔지니어링을 주된 업무로 하고 있습니다. 이런 이유로 대부분의 작업은 터미널을 통해 수행합니다. 약간 구닥다리 같지만 코드 편집기와 문서 작성도 Emacs 편집기를 사용하고 있습니다. 이렇기 때문에 쾌적한 터미널 사용환경이 필요한데 여기 몇 가지 도구를 활용하고 있습니다.


iTerm

먼저 데스크톱 (iMac) 환경에서는 iTerm을 사용합니다. 저는 리눅스 환경을 더 오래 사용해 왔는데 거기서 Guake, Tilda 같은 도구를 사용했습니다. 단축키를 이용하여 터미널 창을 표시했다가 숨겼다 할 수 있는 토글 기능이 있어 웹 브라우징을 하거나 메시징을 하다가도 필요하면 바로 터미널을 띄워 작업을 이어나갈 수 있습니다. iTerm 역시 단축키 기능이 있어 키 하나로 터미널 접근을 할 수 있습니다.


tmux

터미널을 그대로 사용하면 창을 여러 개 띄워야 하는 불편함이 있습니다. 이 경우 tmux, Terminal Multiplexer를 사용하면 도움이 됩니다. 세션과 창 등의 개념을 도입하며 다수의 터미널을 생성하고 조작할 수 있습니다. 화면을 분할하거나 옮기고 크기를 조정할 수 있는데 저는 세션과 창을 활용하여 작업 공간을 구분해서 사용하고 있습니다. 이를테면 사내 특정 프로젝트를 위한 세션이 있고 그 세션엔 코드 편집, 코드 실행, 코드 버전 컨트롤, ipython 등 인터랙티브 한 실행, Kubernetes 조작 등의 기능을 위한 창들이 구분되어 있습니다. 따라서 필요한 작업이 떠오르면 그 위치로 이동하면 바로 작업을 수행할 수 있습니다.


fzf

이 도구는 오래전부터 들어오긴 했는데 실제 사용해 본 건 얼마 전부터입니다. 단순히 퍼지 매칭으로 파일을 찾아주는 도구인가 싶었는데 활용해 보니 터미널 생활자에겐 필수적인 도구입니다. 기본적으로 파일 혹은 디렉터리를 쉽게 찾을 수 있는데 제가 더 자주 사용하는 기능은 터미널에서 수행했던 명령을 검색하는 기능입니다. 종종 과거 명령을 찾다가 실수로 엉뚱한 작업을 수행하는 경우가 있었는데 (마음보다 손이 먼저 움직여서) fzf를 사용하니 더 정확하게 명령을 찾고 사용할 수 있습니다. 게다가 제가 요즘 사용하는 Fish shell에서는 명령 검색 기능이 시원찮은데 fzf를 같이 사용하니 날개를 단 듯 터미널 사용 효율이 크게 증가했습니다. fzf는 다양한 입력을 대상으로 Fuzzy 검색을 수행할 수 있는데 저는 터미널에서 사용하는 ipython에도 적용해 두었는데 예전에 사용한 코드들을 쉽게 불러올 수 있어 역시 작업 효율이 증가했습니다.


mosh

자신에게 맞는 작업환경을 만들어도 사용하는 컴퓨터가 바뀌면 다시 환경을 만들어야 합니다. 그래서 저는 하나의 환경을 만들어두고 자리에서 벗어나야 하는 경우 원격 접속하여 작업을 이어 나갑니다. 주로 이동 시엔 iPad를 사용하는데 Blink라는 앱을 통해 원격 접속할 수 있습니다. 이때 SSH 클라이언트를 사용할 수도 있지만 연결이 자주 끊어졌다가 이어지는 모바일 환경에서는 Mosh, Mobile Shell이 더 편합니다. Mosh에서는 UDP 프로토콜을 사용하여 암호화된 세션 패킷을 주고받는데 일시적으로 인터넷 연결이 끊어지는 상황이 와도 나중에 다시 연결이 회복되면 터미널 접속 역시 회복됩니다.


Emacs

소프트웨어 엔지니어의 무기라 할 수 있는 도구는 단연 코드 편집기 일 것입니다. 동료들을 보면 Visual Studio Code를 주로 사용하는데 저는 제 손에 더 익은 Emacs 편집기를 사용합니다. Emacs는 FSF, Free Software Foundation을 만든 리처드 스톨만이 제작했으며 Editing Macros의 준말이라고 합니다. Emacs는 내부적으로 Emacs Lisp 언어를 지원하는데 에디터의 기능을 설정하거나 확장할 때 사용할 수 있습니다. Emacs 안에서 파일 탐색, 터미널 실행, 원격 컴퓨터 접속, 메시징, 이메일, 웹브라우징, 게임 등의 활동을 할 수 있어 마음만 먹으면 Emacs를 떠나지 않고 대부분의 작업을 수행할 수 있습니다. 이는 Emacs의 강력한 확장성 때문인데 반면 Vim 같은 다른 코드 편집기에 비해 무거운 단점이 있습니다. 비단 Emacs가 아니라도 충분히 능숙하게 사용할 수 있는 코드 편집기가 있다면 작업 효율이 크게 증가합니다. 터미널 상에서 사용하는 코드 편집기의 특성상 마우스 사용은 거의 없으며 대부분 키보드 단축키를 사용하는데 익숙해지면 빠르게 소스코드를 탐색하고 편집할 수 있습니다. 앞서 설명드렸던 Tmux와 함께 활용하면 코드 편집 공간에서 실행 공간으로 손쉽게 이동할 수 있고 작업 변환에 들어가는 비용이 줄어듭니다.


Vimium

터미널 환경을 좋아한다고 해도 텍스트만 볼 것이 아니라면, 자바스크립트 지원을 포기할 것이 아니라면 그래픽 기반의 브라우저를 사용해야 합니다. 이때 사용할 수 있는 플러그인으로 Vimium이 있습니다. Vimium을 사용하시면 Vim key-binding을 이용하여 화면을 조작할 수 있습니다. 특정 링크를 눌러 이동한다거나 새로 검색을 한다거나 탭 사이의 이동을 하는 등 브라우저 기능의 대부분을 키보드 조작으로 수행할 수 있으므로 마우스와 키보드를 오가며 조작할 필요 없이 키보드만으로 웹브라우징을 할 수 있습니다.


작업 영역 조직하기

제가 Tmux의 세션과 창을 사용하여 터미널 환경을 조직하듯 터미널 바깥의 화면들도 질서 있게 사용할 수 있습니다. 현재 iMac을 사용하고 있는데 가상 데스크톱 화면을 3개 만들어 사용하고 있습니다. 각각의 화면엔 나름의 기준으로 분류된 웹브라우저 창들이 떠 있는데, 첫 번째 화면은 사내 업무를 위한 공간입니다. 슬랙과 이메일, 캘린더, 노션 등 동료들과 소통하거나 정보를 저장하고 조회하기 위한 공간입니다. 두 번째 화면은 메인 작업을 위한 공간입니다. 코드를 작성하기 위해 참고해야 하는 자료들을 검색하거나 업무 관련된 노션 문서 등을 띄워 참고합니다. 한쪽 창엔 ChatGPT도 있어 작업을 거들어 줍니다. 마지막 세 번째 화면은 코드 리뷰와 제품 테스트를 위한 공간입니다. Github Pull Request를 확인하는 창, 제품 프런트엔드 페이지, Airflow 화면, Grafana Dashboard 등 모니터링을 위한 페이지가 떠 있습니다. 이들은 모두 웹브라우저 안에 존재하는 웹페이지인데 앞서 소개드린 Vimium에 같이 들어있는 Vomnibar를 사용하면 쉽게 원하는 창으로 이동할 수 있습니다.


단축키 입력을 위한 미니 키보드

지금까지는 주로 소프트웨어 도구를 소개해드렸는데 제겐 단축키를 위한 작은 키보드도 있습니다. 조그 다이얼 하나와 버튼 6개가 달린 키보드인데 각각의 물리 키를 여러 키 조합으로 맵핑할 수 있습니다. 이를테면 물리버튼 1번은 Ctrl + Alt + T의 키입력을 발생시키는 식입니다. 운영체제의 단축키 설정 혹은 외부 프로그램을 이용한 단축키 설정과 함께 사용하면 작업 효율을 높이는데 도움이 됩니다. 저는 조그 다이얼은 가상 데스크톱 화면을 전환하는 데 사용하고 물리버튼은 브라우저 탭에서 좌우 이동을 하거나 창의 위치와 크기를 미리 정해둔 형태로 바꾸는 데 사용합니다. 업무 중 어떤 작업과 행동이 빈번한지에 따라 각자 입맛에 맞게 설정하면 됩니다.


정보를 조회하고 기록하는 디지털 공책

마지막으로 아이패드를 어떻게 사용하고 있는지 소개해드리겠습니다. 업무를 진행하며 업무 내용을 기록해두고 있는데 이렇게 하면 나중에 필요한 순간에 큰 도움을 얻을 수 있습니다. 예전엔 Emacs을 띄워두고 org-mode를 사용해 기록했었는데 요샌 Obsidian 앱을 이용하고 있습니다. 기록물 사이의 관계를 생각하고 문서 사이의 이동 측면에서 Obsidian 앱이 더 편리합니다. 곧 모니터 옆에 둔 아이패드는 일종의 디지털 공책의 역할을 하여 작업 중간중간 기억해 둘 내용을 적는 공간이 됩니다. 또한 ChatGPT 또한 아이패드를 통해 참고하는데 정보의 기록과 조회에 특화시킨 작업공간, 스크린이라고 보면 되겠습니다.


닫는 글

자 이것으로 소프트웨어 엔지니어의 미장 플라스에 대해 알아보았습니다. 미장 플라스는 업무 환경과 업무 내용에 따라 유연하게 바뀌겠지요? 모두 재료 준비와 도구 정리를 잘하여 멋진 요리를 손 베이지 않고 즐겁게 만들 수 있길 바랍니다!

작가의 이전글 코드 편집기의 필수 요소
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari