프로그래밍은 단순히 코드를 작성하는 것이 아닙니다. 명확하게 생각하고, 업무를 체계적으로 정리하고, 일상적인 어려움을 극복하는 데 도움이 되는 도구가 필요한 총체적인 과정입니다. 수십 가지 도구를 수년간 실험해 본 결과, 제 작업 방식에 실질적인 변화를 가져온 도구는 단 세 가지뿐이었습니다. 이 도구들은 개발 프로세스를 가속화했을 뿐만 아니라, 더 깔끔한 코드를 작성하고 더 전문적인 사고를 할 수 있도록 도와주었습니다.

이러한 도구들은 전문 프로그래머에게만 있는 비밀 도구는 아니지만, 제대로 활용하는 방법을 알면 진정한 힘을 발휘합니다. 다음 글에서는 제가 프로그래머로서 일하는 방식을 바꾸어 놓은 세 가지 도구에 대해 알아보고, 이 도구들이 여러분에게도 어떻게 도움이 될 수 있는지 알아보겠습니다.
어쩌면 저처럼 호기심을 채우기 위해 새로운 소프트웨어에 대한 끝없는 갈증을 느끼실지도 모릅니다. 세상에는 유용한 애플리케이션들이 넘쳐납니다. 그중에는 여러분의 생각과 업무 방식을 완전히 바꿔놓을 만큼 강력한 애플리케이션도 있습니다. 프로그래머로서 저를 근본적으로 바꿔놓은 세 가지 도구를 소개합니다.
Neovim: 프로그래머의 꿈
Neovim은 기능, 확장성, 편집 용이성 등 모든 면에서 내가 원하는 환경을 정확하게 만들 수 있게 해주고 코드에만 집중할 수 있게 해주어 소프트웨어 개발자로서의 효율성과 경험을 향상시켜줍니다.
끝없는 조정과 사용자 정의 설정
Neovim은 VS Code 등 다른 코드 편집기와 유사한 고급 코드 편집 기능을 갖춘 고도로 사용자 정의 가능한 텍스트 편집기입니다. 모든 기능이 VS Code와 유사한 것은 아니지만, Neovim은 무한한 구성 가능성을 제공합니다.
Neovim은 포괄적인 플러그인 시스템을 갖추고 있으며, 새로운 플러그인이 끊임없이 추가되고 있습니다. 시스템을 끊임없이 수정하면서 프로그래밍 세계에 푹 빠졌습니다. 단순히 앱을 만드는 코드를 작성하는 것이 아니라, 앱을 개선하는 코드도 작성합니다. 문제가 발생하면 플러그인을 설치하거나 직접 코드를 작성할 수 있습니다.
간편한 편집
Neovim의 가장 큰 장점은 텍스트 편집의 편리함입니다. 생각 없이 단어를 이동하고, 변경하고, 삭제할 수 있어서 자유로움을 느낍니다. 그래픽 사용자 인터페이스(GUI)를 사용하는 기존 편집 방식은 복잡하고 번거로웠습니다. Neovim은 편집 과정 자체보다는 코드의 의미에만 집중할 수 있게 해 줍니다. 코드에 더욱 가까이 다가간 듯한 느낌이 듭니다. 편집 방식에 대해 생각할 필요 없이 제 아이디어가 페이지에 바로 나타납니다. 하지만 Neovim은 훌륭한 트리시터(Tree-sitter) 지원 기능을 제공하여 편집 과정을 크게 개선합니다.
트리시터는 상상할 수 있는 거의 모든 구조화된 텍스트(프로그래밍 언어, 마크업 태그, 심지어 Typst와 같은 특수 프로그래밍 형식까지)를 이해하도록 구성할 수 있는 독점 프로그래밍 언어입니다. 트리시터를 사용하면 사용자가 언어에 맞는 방식으로 텍스트를 조작할 수 있습니다. 예를 들어 다음과 같습니다.
- 탐색: 한 기능에서 다른 기능이나 해당 기능의 특정 부분으로 이동하는 것.
- 복사해서 붙여넣지 않고도 if-else 블록 전체를 선택하여 이동합니다.
- 복사하여 붙여넣지 않고도 함수의 매개변수를 바꿀 수 있습니다.
당신의 능력만이 당신이 할 수 있는 일을 결정합니다. Neovim에는 여러 가지 트리시터 구성(방언이라고 함)이 포함되어 있으며, 사용 가능한 구성은 이보다 훨씬 더 많습니다.
티켓 시스템: 티켓을 준비한 다음 취소하세요
대규모 프로젝트를 관리할 때 완료해야 할 모든 작업을 기억하는 것은 불가능합니다. 1000줄 미만의 작은 코드를 작성하면 바로 눈앞에 무엇이 있는지, 무엇을 작성하고 무엇을 작성해야 하는지 알 수 있습니다. 명확한 목표가 있고, 목표 달성의 끝도 보입니다.
여러 패키지, 저장소, 그리고 수만 줄에 달하는 대규모 프로젝트에서는 완료해야 할 작업 목록이 끊임없이 늘어나는 것을 추적하는 것이 불가능합니다. 심지어 작은 조정을 위해 패키지를 전환하는 것조차 집중력을 잃게 만드는 경우가 많습니다. 바로 이럴 때 티켓팅 시스템이 도움이 됩니다.
이 용어에 익숙하지 않은 분들을 위해 설명드리자면, 티켓팅 시스템은 작업 시스템과 유사합니다. 각 작업 항목은 버그나 기능 등 개별적인 문제를 설명하는 티켓입니다. 중요한 것은 이러한 티켓을 어떻게 정리하느냐에 달려 있습니다. 태그를 지정하거나 칸반 보드에 배치할 수 있습니다.
칸반 보드는 각 티켓의 상태를 나타내는 여러 개의 열로 구성됩니다. 저는 백로그, 다음, 진행 중, 완료 상태를 사용하는 것을 선호합니다. 칸반 보드 자체는 프로젝트나 목표를 나타냅니다. 예를 들어 "인증 구현"과 같은 것입니다. 각 티켓은 해당 목표에 기여하는 작은 작업 단위입니다. 예를 들어 "데이터베이스 테이블 생성"과 같은 것입니다. 티켓이 생성되면 "백로그" 열에 나타납니다. 티켓을 곧 처리해야 하는 경우에는 "다음" 열에 나타납니다. 나머지는 짐작하실 수 있을 겁니다.
시간이 지남에 따라 코드 작업을 하다 보면 현재 수정하는 데 너무 오랜 시간이 걸리는 문제를 불가피하게 발견하게 됩니다. 그런 다음 요청을 생성하고 태그를 지정한 다음, 특정 목표에 해당하는 경우 해당 칸반 보드에 추가합니다.

