VS Code 로 넘어가기 (2019)

올해 소소한 목표로 vim / neovim 아닌 에디터를 GUI 쓸 때 기본 에디터로 써보자로 하고 vscode (for mac, linux) 를 써보는 중.

2018. 1.

대략 위 내용을 작년 1월에 얘기했었는데, 대략 올해 늦봄에야 vim이 아닌 주 개발 환경을 구성. 변명을 하자면 작년엔 출장이 잦았고 그러다보니 로컬에서 GUI로 VSCode를 쓰는게 어려웠음. 그러다 늦봄 (5월쯤) VSCode Insider Preview와 원격 개발 확장 기능 쓰는 걸로 이전.

이전까지 주로 사용한 것은 SSH 위에서 vim/neovim 를 썼고 이걸 대체할 non-VIM환경을 시도해봤는데 — 로컬 CLion / VSCode 혹은 몇가지 원격 환경을 시도 — 항상 뭔가 맘에 안드는게 있더라.

  • 명령행 기반으로 작업하면 현대적인 GUI 도구류를 쓰기 불편하다. X를 원격으로도 쓰려고 해봤는데, 장담컨대 X터널링으로 GUI 쾌적하게 쓰는 사람은 없으리라 생각한다. 항상 광대역 + 낮은 지연시간 환경을 쓸 수 있는 것도 아니고.
  • 지연 시간 jitter가 편집 중에 영향을 준다. Mosh 같은 도구를 쓰면 화면을 로컬에서 에뮬레이견 해 주니 좀 덜하지만 종종 빡침.
  • 설정 동기화. 새로 서버/VM/컨테이너 만들 때 환경을 일정하게 유지하는게 번잡하다.

VSCode 로 옮기고 4달 정도 된 것 같은데 위 문제를 어느 정도는 해결한듯 하다.

로컬 환경에서 쓰는 IDE라서 원격 확장 쓰면서 걱정을 좀 했는데, 내가 쓰는 기능들은 다 돌더라. GitLense (git blame + git log 미리보기), C++ / C# / python 개발 환경이 꼭 필요한데 모두 정상 동작. 마크다운 관련 기능 (내장 기능인 미리보기나 확장 기능인 pdf 변환)도 잘 돌고. 다만, VS Code는 서버 쪽 쉘이 bash여야 동작하는게 문제긴한데, VS Code의 내장 터미널에서 쓸 쉘은 따로 지정할 수 있어서 어지간한 경우 터미널을 따로 쓰진 않아도 됨.

VS Code 에서 내가 생각하기에 가장 놀라운 부분이 일렉트론 기반이면서 입력 지연 시간이 길지 않다는 것. 리눅스 로컬에서 vim쓰는 수준까진 아니어도 불쾌한 느낌이 들 정도는 아님. 그리고 원격 연결인 경우 원격 저장하는 지연 시간을 VS Code 가 숨겨서 jitter영향이 굉장히 적다. 원격인 경우에는 어지간히 지연 시간 짧은 서버가 아니라면 Mosh + vim보다 jitter가 작음 (혹은 작아 보임).

VS Code의 설정은 유저 수준 / 각각의 원격 서버 수준 / 개별 작업 디렉터리 루트 수준에서 지정할 수 있고 이 설정들을 cascade해서 처리한다. 그래서 어지간한 설정은 주요 단말 (내 경우엔 맥북과 데스크톱)에 이 디렉터리만 동기화하면 됨. 개별 서버의 차이는 해당 서버 수준 설정에서 처리하면 되고. Vim은 각 서버에 .vim을 동기화하려고는 하는데, 서버별 차이를 지정할 편한 방법을 모르겠음. 쉘은 개별 설정을 포기하고 fish를 기본 상태로 사용하는 상태고…

이전부터 macOS 위에서 개발 IDE만 돌리고 빌드/테스트/디버깅은 CPU/메모리가 많은 서버에서 하는 쪽을 어떻게 해볼까 했는데, 이젠이게 가능해진 듯 하다.
이전에 시도했던 CLion 혹은 VS Code (원격 지원 없이) 로 로컬 빌드 (docker + docker exec …)는 원격 지원이 없는 반쪽짜리라 느리디 느린 MacBook (2015년 형)에서 한다고 버티기가 어려웠다. 주로 작업하는 프로젝트에서 풀빌드하면 40분쯤 걸림 (더불어 배터리가 남아나질 않는다). 반대로 내 작업머신인 리눅스 서버 쪽에서 풀빌드하면 2분 정도라 macOS에서 편집하고 빌드는 리눅스에서 하는 지금 작업 환경은 꽤 만족스럽다.

