이 글은 대학원에서 재택근무를 1년정도 하면서 알게된 개인적인 노하우를 정리한 것이다.
아래의 4가지 조건을 만족 시키는 원격 접속 전략이 있을까?
이러한 조건을 만족시키는 원격 전략을 찾기위해 아래 다양한 방식들을 비교 분석해 보았다.
원격 접속을 가장 빠르고 쉽게 하는 방법은 teamviewer, vpn, chrome 원격 데스크톱 등을 사용하는 것이다.
계정 만들어서 내 컴퓨터 등록만 해놓으면 특별한 지식 없이도 집에서 연구실 컴퓨터에 접속할 수 있다.
그러나 teamviewer, vpn, chrome 원격 데스크톱의 문제점은 다음과 같다.
NoMachine 은 teamviewer, vpn, chrome 원격 데스크톱 처럼 화면을 그대로 전송하는 방식이다.
다른점은 NoMachine 만의 파일전송 프로토콜을 사용하여 집 컴퓨터와 연구실 컴퓨터를 직접 연결할 수 있다는 점이다.
직접 연결할 수 있다 보니 teamviewer, vpn, chrome 원격 데스크톱보다 더 빠르다.
NoMachine 은 컴퓨터 연결 개수 제한도 없고, 같은 공유기에 물려있는 컴퓨터에 접속하기도 매우 편하게 잘 되어있다.
NoMachine 처럼 ip 를 이용해서 직접 원격 접속할 수 있는 다른 방식이 엄청 많은데(예. x2go), 몇 개를 시도해보았을때 NoMachine 이 가장 깔끔하게 작동하는 것 같았다.
필자는 간단하게 컴퓨터 화면을 공유해서 봐야할 때 가능하다면 NoMachine 을 사용한다.
그러나 여전히 코드 작성, 이미지 관찰시 압축 열화가 관찰되기 때문에 NoMachine 만으로는 깔끔한 코딩과 연구가 여렵다.
많은 사람들이 딥러닝, python 개발을 위해 jupyter notebook 이나 Visual studio code 를 사용한다.
jupyter notebook, Visual Studio code 는 모두 원격으로 코드를 작성할 수 있는 기능을 제공한다.
이 방식들은 코드 작성 화면 공유가 목적이기 때문에 코드를 압축열화 없이 깔끔하게 작성할 수 있다.
그러나 연구는 코드만 작성뿐만 아니라 다양한 형식의 데이터를 열람하거나, 파일을 주고 받거나, 원격 컴퓨터에 특정 프로그램을 실행시킬 필요가 있기도 하다.
그래서 jupyter notebook, Visual Studio code를 사용한다면 부족한 부분을 보완할 프로그램이 필요하다. NoMachine 으로 화면 공유를 통해 원격 컴퓨터에 특정 프로그램을 사용하거나, SSH 를 통해 파일전송을 하면 좋다.
pycharm 에서도 원격으로 코드를 실행 할 수 있는 기능이 제공된다. (코드를 원격으로 작성하는 기능은 아니다 ㅠ)
그런데 pycharm 은 화면을 공유하는게 아니라 실행할 코드를 원격으로 전송한 뒤 원격 컴퓨터에서 그 코드를 실행하느 방식이다. 때문에 집 컴퓨터에서 코드를 작성해서 원격 컴퓨터로 코드를 전송한 뒤 실행하는 식으로 작업을 해야한다.
그런데 이런 방식의 원격 작업은 내 코드가 원격에 잘 동기화가 되었는지 항상 확인해야되고, 실수로 대용량의 파일을 동기화 시켜서 뭔가 꼬이게 될 수도 있다.
이 전체 과정에 자동으로 잘 되어있지만 내 스타일은 아니였다. 코딩과, 실행이 모두 원격 컴퓨터에서 이루어지고 내 컴퓨터는 딱 접속만 하는 방식을 원한다.
리눅스에 다양한 파일 전송 프로토콜이 있지만 가장 범용적으로 쓰이는 프로토콜이다. 어쩌면 재택 연구를 하고 원격 컴퓨터를 조작하는데 가장 중요하다.
윈도우에서는 PuTTY 나 MobaXterm 을 이용하여 ssh 를 사용할 수 있다.
리눅스 터미널에서 아래 명령어(예시)를 통해 원격 컴퓨터의 터미널에 접속할 수 있다.
ssh testuser@135.79.246.80 -p 22
아래 명령어와 같이 ssh 와 tar 과 조합하면 빠르게 대용량 파일을 전송할 수 있다.
tar cf - [source] | ssh testuser@135.79.246.80 "cd [target]; tar xf -"
이런 방식으로는 SSH 를 이용해서 터미널에서 nano 이나 vim 를 이용하여 날코딩을 할 수 있다.. 필자는 pycharm 이 꼭 필요해서 SSH 만으로는 코딩을 할 수 없다.
다양한 방식을 해본 결과 필자는 SSH 에서 X11 를 사용하는 것이 원격 연구를 위한 최선의 전략이라고 생각된다.
나무위키에서 X11 설명
그래픽 출력을 위해 클라이언트 서버 모델을 사용하며, TCP/IP 네트워크 기반의 X 프로토콜로 통신을 한다. 간단하게, 클라이언트가 무언가 그래픽적인 요구를 X 서버로 전달하면, X 서버가 요청을 처리하여 클라이언트로 반환해 준다. 이러한 구조를 가지게된 이유는 한 컴퓨터에 모니터, 키보드를 여럿 붙이고 동시에 이용하던 시절에 작성된 프로그램이기 때문이다. 이 구조 덕에 다른 시스템에 설치되어 있는 프로그램을 내 시스템에 X 윈도우를 통해 원격으로 출력할 수 있다.
아래 명령어와 같이 사용하면 리눅스 서버의 대부분의 gui 프로그램(pycharm, chrome, nomacs 등)을 마치 local 에서 사용하듯 그대로 사용할 수 있다.
ssh -X testuser@135.79.246.80 -p 22
-X 명령어를 통해서 ssh 에서 X11 를 사용할 수 있다. (리눅스의 경우)
윈도우에서는 MobaXterm 에서 X11 을 지원해 준다.
윈도우에서 실제 MobaXterm 을 통해 ssh + X11 로 개발하는 예시 화면을 아래와 같이 캡처하였다.
$ pycharm-professional
이 명령어를 통해 pycharm 을 실행하면 다음과 같이 실행되고, 마치 서버의 컴퓨터에서 직접 코딩하듯이 할 수 있다. 아래 이미지에 실행된 pycharm 은 본 윈도우 컴퓨터에서 실행된것이 아니라 서버에 설치된 pycharm 을 그대로 가져와서 다시 가시화 된 것이다.$ nautilus
이 명령어를 통해서 리눅스 파일 관리자인 nautilus 를 그대로 내 local 컴퓨터에서 실행할 수 있다. 그리고 아래 이미지에서 처럼 nautilus 실행 후 nomacs 도 바로 실행해서 압축 열화 없이 볼수 있음을 확인할 수 있다.이처럼 SSH + X11 를 이용하면 최선의 속도로 코딩할수 있으며, 깔끔한 코드 작성을 할 수 있으며, 내가 사용중인 프로그램(pycharm 등)을 사용할 수 있으며 이미지는 원본화질로 볼 수 있다.
SSH + X11 방식에 아래 방식을 같이 사용하면 더 좋다.
필자는 아래의 조합을 이용하여 굉장히 만족스럽게 원격 연구를 하고 있다.
SSH + X11 + tmux + dolphin + NoMachine(X11 로 지원이 잘 안되는 프로그램 사용 시 사용)
재택 꿀팁 잘보고 갑니다!! 감사합니다!