SlideShare uma empresa Scribd logo
1 de 60
Neovim 으로
생산성 퀀텀점프하기
이재열(@kodingwarrior)
발표 내용 소
개
이재열 (@kodingwarrior)
- INTP / ENFP 사이를 오가는 하이브리드
- Neovim에 굉장히 과몰입한 누리꾼
이번 발표에서는
Neovim에 과몰입하게 된 사연과 함께
Neovim으로 어떻게 생산성이 개선되었는지 소개합니다.
Neovim 의 장점이 지나치게 부각되는 세션이 될 수도 있습니다.
Neovim 이 얼마나 매력적인지
소개하는 세션이 될 수도 있습니다만
다른 도구로도 생산성을 충분히 높일 수 있음을 밝힙니다.
01. Neovim과의 만남
목
차
02. Neovim의 매력에 빠져든 이유
03. 생산성에 대한 고찰
04. 마무리
01
Neovim과의 만남
01
Neovim
모르는 분도 계실테니
짤막하게 소개해볼게요
Neovim 과의 만남
01
Vim 은 터미널 환경에서 동작하는 multi-modal 텍스트 에디터입니다.
Multi-modal : 여러 개의 모드를 가진다는 의미
Vim 에서 지원하는 모드
● Normal : 명령어를 실행할 수 있는 모드
● Visual : 텍스트 처리가 필요한 영역을 선택할 수 있는 모드
● Insert : 텍스트를 편집할 수 있는 모드
Neovim 과의 만남
Vim Editor
01 Neovim 과의 만남
Vim Editor
Input
mode
Visual
mode
Normal
mode
i 입력
ESC 입력
ESC 입력
v 입력
01
장점
● 텍스트를 효율적으로 편집할 수 있게 하는 여러가지 기능이 내장되어 있음
● 어떤 환경에서든 사용할 수 있을 정도로 가볍고 빠름
(ex. 메모리가 500mb인 서버)
단점 (초보자의 입장에서)
● 단축키를 손에 익히는 과정에 시간을 어느정도 들여야 함
● 모드를 스위칭하는 매커니즘이 직관적이지 않아
처음 쓸때는 상당히 인지부하가 올 수 있음
● “Vim꾸” 를 하는 과정에서 진입장벽이 느껴질 수 있음
Neovim 과의 만남
Vim Editor
01
Vim VS Neovim
● Vim에서는 vimscript로 커스터마이징하지만,
Neovim에서는 lua 기반으로 커스터마이징이 가능함
● 플러그인 생태계가 훨씬 더 발전되어있으며,
좀 더 개발자 경험(DX)을 개선하는 플러그인들이 개발되고 있음
● Treesitter builtin support
● LSP builtin support
Neovim 과의 만남
Neovim
01
과거사를 잠깐만
풀어보겠습니다
Neovim 과의 만남
01
개인 노트북이 발열 심한 편이었는데,
결국은 배터리 스웰링이 터짐.
배터리가 터진 관계로 노트북은 잠시 수리맡기고
전 회사에서 맥미니 빌려서 작업을 해서야
겨우 일을 이어갈 수 있었던 웃픈 사정이 있었음.
(3개월 동안….)
Neovim 과의 만남
사건의 시작 - 배터리스웰링
01 Neovim 과의 만남
(참고) 배터리 스웰링 당시 사진
01
수리를 받고 나면서부터는 일부 키가 인식이 되지 않음.
기존의 손가락 배치 - 엄지손가락을 제외한 모든 손가락은 키보드 위에 위치해있고, 엄지
손가락으로 트랙패드를 조종하던 구조였음.
이후의 손가락 배치 - 외장 키보드를 연결해서 사용해야함. 트랙패드를 사용하기 위해 손
가락을 키보드에서 좀 멀리 움직여야 함.
발상의 전환 - 키보드로만 navigation해도 개발에 지장이 없도록 스스로를 개조하자
Neovim 과의 만남
익숙한 손가락 배치에서 벗어난 불안감
01 Neovim 과의 만남
(참고) 손가락 배치 Before/After
Before
● 손의 위치를 최소한으로 움직이면서
엄지손가락으로 트랙패드를 조작할 수 있었음
After
● 트랙패드를 조작하기 위해서
손의 위치를 많이 움직여야 함
01
Neovim 기반으로
가야겠다는 결심을 세우고
행동으로 옮기게 되었습니다
Neovim 과의 만남
01
트랙패드, 빨콩, 마우스 등 포인팅 디바이스에 의존하지 않고도
내 손에 익숙한 키보드만 잘 잡고 있어도
개발하는데 지장이 없어야겠다는 자각이 들기 시작함
환경을 새로 옮겨다닐때마다 settings.json 세팅하기도 귀찮고, VSCode 확장 설치하다보면 그냥 손에
잡히는대로 좋아보이는거 설치하곤 하는데 뭐뭐 안깔았었는지 체크하기도 귀찮음.
그냥 어떤 환경을 옮겨다녀도 개발환경이 동일하게 유지되는 환경이 필요했음
Neovim 과의 만남
Action 1 - VSCode -> Neovim
01
GUI 어플리케이션들이 가지는 고질병이 있으니…
그것은 너무 느리다는 것이고 (렌더링 시간, 부팅 시간, …),
필요에 따라서는 마우스를 움직여야 하는 수고를 들여야 하는 것.
개발 환경과 학습 기록/일지 작성이 분리되어 있으니 매번 스위칭을 할때마다 알트탭을 누르는게 번거
로움. 알트탭으로 스위칭 후 내비게이션이 스무스하게 잘되냐면 그것도 아님.
(1) 컨텐츠 저작 도구(VSCode)/(2) 학습기록/(3) 일지작성 역시 일원화를 해야겠다는 필요성을 느낌
Neovim 과의 만남
Action 2 - RoamResearch/Notion -> Neovim
01 Neovim 과의 만남
Before After
01
Neovim을 쓰기 시작한 걸로
어떻게 생산성이 올라갔을까?
Neovim 과의 만남
01
Notion, VSCode 를 동시에 쓰고 있는 상황이라고 가정해봅시다.
Notion도 역시 개인적인 목적으로 쓰고 있다고 가정하겠습니다.
● VSCode -> Notion -> VSCode -> Notion -> …
○ 각각의 어플리케이션으로 전환할때마다 어플리케이션이 여러개 켜져 있을 수록
화면 전환 탭을 눌러야 하는 횟수가 많음
○ 각각의 어플리케이션으로 전환할때마다 사용법을 떠올리느라 잠깐의 멈춤이 있음
하나의 도구만을 쓰고 있는 상황이라면
흐름을 온전히 유지할 수 있게 됩니다.
Neovim 과의 만남
Effect 1 - 컨텍스트 스위칭 비용 최소화
01
컴퓨터 과학 분야에서의 설명
● 여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고
다른 프로세스를 실행하는 것
생산성 개선이라는 관점에서의 설명
● 한 가지 일에 대한 업무를 중단해 다른 일에 착수하는 행위, 인터럽트에 의한 행위
관심있는 분들은 “업무 시각화" 라는 책도 보시면 좋아요
Neovim 과의 만남
(참고) 컨텍스트 스위칭
01
Vim의 설정은 .vimrc
Neovim의 설정은 .config/nvim 경로에서 관리됨
이러한 설정들을 Github Repository에 올려놓으면 어느 개발환경에서든 리포지
토리에 올라온 구성대로 바로 활용할 수 있음.
에디터 플러그인이라던가 키맵도 동기화하기 쉽다. (개인용/업무용)
Neovim 과의 만남
Effect 2 - 어떤 환경이라도 일관성 있는 근무환경 유지
01
● VSCode, RoamResearch(Notion), Chrome, GitKraken, Android Studio 등
동시에 띄워서 작업해왔음.
● VSCode 인스턴스도 여러개 띄워놓을 일이 많았어서 비행기 이륙소리는 물론이고, 노
트북이 64GB RAM 이었지만 메모리 점유율이 아슬아슬했음
쓰레싱이 빈번히 일어나서 키보드를 타이핑하고
그 결과가 반영되기까지의 시간이 느려지는 일이 종종 있었음
Neovim 과의 만남
Effect 3 - 좀 더 줄어든 발열, 버벅거림의 최소화 (Before)
01
● 오로지 Neovim(+tmux), Chrome 만 띄우고 있음.
● 메모리 점유율도 Chrome 말고는 차지하는게 별로 없음.
○ Neovim 이 메모리점유율을 차지한다면 높은 확률로
일부 플러그인이 비효율적으로 짜여져 있음.
○ Before - 32GB~55GB / After - 6GB~13GB
비행기 이륙 소리도 거의 안 들림
Neovim 과의 만남
Effect 3 - 좀 더 줄어든 발열, 버벅거림의 최소화 (After)
02
Neovim의 매력에 빠져든 이유
02
● 대용량의 파일을 편집하더라도 버벅거림이 없다.
○ 개인적인 경험에 기반하면 100만 Line까지 편집가능
● 파일을 빠르게 탐색할 수 있게 해준다
○ ex. N번째 라인으로 이동하기
○ ex2. 커서를 word 단위로 이동하기
○ 그 외에도 빠른 커서 이동을 지원해주는 플러그인들
■ lightspeed.nvim, vim-easymotion, …
Neovim의 매력에 빠져든 이유
터미널 기반의 에디터이기 때문에 빠르다!
02
● 깃헙에 dotfiles 저장소를 만들어서 관리하면
어느 환경에서든 git pull 하는 것 만으로도 동일한 개발경험을 누릴 수 있음
○ .config/nvim, .zshrc, .bashrc, .config/tmuxinator
● Chezmoi
○ Manage your dotfiles across multiple diverse machines, securely.
○ chezmoi update 명령 한 줄 실행하는 것 만으로도
어딘가에 백업해놓은 저장소 (remote repository) 에 올라간 설정파일을
그대로 가져와서 바로 적용할 수 있음
Neovim의 매력에 빠져든 이유
어느 환경에서 사용하든 동일한 개발경험
02
● Github CLI를 응용해서 만들어진 octo.nvim
● CLI Tool의 도움을 이용해서 에디터의 기능을 더 확장할 수 있는 것만으로도
생산성에 큰 기여를 할 수 있음.
Neovim의 매력에 빠져든 이유
CLI 도구와의 궁합이 좋음 (UNIX 철학에 부합)
Function f : CLI 도구
Input x : 편집하고자 하는 텍스트
Output f(x)
텍스트를 CLI Tool에서 처리한 뒤,
에디터에 들어가는 텍스트
02
한글로 잘못 타이핑된 건 영어로, 영어로 잘못 타이핑된 건 한글로 바꾸기
Neovim의 매력에 빠져든 이유
EX. 파이썬 스크립트로 기능 확장하기
02 Neovim의 매력에 빠져든 이유
02
● Go To Definition
● Go To Reference
● Auto Completion
● Semantic Syntax Highlighting
Neovim의 매력에 빠져든 이유
다른 에디터 못지 않게, LSP/TreeSitter 지원이 좋은 편
02
“Neovim을 써볼까..?”
하고 혹하는 생각이 들만한
플러그인을 소개하겠습니다.
Neovim의 매력에 빠져든 이유
02 Neovim의 매력에 빠져든 이유
Octo.nvim - Issue/PR/code review
02
키맵을 따닥따닥 입력하는 것만으로도
파일 검색/패턴 검색이 가능하게 해주는
Neovim의 핵심적인 플러그인 그 자체!
여러가지 유용한 목적으로도 마음대로 요리해서 사용할 수도 있음!
Neovim의 매력에 빠져든 이유
Telescope.nvim - Neovim 진영의 “범용성 검색엔진"
02 Neovim의 매력에 빠져든 이유
(Telescope.nvim) 파일 검색
02 Neovim의 매력에 빠져든 이유
(Telescope.nvim) 패턴 검색
02
필요에 따라 확장도 가능하고, 쿼리할 수 있는 모든 것들을 검색할 수 있음.
(git commit, 사용할 수 있는 명령어, manpage, …)
Neovim의 매력에 빠져든 이유
Telescope에서 지원하는 다양한 기능들
02
VS Code의 Git 부럽지 않다!
Neovim의 매력에 빠져든 이유
vim-fugitive - Git utility
02
얼레벌레 작업하다가 한 파일에서 일어난 여러 변경사항들이
엄밀하게는 서로 다른 의미를 가질때.
하나의 파일 안에서 발생하는 변경사항을
여러개의 커밋으로 분리해야하는 상황이 발생할때
Neovim의 매력에 빠져든 이유
vim-gitgutter - sign column / stage hunk
02 Neovim의 매력에 빠져든 이유
vim-gitgutter demo
02
불필요하게 자원을 차지하고 있는 이미지/컨테이너를 삭제하고 싶을때 매우 편리
함
Neovim의 매력에 빠져든 이유
docker-denops.vim - Docker 이미지/컨테이너 관리
02
커맨드라인으로 직접 실행한다면 복잡하게 파라미터를 넘겨줘야 했겠지만,
단순히 키맵을 연결해준 것만으로도 의도한대로 편집기에서 변경이 이루어진다.
시스템 콜에 직접적으로 접근이 가능하기 때문에,
에디터/쉘 간의 상호작용으로 해낼 수 있는 가능성은 무궁무진하다.
TUI Application을 구성하기 위한 플랫폼으로서도 주목받을만함.
Neovim의 매력에 빠져든 이유
이렇게 살펴보니 Vim은 어떤 물건인가…?
02
● 앞서 언급했던 Neovim의 범용성 검색엔진 그 자체인
Telescope.nvim 기반으로 구성된 노트 관리용 플러그인.
● 마크다운 지원 (옵시디언 호환됨)
○ Notion/RoamResearch를 과감히 버리게 해준 장본인
● 내부 링크는 키맵 입력하는 것만으로도 쉽게 이동이 가능함
● 내부 링크 삽입도 역시 검색해서 찾는 것이 됨
Neovim의 매력에 빠져든 이유
Telekasten.nvim - Note Taking
02 Neovim의 매력에 빠져든 이유
(Telekasten.nvim) 내부 링크 이동
02 Neovim의 매력에 빠져든 이유
(Telekasten.nvim) 내부 링크 삽입
02
지식 관리와 블로그 컨텐츠 생산의 획일화
Neovim의 매력에 빠져든 이유
Telekasten.nvim - with Static Site Generator (ex. Jekyll)
02 Neovim의 매력에 빠져든 이유
활용 가능성은 계속해서 확장할 수 있음
02
● Copilot.vim
○ Notion AI…? 우리에게는 Github Copilot이 있다!!
● ChatGPT.nvim, NeoAI.nvim
● Translate.nvim - DeepL Pro API 지원
● Mastodon.nvim - 북마크에 담아둔 아티클을 TIL에 바로 집어넣기
○ 이론상으로는 bluesky.nvim도 가능할지도..?
Neovim의 매력에 빠져든 이유
이런 것들도 스무스하게 잘 됩니다 (분량 상 생략)
03
다시, 생산성
03
저는 개인적으로 아래와 같이 정의내리고 싶습니다.
● 한정된 시간 동안 할 수 있는 작업의 양
● 생산성이 높다는 것은 주어진 시간에 많은 일들을 쳐낼 수 있게 된다는 것.
생산성을 높이려면?
● 온전히 집중해서 작업의 속도를 높일 수 있어야 한다.
● 작업을 하는데 드는 속도를 부분적으로 최적화한다.
다시, 생산성
생산성을 무엇이라고 정의해야 할까요?
03
우리가 무언가를 의식하고 행동하는 것은 정신적인 에너지를 소모하는 행위다.
정신적인 에너지를 소모할때마다 정신이 산만해지고,
산만해짐으로 인해서 생산성도 떨어질 수 밖에 없다.
모든 것을 하나의 도구에서 해결하기에 하나의 도구에서 이탈하지 않는것.
그것은 온전히 하나의 행위에 집중할 수 있게 한다.
다시, 생산성
다시 한번, 컨텍스트 스위칭
03
어떤 도구, 어떤 툴을 쓰느냐의 문제가 전혀 아닙니다.
내가 쓰고 있는 도구의 단축키/키맵을 체화해놓으면 미세하게나마 도움됩니다.
어떤 행위를 하기 위해 드는 시간이 1.6배 ~ 3배 이상 줄어들 수 있습니다.
대표적인 예시를 들어보겠습니다. (VSCode 기준)
● Go To Definition
○ 마우스를 심볼 위에다 올려서 Ctrl + 마우스 왼쪽 클릭
■ 좀 더 극단적으로는 마우스 우클릭 > Go To Definition 클릭
○ 텍스트를 편집하고 있는 커서를 심볼로 이동해서 F12 키 입력
다시, 생산성
GUI 기반의 인터랙션은 단축키/키맵의 속도를 이길 수 없음
03
Neovim 플러그인 생태계에서 제공하는 온갖 기능을 활용하여
내가 작업하는 동안에 드는 소요시간을 미세하게나마 줄일 수 있음.
하지만, 협업하는 환경이라면 다 같이 Vim/Neovim 쓰자고 합의하는게 아닌 이상
협업하는 환경에 맞는 도구를 쓰면서 다 같이 생산성을 향상시키는 방향을
모색하는 것도 중요함
다시, 생산성
But, 생산성 향상을 위해 반드시 Neovim을 쓸 필요는 없음
03
생산성 개선은 내가 어떤 행위에서 불필요하게 시간을 소모하는지
분석하는 메타인지에서 시작합니다.
1.일단 내가 사용하는 도구에 익숙해진다.
2.내가 어떤 작업을 반복적으로 하는지 살펴보고
반복된 작업을 하는데 드는 시간을 줄이는 활용방법이 있는지 찾아본다.
(ex. 템플릿, 플러그인, 매크로, 스니펫, …)
3.2의 과정에서 나에게 맞는 것을 선택해서 체화한다.
(무의식의 영역까지 가게 된다면 Best)
다시, 생산성
나만의 생산성을 늘리기 위한 파이프라인 구성하기
04
마무리
04
● 세션과 관련해서 긴 호흡의 대화를 나누고 싶은 분이 계신다면
아래의 연락처로 언제든지 연락주세요.
○ 이메일 : kodingwarrior@kakao.com
○ 트위터 : @kodingwarrior
● 참고하면 좋을 것 같은 자료들을 슬라이드에 담기엔 너무 방대하기에
블로그(겸 개인 위키)에 별도로 정리했습니다.
○ https://kodingwarrior.github.io/wiki/appendix/excelcon-2nd
● https://vim.kr <- Vim 디스코드 많은 관심 부탁드립니다.
마무리
다루고 싶은 내용은 많지만 여기까지…
04
● CLI 감성으로 회귀하고 싶다.
● 내가 온전히 통제할 수 있는 에디터를 원한다.
● 최대한 마우스를 안 쓰면서 작업하고 싶다.
● 에디터를 잘 사용하는 방법을 자유롭게 공유할 수 있는
개방적이고 따뜻한 커뮤니티와 함께 하고 싶다.
마무리
아래에 하나라도 해당이 된다면, Neovim을 영접해보는건 어떨까
요
이재열(@kodingwarrior)
질문과 답
변