VS Code Server 쪽의 라이센스가 좀 특이해서, 이걸 VS Code와 통신하지 않고 무언가 하는건 허용되진 않더라. 그래서 이걸 이용해서 VS Code 없이 무언가 하는 제품을 만들겠다면 쓸모가 없겠지만, 원격 개발 환경이나 이걸 확장하는 무언가를 만드는 정도라면 꽤나 적당한 도구라는게 내 생각.

덤: VS Code 를 MS Windows에서 띄운 경우에도 적어도 C++ / C# (mono) 개발 환경은 잘 돌더라. 회사에서 외부 강연할 용도로 준비하면서 여기까지는 확인.

이사 + 네트워크 설정하기

지난 달 초에 (또) 이사. 네트워크 새로 구성한 내용 정리.

  • AP와 작업실(?) 허브의 분리
  • 여러 개의 AP
  • 눈에 보이는 선 최소화

대략 이런 목표.

우선 유/무선 분리. 이번에 실행에 옮기진 못했지만 vlan 쪼개서 별도 게스트 네트워크 구성하려고 함. 그리고 AP 보안 패치 끊겨도 편하게 바꾸려고. 이전 집이나 지금 집이나 벽이 좀 두꺼워서 벽 두 개 지나면 신호 감쇄가 너무 심하다. 안방과 서재는 괜찮은데 애들 방에서 잘 안잡힘. 그러니 그냥 AP 두 개로. 그리고 기왕 장비 새로 하는거 선 최소한만 보이게 구성.

네트워크 구성

  • 구내 단자함으로 ISP 망 연결이 들어온다. (UTP 케이블)
  • 구내 단자함에서 각 방과 거실에 전화선 1개 (UTP 케이블 4핀) + 랜 선 1개 (UTP 8핀) 이 간다.
  • 구내 단자함에서 ISP 쪽 선을 서재 랜 포트로 보낸다. 이걸 서재 랜 포트에서 ISP 에서 제공한 모뎀에 연결하고, 모뎀과 내 유선 라우터(?) 로 보냄. 이 밑에 허브를 물린다.
  • 허브에서 서재 내 데스크톱 두 대와 NAS 그리고 서재/안방용 AP에 연결
  • 허브에서 선을 하나 다시 빼서 서재 전화 포트에 연결
  • 구내 단자함에서 서재 전화선을 찾아 거실 랜포트에 연결.
  • 거실 랜 포트와 거실/애들방 용 AP 연결

2000년대 중반에 지은 집이라 그런지 현관이 아니라 부엌에 단자함이 있더라. ISP망도 광 케이블이 아니라 구리선. ISP 모뎀은 왜 있나 했는데 UTP케이블 가닥으로 500 Mbps 지원을 위해 필요함.

단자함을 사진으로 보면 이런 식. 2010년 경 이후에 지은 집이면 ISP망이 광 케이블로 들어오고, 아래 부분의 전화선도 랜 포트(RJ-45)일듯. 집에 케이블 찍을래 없어서 랜 선 사다가 커터로 대충 지르고 연결. 커터 등 부분을 써서 전화선 꽂는데 집어넣으면 잘 들어가더라. 테스터가 없어서 하나씩 연결했는데 레이블이 부엌인 자리가 서재 전화선이었다.

AP 구성

PoE 로 랜 선 + 전원을 묶어서 하나로 보냄. PoE 지원되는 허브는 비싸고 구내 랜 선 상태를 모르니 전원 + 랜 합치는 어댑터 동봉된 AP를 지름. 이걸로 겉에서 보기엔 랜 선 하나(…) 벽에 붙이는 것도 3M 찍찍이 1Kg 까진 버틴다는 걸로 고정. (500g쯤 나가는 AP라 이걸로)

구내 단자함의 전화선 부분을 거친 거라 거실 쪽 AP가 100 Mbps 로 연결된 것만 빼면 아주 잘 돌고 있다. 이사 직후엔 애들 방에서 무선 랜 못 쓰는 수준이었음. 지금은 둘째 재우면서 태블릿으로 이 글 쓰는게 가능.