지난 번에 WSL 환경 세팅법에 대해 포스팅했다. (http://yiunsr.tistory.com/763


서버쪽 개발을 하는  사람들의 경우, 실 서버는 리눅스를 이용하기 마련인데, 개발 환경의 경우 원도우인 경우가 많다. 그렇다보면 언어에 따라서는 OS 의 차이 때문에 원도우에서는 개발환경을 구축하는게 제한되는 경우가 많다. 


 개인적으로 파이썬 개발환경을 윈도우에서 개발하지만 이 때문에 gunicorn 이런 것은 사용하지 못한다. 그래도 파이썬의 경우 이러한 제약이 적다고 생각하는데 루비의 경우 환경세팅에 어려움을 많이 겪고 있다. 루비를 시작한지 이제 이주일 되어 가는데, 이 환경을 벗어나기 위해 생각한 것이 WSL 환경이다.


 루비 설정은 기존 리눅스에서 설치하듯이 설치하면 된다. 크게 어려움이 없다. 


루비 버전 관리를 위해 보통 rbenv 를 이용하므로 이를 설치한다.


cd ~

//// rbenv 설치

git clone git://github.com/sstephenson/rbenv.git .rbenv 

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
exec $SHELL




 디버깅 환경은 vscode 를 사용해서 구축할 수 있다. vscode 를 윈도우즈로 돌리고 WSL 을 이용해서 bash 에서 돌아가는 루비 프로그램을 remote 환경으로 디버깅 할 수 있다. 루비 디버깅을 위해서는 

아래 2개의 gem 이 꼭 설치가 필요하다. 

gem install ruby-debug-ide

gem install debase

 

Ruby on Rail 의 예를 들면

WSL Bash 환경에서 


rdebug-ide --host 0.0.0.0 --port 1234 --dispatcher-port 26162 -- bin/rails server

이런 식으로 rails 서버를 디버깅 환경으로 돌린다. 이 상태에서는 완전히 실행되지 않고 디버깅을 기다리고 있다.


vscode 에서는 ruby 확장 프로그램을 설치하고

“Listen for rdebug-ide” 를 이용한다.


remoteWorkspaceRoot 의 경로는 bash 를 기준으로 하는 파일 경로를 사용한다.

"/mnt/d/workspace/vscode/project"  이런 식으로 bash에서 윈도우즈로 접속하는 파일 경로이다.

(이 경로는 실제 윈도우즈 환경에서는 D:\workspac\vscode\project 이런 경로이다. )

 {

            "name": "Listen for rdebug-ide",

            "type": "Ruby",

            "request": "attach",

            "cwd": "${workspaceRoot}",

            "remoteHost": "127.0.0.1",

            "remotePort": "1234",

            "remoteWorkspaceRoot": "/mnt/d/workspace/vscode/todoror"

        }, 



vscode 에서 디버깅을 시작하면 rails 서버가 정상적으로 시작한다. 이 상태에서 break point 를 잡아 가면서 디버깅 할 수 있다. 


  윈도우즈10 부터 WSL 을 이용해서 리눅스를 이용할 수 있다. 이 설정은 https://docs.microsoft.com/en-us/windows/wsl/install-win10 대로 하면 된다. 


간단히 설명하면 


1. 제어판\프로그램\windows 기능 켜기/끄기 에서 “Linux용 Windows 하위 시스템 설치” 이 켜져야 한다. 



2. Microsoft Store에서 Ubuntu를 설치한다.




여기 까지 하고 Ubuntu 프로그램(?)을 실행하면 bash 쉘에 접근해서 리눅스 명령어를 사용할 수 있다. 

설치하고 나면 일반적으로 Ubuntu 를 최신화 하는 아래 명령어를 사용하는게 좋다.

sudo apt-get update  -y 
sudo apt-get upgrade  -y 
sudo apt-get install -y build-essential
(  sudo apt-get update : 저장소(repository) 정보 업데이트, 패키지 정보 리스트업
  sudo apt-get upgrade : 설치된 패키지 최신화
  sudo apt-get install -y build-essential : 빌드에 필요한 패키지 설치(gcc 같은 것들)   )


그리고 여기서 더 나가서 GUI 화면이 있는 X-Windows 까지 사용할 수 있다. 

이 방법은 

여기에 잘 나와 있는지라 패스 한다.


참고로 GUI 화면 이용시 vcxsrv 를 이용하는 방법과 xming 를 이용하는 방법이 있는데, vcxsrv  가 OpenGL과 연동된다고 한다. 
그래서 내 경우 vcxsrv 를 이용했다. 위 링크도 VcXsrv 를 이용하는 방법이다. 

xfce4 은 데스크탑 화면 관리 툴이다. 리눅스의 경우 GUI 화면을 관리하는 툴도 여러개 있다. 그 중 유명한 것이 Gnome 과 KDE 이다. 
xface4는 Gnome과 KDE에 비해 가볍다고 한다. 


그리고 cmd 창에서 bash 를 통해 접근할 수 있다. 다만 기존에 다른 환경이 설치 되어 있다면 bash 를 통해 바로 이용이 불가능하다.
내 경우에는 Ubuntu 앱을 설치하기 전에 설치 한 적이 있어서 bash 를 실행하면 기존 앱에 접근한다. 
wslconfig.exe /l  
을 하면 전체 리스트가 나온다. 

C:\programs\pros\conemu>wslconfig.exe /l

Linux 배포용 Windows 하위 시스템:

Ubuntu(기본값)

Legacy



그리고 
wslconfig.exe /s Ubuntu
라고 해서 bash 를 Ubuntu 에 연결 할 수 있다. 



이 환경을 잘 이용하면 여러 언어의 개발환경을 구축할 수 있을 것 같다. 사실 내가 WSL을 설치한 가장 큰 이유이다.  여러 언어중에서도 Ruby 개발을 WSL을 이용해서 Visual Studio Code 로 개발할 수 있을 것 같다. 이에 대해서는 공부하고 기록을 남기도록 하겠다. 




 예전부터 조금씩 익혀오긴 했지만 본격적으로 Node 서버에 대해 샘플 프로그램을 작성해 보고 있다. 일반적으로 Mean(MongoDB + Express + angular.js+ NodeJS) 스택을 사용하는데, angular.js 가 익숙하지 못해 MongoDB + Express + Nodejs 까지만 적용해 봤다. 처음 시작할 때는 Javascript 에 대해서 익숙하고 Django를 하다보니 서버쪽도 많이 해봤고, cassandra 로 개발을 해봤기에 NoSQL 경험도 있기에 쉽게 생각했는데...... 


 누군가 나처럼 Django에서 NodeJS 를 공부하는 사람들을 위해 몇가지 기록을 남긴다.


 Django 로 개발할 때는 Eclipse + PyDev 를 주력으로 사용했는데, Node 의 경우 Eclipse 가 편하지 않았다. 세팅 환경 잡기도 어려웠다. 물론 내가 제대로된 가이드를 찾지 못해서가 원인 일 수도 있다. 어째든 vscode 로 환경을 설정했는데, 크게 불편하지는 않았다. (물론 난 vscode 로 파이썬을 개발하기도 한다. ) 


 Django 를 주력으로 사용했던 사람이다 보니 뭔가 맨바닥에서 부터 시작한다는 느낌이 드는 것 같았다. Django 의 경우 UserModel 을 기본적으로 제공하는데 Express의 경우 그런게 따로 없다. 그래도 라이브러리가 있는데  Passport.js(http://www.passportjs.org/) 가 가장 많이 사용하는 것 같았다. 그리고 local에서 mongoDB 까지 User 를 생성하려면 아무래도  passport + passport-local + passport-local-mongoose 를 이용하는게 편하다. https://github.com/saintedlama/passport-local-mongoose 에 있는 test 내용을 잘 참고해서 환경을 구축하는게 좋은 것 같다.


Express 템플릿 엔진은 jade 와 ejs 가 있는데 HTML 에 익숙한 사람이라면 ejs 가 더 편하다. Jade 의 경우 기존 HTML 형태가 아니라 새로운 형태로 만들어야 한다.  (물론 ejs 도 몇가지 자체 문법이 있다. )

내 경우, Bootstrap 템플릿을 이용해서 HTML 쪽을 구현하는 편이데, HTML 을 수시로 Copy & Paste 하는데 익숙하다보니 내가 개발하는 속도 상에서 너무 차이가 나서 ejs 를 사용했다. (물론  angular.js 를 사용한다면 딱히 템플릿엔진이 필요 할 수 없을 것 같다. ) 


 MongoDB의 경우 모델링 개념 잡는데 조금 어려움을 겪었고, 그리고 그 데이터를 Query 하는데 더 많은 어려움을 겪었다. 모델링보다 Query 구문 만드는게 더 어렵다. 물론 Query 하나하나는 그렇게 까지 어렵지 않은데(물론 오타같은 것은 눈에 안 익어서 고치는게 오래걸린다... 이것 내 머리와 손의 문제다.... 그리고 에러 문구에 익숙해지는 것도 신기술을 배울 때 어쩔 수 없기 겪어야 하는 절차겠지....)  최적화해서 한 방에 Query 짜는 것은 기능을 모두 알지 못해 오래 걸리고 있다. 뭐, 이건 SQL 쪽에서 Query 최적화와 마찬가지니 계속 익혀나가는 수 밖에 없을 것 같다. 


어느정도 샘플이 작성된다면 Git 에 올리도록 하겠다.