필자는 육사에서 일반 대학으로 편입하게 되어 올해부터 수업을 듣게 되었다.
전공필수 이수 조건으로 인해 '자료구조' 수업을 다시 들어야 했는데, 새로운 대학에서는 자료구조 수업을 C++ 을 이용한다는 소식을 듣고 C++ 공부를 시작하게 되었다.
필자는 지금까지 대부분의 프로젝트와 수업을 java 나 python 으로 진행하였고, 육사에서 자료구조 수업을 들을 때도 python으로 진행했었다.
python은 분명히 강력하고 좋은 언어이지만 메모리 관리, 비트 연산 , 시스템 프로그래밍 같은 하드웨어적인 부분을 공부하고 기본을 다지기엔 C 언어 계열을 이용하는 것이 더 적합하다는 판단을 했고, 이번 기회에 다른 언어, 특히 C와 같은 비교적 low level 의 고급 언어 (뭔가 역설적인 표현이지만) 를 공부하면서 전공 수업을 듣기 위한 기본을 다지기로 했다.
C++ 은 C와 같은 컴파일 언어로서 구조체와 포인터 개념을 그대로 갖고 있지만 C와는 달리 생산성 향상을 위해 기본적으로 객체지향의 성질을 갖도록 만들어진 언어이다. 이에 C++ 과 C 언어 공부를 병행하기로 했다.
본론으로 들어와서, 처음 C++을 공부할때 필자는 visual studio 2019 를 이용해서 실습을 했는데, 이게 수정사항이 생길 때마다 매번 컴파일 해주는 과정이 번거로워서, python 처럼 반응형으로 그때 그때 수정하며 더 빠르게 학습할 수 있는 방법이 없을까 찾아보다가, cling 을 알게 되었다.
# Cling C++
Cling 에 대한 기본적인 설명과, unix 계열 운영체제를 사용한다면 바로 설치해서 사용해 볼 수 있는 방법은 여기 블로그에 기술되어 있다.
즉 Cling은 C++ 과 같은 컴파일 언어를 리눅스 bash 나 python의 대화형 쉘 처럼 명령에 따른 결과를 그때 그때 볼 수 있도록 제작되었다.
#Jupyter
지금까지 필자의 핸즈온 머신러닝 관련 게시글은 대부분 Colab 이나 Jupyter 를 이용해서 진행하였다. Colab 은 이전 포스팅에서 한번 다뤄본 적이 있고, 머신러닝 프로젝트를 진행할 땐 Colab 을 애용하긴 한다.
Jupyter 는 정말 정말 유명한 오픈소스 소프트웨어로, 간단히 설명하면 40개가 넘는 프로그래밍 언어들을 대상으로 대화형 컴퓨팅을 가능케 하도록 진행된 Project Jupter의 결과물이다. Jupyter에 대한 자세한 내용은 훌륭한 프로그래머들이 블로그 등을 통해 잘 설명해 두었으므로 넘어가도록 한다.
# WSL
위에 Cling 과 Jupyter 를 이용하면 C++ 을 대화형 인터프리터 방식으로 사용할 수 있게 된다. 하지만 중요한 것은 Unix 계열 운영체제 한정이다. 예를 들어 Mac OS , Linux 등. 왜냐하면 Cling 이 유닉스 계열 운영체제에서만 호환되기 때문이다. 대략 설명하자면 Cling 을 설치할 때 발생하는 파일 방식이 윈도우즈에서 호환이 안되는 것이 원인인데 자세한 내용은 몰라도 무방하다.
즉 Windows 운영체제를 사용하고 있다면 Cling을 설치할 수 없기 때문에 Linux 환경을 따로 구축해 줘야 한다. 이때 사용하는 프로그램이 WSL (Windows subsystem for Linux) 이다. 설치만 한다면 Windows 운영체제에서 별도의 서버 구축 없이 Linux 를 사용할 수 있다.
* WSL 을 설치하기 위해 필요한 사항은 Windows 10 1607 버전 이상의 64비트 운영체제여야 한다.
내 PC 정보를 확인하여 조건을 충족하는지 확인하자.
WSL 에 대해 더 알아보고 싶다면 여기를 참고하자.
# Recipe
WSL 설치
설치 방법은 다음과 같다.
1. windows powershell 을 관리자 권한으로 실행하여 다음 명령어를 입력한다
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
혹은 제어판 > 프로그램 > 프로그램 및 기능 - Windows 기능 켜기/끄기'를 선택하고 Linux용 Windows 하위 시스템 체크박스에 체크하면 재부팅 되면서 설정이 완료된다.
2. Microsoft Store 로 이동하여 Linux 를 검색하고 배포판 링크로 이동한다. (파란색 "앱 다운로드" 버튼 클릭)
들어가면 여러가지 리눅스 배포판이 준비되어 있으며 마음에 드는 것을 선택하도록 한다. (필자는 Ubuntu 선택)
다운로드를 완료하고 실행하면 콘솔 창이 열리며 WSL 이 설치되는데 중간에 사용자 계정의 아이디와 비밀번호를 생성하는 창이 나온다. 자유롭게 설정해보자. (비밀번호는 나중에 bash에서 sudo 계열 명령어를 실행할 때 입력해야 하므로 기억해두자.)
설치과정이 완료되면 아래와 같이 앱이 설치된 것을 확인 할 수 있다.
3. 설치된 bash를 실행하여 다음의 명령어를 통해 git(버전 관리 도구)과 pyenv(파이썬 환경)를 설치한다.
$sudo apt-get install aptitude
$sudo aptitude install git
$git clone https://github.com/yyuu/pyenv ~/.pyenv
$echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
$echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
$echo 'eval "$(pyenv init -)"' >> ~/.bashrc
$source ~/.bashrc
Anaconda (jupyter를 이용하기 위해 필수) 를 설치한다. 필자는 5.1.0 버전을 설치하였다.
$pyenv install anaconda3-5.1.0
$pyenv global anaconda3-5.1.0
$pyenv rehash
Jupyter Notebook을 설치한다.
$conda install jupyter
$conda update -n base conda
$pip3 install tornado --user --ignore-installed
만약 pip3 명령어가 오류를 일으킬 경우 pip 로 대체하여 실행한다.
cling 가상환경을 생성한다.
$conda create -n cling
$source activate cling
Jupyter C++ 커널을 설치한다.(xeus-cling / cling 에서 확장기능을 가짐, openCV 용으로 널리 쓰인다.)
(cling)$ conda install xeus-cling notebook -c QuantStack -c conda-forge
Jupyterlab table을 설치한다.
(만약 node.js 설치가 필요하다 나온다면 pip install node.js 로 설치해주도록 하자)
$jupyter labextension install @jupyterlab/toc
# 실행
위에서 만들어두었던 cling 가상환경을 활성화하고, jupyter notebook 을 실행한다.
(cling)$ jupyter notebook
창이 자동으로 열리지 않으면 bash에 나타난 url 을 복붙하여 접속해보도록 하자.
Jupyter 창 우측 상단에 New 버튼을 눌러 C++ 커널이 추가된 것을 확인한다.
프로젝트를 새로 만들어 테스트해 본다.
이상없이 잘 동작하는 것을 확인 할 수 있다.
종료하고 싶다면 다시 bash 창으로 돌아가서 Ctrl+C 를 눌러 커널을 종료할 수 있다.
이렇게 정말 편하게 C++ 프로젝트를 진행하는 방법에 대해 알아보았다 :)
댓글