저는 보통 가까운 미래에 진행할 프로젝트(칸반 보드)를 1~2개 정도 열어두고 있습니다.
조언
너무 미리 계획을 세우면 회사의 유연성이 떨어지고 계획을 재정비하는 데 원하는 것보다 더 많은 시간을 낭비하게 됩니다.
프로젝트가 1~2주 이상 걸릴 경우 티켓팅 시스템을 사용하는 것이 필수적입니다. 이 시스템을 사용하기 전에는 하루를 시작할 때마다 코드를 멍하니 바라보며 다음 논리적 단계를 생각하곤 했습니다. 이는 프로그래밍 프로젝트를 체계적으로 구성하는 잘못된 방법이며, 작업을 미리 정리하면 끊임없이 미루는 습관에서 벗어날 수 있습니다. 미리 생각하고 코드에 집중할 수 있습니다.
GitHub은 훌륭한 시스템을 제공합니다. 칸반 보드가 있는 프로젝트 티켓은 프로젝트라고 합니다. 공개 프로젝트나 창고별 프로젝트를 만들 수 있습니다. 또한, 나중에 다룰 Org-Mode와 같은 유연한 메모 작성 시스템을 사용하면 작업 순서를 쉽게 변경할 수 있어 편리합니다. 하지만 다른 사람들과 협업하는 것도 가치 있는 일입니다.
Org-Roam: 고급 노트 작성 시스템
이전 섹션에서는 제목을 빠르게 재정렬하고, 태그를 지정하고, 심지어 할 일 항목으로 전환할 수 있는 Emacs 패키지인 Org-Mode에 대해 언급했습니다. Org-Mode는 수백 가지 기능을 갖춘 매우 방대한 패키지입니다. 6년 동안 사용해 왔지만, 아직 모든 기능을 다 익히지는 못했습니다.
Org-Roam은 Org-Mode를 기반으로 구축된 또 다른 Emacs 패키지입니다. Org-Mode는 기본적인 문서 레이아웃과 다양한 제어 기능을 제공합니다. Org-Roam은 차트에서 노트를 연결할 수 있는 연결 기능을 제공합니다. 이 시스템은 웹의 하이퍼링크와 유사하게 작동합니다.