Mais conteúdo relacionado

Mais procurados

GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육승엽 신
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話Masahito Zembutsu
 
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea 急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea Motonori Shindo
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지강 민우
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트Amazon Web Services Korea
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!pyrasis
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규ChangKyu Song
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버준철 박
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기Sangik Bae
 
K8s network policy bypass
K8s network policy bypassK8s network policy bypass
K8s network policy bypassKaizhe Huang
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumScyllaDB
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr내훈 정
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
게임 디자이너와 게임 서버
게임 디자이너와 게임 서버게임 디자이너와 게임 서버
게임 디자이너와 게임 서버ByungChun2
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]Yurim Jin
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 

Mais procurados (20)

GitHub 실습 교육
GitHub 실습 교육GitHub 실습 교육
GitHub 실습 교육
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea 急速に進化を続けるCNIプラグイン Antrea
急速に進化を続けるCNIプラグイン Antrea
 
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
[IGC 2017] 아마존 구승모 - 게임 엔진으로 서버 제작 및 운영까지
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
 
[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
[NDC07] 게임 개발에서의 클라이언트 보안 - 송창규
 
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
[NDC2017 : 박준철] Python 게임 서버 안녕하십니까 - 몬스터 슈퍼리그 게임 서버
 
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
golang과 websocket을 활용한 서버프로그래밍 - 장애없는 서버 런칭 도전기
 
K8s network policy bypass
K8s network policy bypassK8s network policy bypass
K8s network policy bypass
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
Using eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in CiliumUsing eBPF for High-Performance Networking in Cilium
Using eBPF for High-Performance Networking in Cilium
 
Multithread & shared_ptr
Multithread & shared_ptrMultithread & shared_ptr
Multithread & shared_ptr
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
게임 디자이너와 게임 서버
게임 디자이너와 게임 서버게임 디자이너와 게임 서버
게임 디자이너와 게임 서버
 
신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]신입 개발자 생활백서 [개정판]
신입 개발자 생활백서 [개정판]
 
NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 

Semelhante a Neovim으로 생산성 퀀텀점프하기 by 이재열

20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdfeastarJeong2
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기Dexter Jung
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulBansook Nam
 
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?hyunho Lee
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트Chanwoong Kim
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
지금 우리에게 필요한 것은
지금 우리에게 필요한 것은지금 우리에게 필요한 것은
지금 우리에게 필요한 것은현진 김
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스Dan Kang (강동한)
 
제로보드과제보고서
제로보드과제보고서제로보드과제보고서
제로보드과제보고서kth919
 
Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화
Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화
Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화Jae-yeol Lee
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practicesHyunil Shin
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원NAVER D2
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제Kiyoung Moon
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014NDOORS
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼mangonamu
 
[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트
[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트
[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트월간 IT 슬라이드
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱Jong Wook Kim
 
Bon voyage Docker_Kubernetes
Bon voyage Docker_KubernetesBon voyage Docker_Kubernetes
Bon voyage Docker_Kubernetesssuseraada82
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자Taeyeop Kim
 

Semelhante a Neovim으로 생산성 퀀텀점프하기 by 이재열 (20)

20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
20년된 Naver Cafe 서비스가 Modularization으로 진화 하기_정동진.pdf
 
회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기회사에서 새로운 기술_적용하기
회사에서 새로운 기술_적용하기
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @SeoulCreate App Easier With SVC Pattern - DroidKnights 2019 @Seoul
Create App Easier With SVC Pattern - DroidKnights 2019 @Seoul
 
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
빌드 버튼이 눌린다음에 무슨일이 일어나는 걸까?
 
[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트[NDC17] 왓 스튜디오 서비스파트
[NDC17] 왓 스튜디오 서비스파트
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
지금 우리에게 필요한 것은
지금 우리에게 필요한 것은지금 우리에게 필요한 것은
지금 우리에게 필요한 것은
 
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
 
제로보드과제보고서
제로보드과제보고서제로보드과제보고서
제로보드과제보고서
 
Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화
Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화
Github + Heroku + Circle CI 를 이용한 Django Application 배포 자동화
 
Configuration management best practices
Configuration management best practicesConfiguration management best practices
Configuration management best practices
 
131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원131 deview 2013 yobi-채수원
131 deview 2013 yobi-채수원
 
버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제버그 트래킹 시스템 Mantis의 사용 그리고 예제
버그 트래킹 시스템 Mantis의 사용 그리고 예제
 
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
대규모 프로젝트 개발이야기 - 이승헌, 유나이트 코리아 2014
 
Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼Flask! - python web framework flask 튜토리얼
Flask! - python web framework flask 튜토리얼
 
[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트
[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트
[월간 슬라이드] 한시간안에 게시판 만들기 with 스프링부트
 
이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱이것이 리눅스다 - 김종욱
이것이 리눅스다 - 김종욱
 
Bon voyage Docker_Kubernetes
Bon voyage Docker_KubernetesBon voyage Docker_Kubernetes
Bon voyage Docker_Kubernetes
 
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자IoT 개발자를 위한 Embedded C에서 TDD를 해보자
IoT 개발자를 위한 Embedded C에서 TDD를 해보자
 

Mais de Excelcon

사이드 프로젝트 빠르게 시작하기 by 제이제이
사이드 프로젝트 빠르게 시작하기 by 제이제이사이드 프로젝트 빠르게 시작하기 by 제이제이
사이드 프로젝트 빠르게 시작하기 by 제이제이Excelcon
 
Git 커멘드와 있으면 편리한 Alias/Funciton by KangDroid
Git 커멘드와 있으면 편리한 Alias/Funciton by KangDroidGit 커멘드와 있으면 편리한 Alias/Funciton by KangDroid
Git 커멘드와 있으면 편리한 Alias/Funciton by KangDroidExcelcon
 
주니어가 회사에서 기회를 얻는 방법 by 1호
주니어가 회사에서 기회를 얻는 방법 by 1호주니어가 회사에서 기회를 얻는 방법 by 1호
주니어가 회사에서 기회를 얻는 방법 by 1호Excelcon
 
'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리
'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리
'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리Excelcon
 
저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영
저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영
저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영Excelcon
 
프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아
프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아
프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아Excelcon
 

Mais de Excelcon (6)

사이드 프로젝트 빠르게 시작하기 by 제이제이
사이드 프로젝트 빠르게 시작하기 by 제이제이사이드 프로젝트 빠르게 시작하기 by 제이제이
사이드 프로젝트 빠르게 시작하기 by 제이제이
 
Git 커멘드와 있으면 편리한 Alias/Funciton by KangDroid
Git 커멘드와 있으면 편리한 Alias/Funciton by KangDroidGit 커멘드와 있으면 편리한 Alias/Funciton by KangDroid
Git 커멘드와 있으면 편리한 Alias/Funciton by KangDroid
 
주니어가 회사에서 기회를 얻는 방법 by 1호
주니어가 회사에서 기회를 얻는 방법 by 1호주니어가 회사에서 기회를 얻는 방법 by 1호
주니어가 회사에서 기회를 얻는 방법 by 1호
 
'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리
'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리
'다꾸장인' 개발자의 '다꾸' 하는 법 by 뚜루리
 
저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영
저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영
저장하고 쌓이기만 하는 아티클을 잘 읽고 관리하는 시스템 by 허규영
 
프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아
프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아
프론트엔드 개발자가 1년 동안 쌓아온 꿀팁 소문 내기 by 헬리아
 

Neovim으로 생산성 퀀텀점프하기 by 이재열

  • 2. 발표 내용 소 개 이재열 (@kodingwarrior) - INTP / ENFP 사이를 오가는 하이브리드 - Neovim에 굉장히 과몰입한 누리꾼 이번 발표에서는 Neovim에 과몰입하게 된 사연과 함께 Neovim으로 어떻게 생산성이 개선되었는지 소개합니다.
  • 3. Neovim 의 장점이 지나치게 부각되는 세션이 될 수도 있습니다. Neovim 이 얼마나 매력적인지 소개하는 세션이 될 수도 있습니다만 다른 도구로도 생산성을 충분히 높일 수 있음을 밝힙니다.
  • 4. 01. Neovim과의 만남 목 차 02. Neovim의 매력에 빠져든 이유 03. 생산성에 대한 고찰 04. 마무리
  • 6. 01 Neovim 모르는 분도 계실테니 짤막하게 소개해볼게요 Neovim 과의 만남
  • 7. 01 Vim 은 터미널 환경에서 동작하는 multi-modal 텍스트 에디터입니다. Multi-modal : 여러 개의 모드를 가진다는 의미 Vim 에서 지원하는 모드 ● Normal : 명령어를 실행할 수 있는 모드 ● Visual : 텍스트 처리가 필요한 영역을 선택할 수 있는 모드 ● Insert : 텍스트를 편집할 수 있는 모드 Neovim 과의 만남 Vim Editor
  • 8. 01 Neovim 과의 만남 Vim Editor Input mode Visual mode Normal mode i 입력 ESC 입력 ESC 입력 v 입력
  • 9. 01 장점 ● 텍스트를 효율적으로 편집할 수 있게 하는 여러가지 기능이 내장되어 있음 ● 어떤 환경에서든 사용할 수 있을 정도로 가볍고 빠름 (ex. 메모리가 500mb인 서버) 단점 (초보자의 입장에서) ● 단축키를 손에 익히는 과정에 시간을 어느정도 들여야 함 ● 모드를 스위칭하는 매커니즘이 직관적이지 않아 처음 쓸때는 상당히 인지부하가 올 수 있음 ● “Vim꾸” 를 하는 과정에서 진입장벽이 느껴질 수 있음 Neovim 과의 만남 Vim Editor
  • 10. 01 Vim VS Neovim ● Vim에서는 vimscript로 커스터마이징하지만, Neovim에서는 lua 기반으로 커스터마이징이 가능함 ● 플러그인 생태계가 훨씬 더 발전되어있으며, 좀 더 개발자 경험(DX)을 개선하는 플러그인들이 개발되고 있음 ● Treesitter builtin support ● LSP builtin support Neovim 과의 만남 Neovim
  • 12. 01 개인 노트북이 발열 심한 편이었는데, 결국은 배터리 스웰링이 터짐. 배터리가 터진 관계로 노트북은 잠시 수리맡기고 전 회사에서 맥미니 빌려서 작업을 해서야 겨우 일을 이어갈 수 있었던 웃픈 사정이 있었음. (3개월 동안….) Neovim 과의 만남 사건의 시작 - 배터리스웰링
  • 13. 01 Neovim 과의 만남 (참고) 배터리 스웰링 당시 사진
  • 14. 01 수리를 받고 나면서부터는 일부 키가 인식이 되지 않음. 기존의 손가락 배치 - 엄지손가락을 제외한 모든 손가락은 키보드 위에 위치해있고, 엄지 손가락으로 트랙패드를 조종하던 구조였음. 이후의 손가락 배치 - 외장 키보드를 연결해서 사용해야함. 트랙패드를 사용하기 위해 손 가락을 키보드에서 좀 멀리 움직여야 함. 발상의 전환 - 키보드로만 navigation해도 개발에 지장이 없도록 스스로를 개조하자 Neovim 과의 만남 익숙한 손가락 배치에서 벗어난 불안감
  • 15. 01 Neovim 과의 만남 (참고) 손가락 배치 Before/After Before ● 손의 위치를 최소한으로 움직이면서 엄지손가락으로 트랙패드를 조작할 수 있었음 After ● 트랙패드를 조작하기 위해서 손의 위치를 많이 움직여야 함
  • 16. 01 Neovim 기반으로 가야겠다는 결심을 세우고 행동으로 옮기게 되었습니다 Neovim 과의 만남
  • 17. 01 트랙패드, 빨콩, 마우스 등 포인팅 디바이스에 의존하지 않고도 내 손에 익숙한 키보드만 잘 잡고 있어도 개발하는데 지장이 없어야겠다는 자각이 들기 시작함 환경을 새로 옮겨다닐때마다 settings.json 세팅하기도 귀찮고, VSCode 확장 설치하다보면 그냥 손에 잡히는대로 좋아보이는거 설치하곤 하는데 뭐뭐 안깔았었는지 체크하기도 귀찮음. 그냥 어떤 환경을 옮겨다녀도 개발환경이 동일하게 유지되는 환경이 필요했음 Neovim 과의 만남 Action 1 - VSCode -> Neovim
  • 18. 01 GUI 어플리케이션들이 가지는 고질병이 있으니… 그것은 너무 느리다는 것이고 (렌더링 시간, 부팅 시간, …), 필요에 따라서는 마우스를 움직여야 하는 수고를 들여야 하는 것. 개발 환경과 학습 기록/일지 작성이 분리되어 있으니 매번 스위칭을 할때마다 알트탭을 누르는게 번거 로움. 알트탭으로 스위칭 후 내비게이션이 스무스하게 잘되냐면 그것도 아님. (1) 컨텐츠 저작 도구(VSCode)/(2) 학습기록/(3) 일지작성 역시 일원화를 해야겠다는 필요성을 느낌 Neovim 과의 만남 Action 2 - RoamResearch/Notion -> Neovim
  • 19. 01 Neovim 과의 만남 Before After
  • 20. 01 Neovim을 쓰기 시작한 걸로 어떻게 생산성이 올라갔을까? Neovim 과의 만남
  • 21. 01 Notion, VSCode 를 동시에 쓰고 있는 상황이라고 가정해봅시다. Notion도 역시 개인적인 목적으로 쓰고 있다고 가정하겠습니다. ● VSCode -> Notion -> VSCode -> Notion -> … ○ 각각의 어플리케이션으로 전환할때마다 어플리케이션이 여러개 켜져 있을 수록 화면 전환 탭을 눌러야 하는 횟수가 많음 ○ 각각의 어플리케이션으로 전환할때마다 사용법을 떠올리느라 잠깐의 멈춤이 있음 하나의 도구만을 쓰고 있는 상황이라면 흐름을 온전히 유지할 수 있게 됩니다. Neovim 과의 만남 Effect 1 - 컨텍스트 스위칭 비용 최소화
  • 22. 01 컴퓨터 과학 분야에서의 설명 ● 여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것 생산성 개선이라는 관점에서의 설명 ● 한 가지 일에 대한 업무를 중단해 다른 일에 착수하는 행위, 인터럽트에 의한 행위 관심있는 분들은 “업무 시각화" 라는 책도 보시면 좋아요 Neovim 과의 만남 (참고) 컨텍스트 스위칭
  • 23. 01 Vim의 설정은 .vimrc Neovim의 설정은 .config/nvim 경로에서 관리됨 이러한 설정들을 Github Repository에 올려놓으면 어느 개발환경에서든 리포지 토리에 올라온 구성대로 바로 활용할 수 있음. 에디터 플러그인이라던가 키맵도 동기화하기 쉽다. (개인용/업무용) Neovim 과의 만남 Effect 2 - 어떤 환경이라도 일관성 있는 근무환경 유지
  • 24. 01 ● VSCode, RoamResearch(Notion), Chrome, GitKraken, Android Studio 등 동시에 띄워서 작업해왔음. ● VSCode 인스턴스도 여러개 띄워놓을 일이 많았어서 비행기 이륙소리는 물론이고, 노 트북이 64GB RAM 이었지만 메모리 점유율이 아슬아슬했음 쓰레싱이 빈번히 일어나서 키보드를 타이핑하고 그 결과가 반영되기까지의 시간이 느려지는 일이 종종 있었음 Neovim 과의 만남 Effect 3 - 좀 더 줄어든 발열, 버벅거림의 최소화 (Before)
  • 25. 01 ● 오로지 Neovim(+tmux), Chrome 만 띄우고 있음. ● 메모리 점유율도 Chrome 말고는 차지하는게 별로 없음. ○ Neovim 이 메모리점유율을 차지한다면 높은 확률로 일부 플러그인이 비효율적으로 짜여져 있음. ○ Before - 32GB~55GB / After - 6GB~13GB 비행기 이륙 소리도 거의 안 들림 Neovim 과의 만남 Effect 3 - 좀 더 줄어든 발열, 버벅거림의 최소화 (After)
  • 27. 02 ● 대용량의 파일을 편집하더라도 버벅거림이 없다. ○ 개인적인 경험에 기반하면 100만 Line까지 편집가능 ● 파일을 빠르게 탐색할 수 있게 해준다 ○ ex. N번째 라인으로 이동하기 ○ ex2. 커서를 word 단위로 이동하기 ○ 그 외에도 빠른 커서 이동을 지원해주는 플러그인들 ■ lightspeed.nvim, vim-easymotion, … Neovim의 매력에 빠져든 이유 터미널 기반의 에디터이기 때문에 빠르다!
  • 28. 02 ● 깃헙에 dotfiles 저장소를 만들어서 관리하면 어느 환경에서든 git pull 하는 것 만으로도 동일한 개발경험을 누릴 수 있음 ○ .config/nvim, .zshrc, .bashrc, .config/tmuxinator ● Chezmoi ○ Manage your dotfiles across multiple diverse machines, securely. ○ chezmoi update 명령 한 줄 실행하는 것 만으로도 어딘가에 백업해놓은 저장소 (remote repository) 에 올라간 설정파일을 그대로 가져와서 바로 적용할 수 있음 Neovim의 매력에 빠져든 이유 어느 환경에서 사용하든 동일한 개발경험
  • 29. 02 ● Github CLI를 응용해서 만들어진 octo.nvim ● CLI Tool의 도움을 이용해서 에디터의 기능을 더 확장할 수 있는 것만으로도 생산성에 큰 기여를 할 수 있음. Neovim의 매력에 빠져든 이유 CLI 도구와의 궁합이 좋음 (UNIX 철학에 부합) Function f : CLI 도구 Input x : 편집하고자 하는 텍스트 Output f(x) 텍스트를 CLI Tool에서 처리한 뒤, 에디터에 들어가는 텍스트
  • 30. 02 한글로 잘못 타이핑된 건 영어로, 영어로 잘못 타이핑된 건 한글로 바꾸기 Neovim의 매력에 빠져든 이유 EX. 파이썬 스크립트로 기능 확장하기
  • 31. 02 Neovim의 매력에 빠져든 이유
  • 32. 02 ● Go To Definition ● Go To Reference ● Auto Completion ● Semantic Syntax Highlighting Neovim의 매력에 빠져든 이유 다른 에디터 못지 않게, LSP/TreeSitter 지원이 좋은 편
  • 33. 02 “Neovim을 써볼까..?” 하고 혹하는 생각이 들만한 플러그인을 소개하겠습니다. Neovim의 매력에 빠져든 이유
  • 34. 02 Neovim의 매력에 빠져든 이유 Octo.nvim - Issue/PR/code review
  • 35. 02 키맵을 따닥따닥 입력하는 것만으로도 파일 검색/패턴 검색이 가능하게 해주는 Neovim의 핵심적인 플러그인 그 자체! 여러가지 유용한 목적으로도 마음대로 요리해서 사용할 수도 있음! Neovim의 매력에 빠져든 이유 Telescope.nvim - Neovim 진영의 “범용성 검색엔진"
  • 36. 02 Neovim의 매력에 빠져든 이유 (Telescope.nvim) 파일 검색
  • 37. 02 Neovim의 매력에 빠져든 이유 (Telescope.nvim) 패턴 검색
  • 38. 02 필요에 따라 확장도 가능하고, 쿼리할 수 있는 모든 것들을 검색할 수 있음. (git commit, 사용할 수 있는 명령어, manpage, …) Neovim의 매력에 빠져든 이유 Telescope에서 지원하는 다양한 기능들
  • 39. 02 VS Code의 Git 부럽지 않다! Neovim의 매력에 빠져든 이유 vim-fugitive - Git utility
  • 40. 02 얼레벌레 작업하다가 한 파일에서 일어난 여러 변경사항들이 엄밀하게는 서로 다른 의미를 가질때. 하나의 파일 안에서 발생하는 변경사항을 여러개의 커밋으로 분리해야하는 상황이 발생할때 Neovim의 매력에 빠져든 이유 vim-gitgutter - sign column / stage hunk
  • 41. 02 Neovim의 매력에 빠져든 이유 vim-gitgutter demo
  • 42. 02 불필요하게 자원을 차지하고 있는 이미지/컨테이너를 삭제하고 싶을때 매우 편리 함 Neovim의 매력에 빠져든 이유 docker-denops.vim - Docker 이미지/컨테이너 관리
  • 43. 02 커맨드라인으로 직접 실행한다면 복잡하게 파라미터를 넘겨줘야 했겠지만, 단순히 키맵을 연결해준 것만으로도 의도한대로 편집기에서 변경이 이루어진다. 시스템 콜에 직접적으로 접근이 가능하기 때문에, 에디터/쉘 간의 상호작용으로 해낼 수 있는 가능성은 무궁무진하다. TUI Application을 구성하기 위한 플랫폼으로서도 주목받을만함. Neovim의 매력에 빠져든 이유 이렇게 살펴보니 Vim은 어떤 물건인가…?
  • 44. 02 ● 앞서 언급했던 Neovim의 범용성 검색엔진 그 자체인 Telescope.nvim 기반으로 구성된 노트 관리용 플러그인. ● 마크다운 지원 (옵시디언 호환됨) ○ Notion/RoamResearch를 과감히 버리게 해준 장본인 ● 내부 링크는 키맵 입력하는 것만으로도 쉽게 이동이 가능함 ● 내부 링크 삽입도 역시 검색해서 찾는 것이 됨 Neovim의 매력에 빠져든 이유 Telekasten.nvim - Note Taking
  • 45. 02 Neovim의 매력에 빠져든 이유 (Telekasten.nvim) 내부 링크 이동
  • 46. 02 Neovim의 매력에 빠져든 이유 (Telekasten.nvim) 내부 링크 삽입
  • 47. 02 지식 관리와 블로그 컨텐츠 생산의 획일화 Neovim의 매력에 빠져든 이유 Telekasten.nvim - with Static Site Generator (ex. Jekyll)
  • 48. 02 Neovim의 매력에 빠져든 이유 활용 가능성은 계속해서 확장할 수 있음
  • 49. 02 ● Copilot.vim ○ Notion AI…? 우리에게는 Github Copilot이 있다!! ● ChatGPT.nvim, NeoAI.nvim ● Translate.nvim - DeepL Pro API 지원 ● Mastodon.nvim - 북마크에 담아둔 아티클을 TIL에 바로 집어넣기 ○ 이론상으로는 bluesky.nvim도 가능할지도..? Neovim의 매력에 빠져든 이유 이런 것들도 스무스하게 잘 됩니다 (분량 상 생략)
  • 51. 03 저는 개인적으로 아래와 같이 정의내리고 싶습니다. ● 한정된 시간 동안 할 수 있는 작업의 양 ● 생산성이 높다는 것은 주어진 시간에 많은 일들을 쳐낼 수 있게 된다는 것. 생산성을 높이려면? ● 온전히 집중해서 작업의 속도를 높일 수 있어야 한다. ● 작업을 하는데 드는 속도를 부분적으로 최적화한다. 다시, 생산성 생산성을 무엇이라고 정의해야 할까요?
  • 52. 03 우리가 무언가를 의식하고 행동하는 것은 정신적인 에너지를 소모하는 행위다. 정신적인 에너지를 소모할때마다 정신이 산만해지고, 산만해짐으로 인해서 생산성도 떨어질 수 밖에 없다. 모든 것을 하나의 도구에서 해결하기에 하나의 도구에서 이탈하지 않는것. 그것은 온전히 하나의 행위에 집중할 수 있게 한다. 다시, 생산성 다시 한번, 컨텍스트 스위칭
  • 53. 03 어떤 도구, 어떤 툴을 쓰느냐의 문제가 전혀 아닙니다. 내가 쓰고 있는 도구의 단축키/키맵을 체화해놓으면 미세하게나마 도움됩니다. 어떤 행위를 하기 위해 드는 시간이 1.6배 ~ 3배 이상 줄어들 수 있습니다. 대표적인 예시를 들어보겠습니다. (VSCode 기준) ● Go To Definition ○ 마우스를 심볼 위에다 올려서 Ctrl + 마우스 왼쪽 클릭 ■ 좀 더 극단적으로는 마우스 우클릭 > Go To Definition 클릭 ○ 텍스트를 편집하고 있는 커서를 심볼로 이동해서 F12 키 입력 다시, 생산성 GUI 기반의 인터랙션은 단축키/키맵의 속도를 이길 수 없음
  • 54. 03 Neovim 플러그인 생태계에서 제공하는 온갖 기능을 활용하여 내가 작업하는 동안에 드는 소요시간을 미세하게나마 줄일 수 있음. 하지만, 협업하는 환경이라면 다 같이 Vim/Neovim 쓰자고 합의하는게 아닌 이상 협업하는 환경에 맞는 도구를 쓰면서 다 같이 생산성을 향상시키는 방향을 모색하는 것도 중요함 다시, 생산성 But, 생산성 향상을 위해 반드시 Neovim을 쓸 필요는 없음
  • 55. 03 생산성 개선은 내가 어떤 행위에서 불필요하게 시간을 소모하는지 분석하는 메타인지에서 시작합니다. 1.일단 내가 사용하는 도구에 익숙해진다. 2.내가 어떤 작업을 반복적으로 하는지 살펴보고 반복된 작업을 하는데 드는 시간을 줄이는 활용방법이 있는지 찾아본다. (ex. 템플릿, 플러그인, 매크로, 스니펫, …) 3.2의 과정에서 나에게 맞는 것을 선택해서 체화한다. (무의식의 영역까지 가게 된다면 Best) 다시, 생산성 나만의 생산성을 늘리기 위한 파이프라인 구성하기
  • 57. 04 ● 세션과 관련해서 긴 호흡의 대화를 나누고 싶은 분이 계신다면 아래의 연락처로 언제든지 연락주세요. ○ 이메일 : kodingwarrior@kakao.com ○ 트위터 : @kodingwarrior ● 참고하면 좋을 것 같은 자료들을 슬라이드에 담기엔 너무 방대하기에 블로그(겸 개인 위키)에 별도로 정리했습니다. ○ https://kodingwarrior.github.io/wiki/appendix/excelcon-2nd ● https://vim.kr <- Vim 디스코드 많은 관심 부탁드립니다. 마무리 다루고 싶은 내용은 많지만 여기까지…
  • 58. 04 ● CLI 감성으로 회귀하고 싶다. ● 내가 온전히 통제할 수 있는 에디터를 원한다. ● 최대한 마우스를 안 쓰면서 작업하고 싶다. ● 에디터를 잘 사용하는 방법을 자유롭게 공유할 수 있는 개방적이고 따뜻한 커뮤니티와 함께 하고 싶다. 마무리 아래에 하나라도 해당이 된다면, Neovim을 영접해보는건 어떨까 요