스크랩

"이거 알았으면 1시간 아꼈는데" — 개발 생산성을 바꾸는 작은 요령들

"이거 알았으면 1시간 아꼈는데" — 개발 생산성을 바꾸는 작은 요령들

한눈에 보는 핵심

엔지니어링 생산성은 거창한 아키텍처 설계보다 작은 지식 조각들에서 나오는 경우가 많습니다. 언어 기능 하나, 명령어 옵션 하나, 디버깅 단서 하나가 몇 시간을 아껴주죠.

특히 가치 있는 건 사전 지식이 거의 없어도 바로 써먹을 수 있는 요령입니다. 파이썬을 전혀 몰라도 아래 한 줄이면 현재 디렉터리를 서빙하는 웹 서버가 뜹니다.

python3 -m http.server

이 글에서는 일상 작업을 편하게 만드는 요령들과, 그보다 더 강력할 수 있는 "회사 내부의 작은 지식"을 어떻게 공유할지 정리합니다.


1. 명령어 이력 검색부터 손보기

터미널에서 가장 자주 하는 일 중 하나가 "아까 쳤던 그 명령어" 찾기입니다. 기본 ctrl + r은 생각보다 불편하죠.

  • fzf: 설치 후 설정하면 ctrl + r이 퍼지(fuzzy) 검색으로 바뀝니다. 기억나는 단어 조각만 쳐도 찾아냅니다.
  • atuin: 셸 이력 자체를 검색 가능한 SQLite 데이터베이스로 교체합니다.
  • per-directory-history: 특정 디렉터리에서 실행한 명령만 보기 ↔ 전체 이력 보기를 토글할 수 있습니다.
  • 이력 보관량 조정: zsh의 이력 저장 개수 설정을 넉넉하게 늘려두는 것만으로도 체감이 다릅니다.

2. SQL을 실험하고 성능을 들여다보기

FROM 없는 SELECT

데이터베이스 함수가 실제로 어떻게 동작하는지 궁금할 때, 테이블을 만들 필요가 없습니다.

SELECT TRUE <> NULL;

이렇게 바로 실행해 결과를 확인할 수 있습니다. NULL 비교처럼 헷갈리는 동작을 검증하기에 딱 좋습니다.

explain analyze

PostgreSQL과 MySQL의 explain analyze는 쿼리를 실제로 실행한 뒤 성능 정보를 보여줍니다. 계획만 보는 explain보다 훨씬 많은 것을 알려줍니다.

3. 정규식과 지표(metrics)의 작은 기술

  • 단어 경계 단언 \b: 단어의 시작이나 끝을 정확히 잡아낼 때 씁니다. \bcat\b는 category에 매칭되지 않습니다.
  • 로그 기반 버킷: 관심 있는 필드의 값 분포를 파악하고 싶을 때 유용합니다.
const bucket = Math.floor(Math.log10(userInGroupCount));
metrics.increment("my_metric", { bucket });

값의 자릿수 단위로 묶이기 때문에, 극단적으로 편향된 분포도 한눈에 들어옵니다.

4. 최신 JavaScript와 Node.js

의외로 "있는 줄 몰라서" 못 쓰는 기능이 많습니다.

  • Array.flatMap
  • Object.entries
  • Promise.withResolvers

그리고 Node.js에서 연결 유지(keep-alive)는 지연 시간에 큰 영향을 줍니다. https.Agent를 만들어 요청에 넘겨주는 방식입니다.

fetch(url, { method, agent });

원인 모를 TCP 지연이라면 TCP_NO_DELAY 설정과 Nagle 알고리듬을 의심해 볼 만하다는 것도, 알아두면 언젠가 구해주는 지식입니다.

5. Git 이력 뒤지기

오래된 코드베이스에서 특히 빛을 발하는 명령들입니다.

| 명령 | 하는 일 | | --- | --- | | git log -S pattern | 해당 문자열을 추가하거나 제거한 커밋을 찾음 (일명 "git pickaxe") | | git log -G pattern | 비슷하지만, 그 줄이 이동한 경우도 보여줌 | | git checkout - | cd -처럼 이전 HEAD로 되돌아감 |

"이 상수는 대체 누가 왜 넣었지?"를 추적할 때 git log -S만한 게 없습니다.

6. 파일·텍스트 검색은 더 쉽게

  • find가 꼭 필요하진 않습니다. 상당수는 **/*.md 같은 글롭으로 대체됩니다.
  • 대부분의 셸은 이를 기본 지원하지만, Bash에서는 shopt -s globstar로 활성화해야 합니다.
  • 텍스트 검색은 grep, ack, ag보다 rg(ripgrep) 를 권합니다.

7. zsh 자동 완성 제대로 켜기

zsh의 고급 자동 완성은 기본으로 켜져 있지 않습니다. Homebrew를 쓴다면 $(brew --prefix)/share/zsh/site-functions를 FPATH 앞에 추가하고, autoload -Uz compinit와 compinit를 실행하도록 설정하면 됩니다.


진짜 강력한 건 "우리 회사 안의 작은 지식"

여기까지의 요령들은 이미 다 알고 계실 수도, 업무 분야에 따라 전혀 쓸모없을 수도 있습니다. 중요한 건 각자 오랜 시간 쌓아 온 자신만의 요령이 일을 쉽게 만들어 준다는 점입니다.

그리고 조직 안에는 짧지만 효과가 훨씬 큰 지식이 많습니다.

  • 특정 문제를 디버깅할 때 어떤 데이터 소스를 봐야 하는지
  • 특정 분야에 해박하고, 막혔을 때 기꺼이 도와줄 동료가 누구인지
  • 어려운 주제에 관한 좋은 문서가 어디 있는지
  • 어떤 상황에서 수동으로 스케일아웃해야 하는지
  • 서비스 롤링 재시작에 쓰는 명령이 무엇인지
  • 특정 작업을 스크립트로 처리하게 해 주는 사내 유틸리티

이런 건 검색으로 나오지 않습니다. 아는 사람이 알려줘야 합니다.

하루에 하나씩, Slack으로 공유하기

원문 저자는 이전 회사에서 매일 엔지니어링 팀에 요령 하나씩을 Slack으로 공유했다고 합니다. 기술적인 요령과 회사 고유의 지식을 섞어서요.

이 방식이 잘 통한 이유는 이렇습니다.

  1. 열 중 아홉을 이미 알아도 괜찮습니다. 나머지 하나가 시간을 아껴주면 그걸로 충분합니다.
  2. 하루 하나는 부담이 없습니다. 정보 과부하로 사람들을 압도하지 않는 적절한 양입니다.
  3. 토론으로 이어집니다. "어 저는 이렇게 하는데요?"라는 반응이 또 다른 요령을 낳습니다.

팀의 시니어 엔지니어라면, 비슷한 공유 방식을 한번 시도해 볼 만합니다.

마무리

작은 지식이 강력하면서도 재미있고 접근하기 쉽다는 걸 잘 보여주는 사례로 Julia Evans의 블로그가 자주 언급됩니다. 거대한 이론이 아니라, 오늘 당장 터미널에 쳐볼 수 있는 한 줄이 개발자의 하루를 바꿉니다.

오늘 배운 것 중 하나를 골라 팀 채널에 공유해 보는 건 어떨까요?


출처: GeekNews - 개발/기술/스타트업 뉴스 서비스


원문: https://news.hada.io/topic?id=33778