프로그래머는 끊임없이 배우고 있습니다. 새로운 프레임워크, 라이브러리, 언어 등을 배우든, 이 모든 것은 수년이 걸리는 매우 광범위한 주제입니다. 이러한 기술에는 고유한 측면과 특징이 많기 때문에 학습이 완벽할 수는 없습니다. 배우는 모든 것을 기억하려면 개별 아이디어를 기억하기 쉬운 위치에 분류하는 효과적인 방법이 필요합니다. 기존의 노트 필기 시스템은 적합하지 않습니다. 대신 웹 페이지처럼 각 아이디어에 명확한 경계를 설정해야 합니다. 또한 노트를 빠르게 검색할 수 있는 방법도 필요합니다. Org-Roam은 이 두 가지를 모두 제공합니다.
작업 흐름은 사람마다 다르지만, 저는 아이디어별로 노트를 하나씩 만들고, 여러 노트에 링크를 달아 색인으로 활용합니다. 아래에서 간단한 예시를 확인해 보세요.

요약의 세부 사항은 실제 사례에서 더욱 유용합니다. 설명적인 요약은 학습한 내용을 이해하는 데 도움이 되며, 특히 노트를 정기적으로 복습할 때 더욱 유용합니다.
이런 접근 방식 덕분에 배운 모든 내용을 간결하고 체계적이며 객관적으로 파악할 수 있습니다. 나중에 이 노트를 다시 살펴보면 단 10분 만에 해당 주제에 대해 많은 것을 배울 수 있습니다. 기존의 노트 필기 방식과는 달리, 오랫동안 사용하지 않은 언어를 다시 읽어봐도 정보에 쉽게 접근할 수 있기 때문에 전혀 부담스럽지 않습니다.
더욱이 그래프 기반 노트 시스템은 양방향 링크를 지원합니다. 노트에서 특정 키워드를 강조 표시하고 다른 노트에 연결할 수 있습니다. 백링크라고 불리는 이러한 링크는 다른 노트에서 텍스트 블록을 보이게 합니다. 백링크는 오랫동안 묻혀 있던 정보를 드러내기 때문에 매우 효과적입니다.

오른쪽 버퍼는 현재 노트와 관련된 노트 조각을 나타냅니다(Emacs를 나타냅니다. 왼쪽 버퍼).
Org-Roam은 강력한 백링크 구축 기능을 제공하는 유일한 노트 필기 시스템은 아닙니다. 하지만 Org-Mode 패키지와 완벽하게 통합됩니다. 이 두 패키지를 함께 사용하면 제 할 일 목록과 개인 지식 기반을 통합할 수 있습니다.

위 스크린샷에서 보시다시피, Org-Mode에서 작업은 단순히 제목으로 표시되고, 앞에는 "TODO"라는 단어가 붙습니다. Org-Mode 패키지에 포함된 Org Agenda는 이러한 제목을 캡처하여 특수 버퍼에 표시합니다. Org-Roam도 사용하고 있으므로 Org-Roam의 다른 메모와도 연결할 수 있습니다.
사용하기 더 쉬운 다른 유사 시스템으로는 Obsidian과 Logseq가 있으며, 두 시스템 모두 효율적인 시스템을 원하는 사용자에게 적합합니다. Org-Roam과 Emacs는 프로그래머 등 맞춤형 워크플로를 원하는 사용자에게 적합합니다.
제가 Neovim을 선호하는 이유를 자세히 설명한 글이 있는데, 도움이 되실 수도 있을 것 같습니다. Obsidian을 노트 필기나 일기 쓰기에 활용하는 방법에 대한 글도 있는데, 둘 다 Obsidian을 처음 접하는 분들에게 좋은 입문 자료가 될 것입니다.
Org-Roam에 관심이 있으시면 방문해주세요. Org-Roam 페이지 자세한 내용은 홈을 참조하세요. 다음도 살펴보세요. Org-ModeEmacs를 처음 사용하는 경우 설정은 쉽지 않지만 둠 이맥스 이를 통해 프로세스가 훨씬 쉬워지고, 제가 가장 좋아하는 Emacs 배포판이 되었습니다.




