I. Jupyter Notebook


Jupyter Notebook은 웹 브라우저 기반으로 돌아가는 대화 형식의 Python 관련 프로그램들 중 하나입니다. Python도 Script 형식이긴 하지만 프로그램을 실행하면, 입력이 나올 때까지는 계속 쉬지 않고 돌아가서 뭐가 문제인지 모르는 경우도 생기고, 저와 같은 초보자들의 경우에는 단계별로 코딩을 해야하는데 한 번에 프로그램을 돌아가게하면 이해가 안되는 경우가 많습니다. 하지만, Jupyter Notebook의 경우에는 코드를 조각 조각내서 돌리면서 중간에 어떤 식으로 프로그램이 돌아가는지를 확인할 수 있고, 중간에 잘못 되더라도 원하는 블록부터 다시 프로그램을 돌림으로써 쉽게 코딩도 배우고 오류점도 찾아 낼 수 있습니다. (그냥 구글드라이브의 코랩 쓰세요) 데이터 과학에서 자주 쓰이게 되는데, 그림 출력 부분도 좋고, 수정점을 찾아서 고칠 수가 있으며, R에 대해서도 지원되니 많이 쓰이는 이유를 알 것 같습니다.

 

II. 1차적인 WSL에서의 설치

 

Jupyter notebook의 경우에는 대중적으로 많이 쓰이고 있기 때문에 그냥 Linux나 Window에서 설치할 경우에는 쉽게 설치하여 바로 사용할 수가 있습니다.

 

pip install jupyter notebook

 

혹은

 

python3 -m pip install jupyter notebook

 

으로 설치가 가능합니다.

 

이후에는 실행은 

 

python3 -m jupyter notebook

 

이라는 형식으로 돌리게 되는데요. Window와 Linux 사이 어딘가에 있는 WSL의 경우에도 이렇게 하면 설치가 됩니다. 다만 Linux Terminal에서 돌리게 될 경우에는 수많은 오류를 뿜어내며 검은색 화면만 보이게 됩니다. 이 부분은 너무 빨리 지나가게 되어서 Visual Studio Code를 활용하여, 오류를 캡쳐하게 되었습니다.

 

영어로 설정되어있는데, 한글로 오류가 나오는 위엄

III. 무엇이 문제인가?

 

실제로 명령어를 통하여 jupyter notebook의 경로나 버전을 확인하게 되면은 문제없이 설치가 잘 되었다고 나옵니다. 그럼에도 불구하고 실행이 안되는 점이 있는데, 그 이유는 바로 저번 시간 VS code를 WSL에서 바로 실행하면 안되는 이유와 같은 GUI 문제입니다. WSL의 경우에는 GUI가 지원되지 않고  윈도우에 있는 GUI 환경을 활용하여 간접적으로 그 정보를 받아와서 보는 형식입니다. 그래서 VS code를 WSL에 바로 설치를 해서 프로그램을 실행하면 GUI 문제 때문에 실행이 안되는 것이죠. 하지만 Jupyter notebook을 설치했을 시에는 기본적인 옵션을 모두 달고 나오기 때문에 우리가 일반적으로 Linux나 Window에서 하던 것 처럼 바로 Jupyter notebook이 기본 Browser를 통해 실행이 되려 하고, 이 때 실행된 Browser가 문제를 일으키면서 수많은 오류를 뿜뿜하게 됩니다.

WSL2에서는 GUI가 지원된다는 이야기가 있습니다. 따라서 WSL를 우리가 생각하는 운영체제처럼 돌릴 수 있을 것 같은데... 5월 말에 나온다고 합니다. (4월에서 연기)

 

IV. 어떻게 해결하는가?

 

python3 -m jupyter notebook --no-browser

 

이렇게 터미널에 명령어를 넣게 되면, 바로 실행이 되지않고, 이 jupyter notebook이 실행되고 있는 서버의 주소가 열리게 됩니다. 서버의 주소를 그대로 크롬이나 파이어폭스와 같은 브라우저 주소창에 넣으면 완성이 됩니다.

 

하지만 이러한 --no-browser를 jupyter notebook을 실행할 때마다 타이핑하기 귀찮은 부분도 있습니다. 때문에 WSL에서 바로 jupyter notebook이 열리지 않도록 설정해놓는 방법도 있습니다.

 

jupyter notebook --generate-config

 

라고 입력을 하면 wsl 기준 최상단 경로에 /.jupyter/jupyter_notebook_config.py라는 파일이 생성이 됩니다.

 

이것을 vim이나 nano 에디터로 열어주도록 하겠습니다.

 

vim /.jupyter/jupyter_notebook_config.py

 

그러면 수많은 #으로 이루어진 참조 상태로 처리된 코드들이 나오게 되는데 저희는 브라우저 부분을 찾아보도록하겠습니다.

vim의 경우에는 /를 누르고 browser를 입력하시면 됩니다.

많은 부분이 뜰건데 저희는

c.NotebookApp.open_browser라는 단어를 찾을 것입니다.

 

수정해야할 부분

원래는 #c.NotebookApp.open_browser=True 라는 부분으로만 되어있지만 #을 제거해준다음, True를 False로 바꾸게 되면 다음부터 jupyter notebook 실행시에 자동으로 Browser에서 연결이 되지 않습니다.

 

V. 추가적으로

가끔 Jupyter notebook을 실행시켜도 무한로딩이 브라우저창에서 뜰뿐 실행이 요원한 경우가 많이 보입니다. 이 경우에는 별 생각없이 jupyter notebook을 껐다가 다시 켜는 경우에 할당되는 서버의 주소가 겹쳐져 버려서 연결이 안되는 경우가 많습니다.

보통 로컬 서버를 8888 기준으로 하니 8889 8890 등으로 다음과 같이 바꿔서 실행을 해주시면 됩니다.

(서버를 끄는 방법도 있지만, 이게 조금 더 빨라서 애용하고 있는 중입니다.)

 

python3 -m jupyter notebook --port=8889

 

그러면 새로운 서버에 jupyter notebook이 실행이 되면서 다시 웹 브라우저를 통해서 접속할 수가 있습니다.

I. Linux 실행에서의 어려움

지난 번 Ubuntu 설치에서 말했던 것처럼 Linux 설치의 경우 Window 설치보다 안정성이 떨어질 가능성이 높습니다. (특히 Debian 직접 설치의 경우) 많은 하드웨어를 직접 인식을 시켜주거나 혹은 성능이 전부 발휘되지 않을 때가 많은데요. 저같은 경우에도 Lubuntu를 쓸 때는 Bluetooth를 여러 개 돌려가면서 쓸 때, 인식을 다시 시켜주거나, Chromebook Ubunutu를 쓸 때에는 블루투스가 잘 작동이 되지 않는 듯한 문제가 있었습니다.

오늘 들어갈 문제도 바로, Ubuntu에서 소리가 제대로 나오지 않아서 생기는 문제들을 해결하기 위한 조치를 이야기를 하고자 합니다. 비록 저번에 간단한 툴을 Github에서 다운받아서 사용하긴 했는데, 이게 이어폰이나 스피커를 전환할 때마다 다시 명령어를 치고 껐다켜야하는 문제점이 있어서 다른 해결책을 찾다가 발견한 것이 Alsamixer입니다.

일단 먼저 Ubuntu에서의 Sound 부분을 체크해보도록 하겠습니다.

 

Ubuntu Sound 부분

 

보통은 저기 사운드 옆의 그림이 X 표시가 쳐져있는 경우도 있고, 아니면 잘 인식하는 경우도 있습니다. 하지만 저같은 경우에는 인식을 하더라도 스피커나 이어폰 하나만 되고, 나머지는 잘 안되는 경우가 있었는데요, 앞서 말한 것으로 하면 되긴 하지만, 전환하면서 사용할 경우에는 불편함을 상당히 느꼈습니다. 

그럼 이 해결 책으로 Alsamixer를 다운로드 받아보도록 하겠습니다.

 

sudo apt-get install alx-utils

다음과 같이 터미널에 입력을 하여 다운을 받을 수가 있습니다.

 

이후 터미널에서

alsamixer

를 사용하게 되면 사운드 카드에서 사운드를 조정가능한 alsamixer가 켜지게 됩니다.

 

II. Sound output 조정하기

alsamixer 처음 화면

먼저, 켜지게 되면 우선 순위가 되는 alsamixer가 켜지게 됩니다. 보통은 여기서부터 알록달록한 그래프가 보이게 되는데, 저 같은 경우에는 Chromebook에 운영체제를 두 개를 올려서, 그것도 sd카드에 설치를 하였기 때문에 사운드 카드에서는 바로 찾을 수 없는 것 같습니다. 때문에 F6를 눌러서 다른 부분을 켜줘야합니다.

카드 변경 및 헤드폰

이렇게 카드가 바뀌면 왼윗쪽에 HDA Intel에서 chtrt5650으로 바뀌게 되는데, 그래프가 보이는 쪽으로 변경을 해주시면 됩니다. 일단 먼저, F1을 눌러 도움말을 켜도록 하겠습니다.

 

F1 도움말

보시면 알 수 있듯이 많은 기능들이 나와있습니다. 저희가 주로 쓸 것은 화살표와 M 밖에 없긴하지만

 

좌우 스피커 조종 Q W E (볼륨 증가) ZXC (볼륨감소)

도 유용하게 사용을 하고 있습니다. 가장 많이 쓸 것은 M이라는 각 하드웨어를 끄고 키는 기능입니다.

 

저의 컴퓨터에는 이어폰이 먼저 On으로 설정 되있고, Speaker가 Off로 설정이 되어 있습니다.

 

Headphone On 상태

 

 

Speaker Off 상태

때문에 Ubuntu 기본 사운드 설정에서 아무리 소리를 올려봐도 소리가 나오지 않는 부분이 볼륨은 문제가 없는데, 하드웨어 채널이 꺼져있었기 때문입니다. 이를 M을 눌러서 켜주면, 소리가 잘 나오는 것을 확인 할 수가 있습니다.

이 때, Speaker를 키더라도 Headphone을 끄지 않으면 둘 다 소리가 나오니 한 쪽을 마저 끄는 것도 중요할 것 같습니다.

 

III. 마치며

이런 방법을 통해서 자동 전환이 가능한데, 보통은 사운드 카드에서 Automate 부분을 켜주면 이어폰과 헤드폰이 자동으로 전환이 된다고 합니다. 하지만 저는 이 부분을 사용할 수가 없었는게, Chromebook에서 간접적으로 운영체제를 설치하여 사용하고 있기 때문에 Automate 부분을 사용할 수 가 없었습니다. 컴퓨터나 사운드 카드마다 다른 것 같아, 따로 글은 올리지는 않지만, 보통은 Alsamixer에 정상적으로 사용이 가능하며, 다른 명령어를 통해서도 전환이 가능합니다.

(다른 운영체제에 듀얼부팅으로 설치만 안한다면)

이상으로 Alsamixer에 대한 글을 마치도록 하겠습니다.

'개발 환경 설정 > Linux' 카테고리의 다른 글

VScode를 ARM CPU에서 사용해보자!  (0) 2020.09.26

0. C언어를 배우며

지난 인턴 기간 동안 저는 자료구조와 알고리즘에 대해서 어렴풋이 알고는 있었지만, 실제로 다른 문제에 부딪혔을 때, 어떻게 해결하면 좋을까에 대해서 막막한 상태였습니다. 이때, 자료 구조와 알고리즘이 큰 역할을 하면서 문제를 해결한다는 것을 알게 되었고, 지난 3월부터 계속해서 자료구조와 알고리즘에 대해서 복습하고 코드를 짜보며 복습 중입니다. 기존에 사용하던 언어인 Python으로도 얼마든지 공부를 진행할 수 있을 수도 있지만, Python의 경우에는 High Level의 언어 중에서도 많이 High Level이기 때문에 쉽게 쉽게 코드를 짤 수 있는 장점이 존재하지만, 자료구조를 공부할 때에는 포인터를 쓸 수 있는 C&C++이 더 좋다고 생각을 해서 옛날에 공부하였던 언어들을 다시 꺼내게 되었습니다. 그렇게 Python의 생산성에 감탄을 표하게 되고

 

C언어및 C++를 공부할 때 필요한 Visual studio code의 세팅의 경우에는 구글에 검색해보면 많은 양의 정보가 나오니 따로 적지는 않겠습니다. 

I. 문제 봉착

이렇게 C언어를 한 번 복습하고, 본격적으로 자료구조를 공부하려던 저에게 다음과 같은 문제가 생기게 되었습니다.

 

undefined reference to 

바로 다음과 같이 여러 변수들이나 함수들이 undefined reference to로 나온다는 점이었습니다. 기존의 C언어 프로그래밍 오류는 제가 포인터를 잘못 설정하거나 변수를 잘못 적어서 일어나는 경우가 많았는데, 이와 같은 경우는 말 그대로 referenence의 각각 함수와 변수들이 잘못 설정이 되었다고 나오게 되었습니다. 하지만 저는 분명 header파일과 c파일로 각각의 함수들을 지정해주고, 정의를 하며 마지막에 mainfuncition이 있는 곳에서 실행하도록 만들어서 겹치지도 않는데 다음과 같은 문제가 발생하였습니다. 실제로 설루션을 다시 가져와도 같은 반응입니다. (본격 공부하는데 환경 때문에 미치는 케이스)

 

어떤 점이 문제일까요?

 

II. C언어의 특수성:  헤더파일과 c파일

 

파일 리스트

제가 사용한 파일의 경우 이렇게 세 가지로 나뉘게 됩니다. 그중 linkedlist의 경우 헤더 파일과 c 파일이 존재를 합니다. 많은 분들이 인터넷에 설명을 해주셨듯이 헤더 파일은 메뉴판, c파일은 본격적으로 조리하는 단계라고 보시면 됩니다. 이러한 점은 python에서도 코드가 너무 길어질 경우에 따로 py파일로 분리하여서 import - 혹은 from ~ import - 이런 식으로 각각의 함수들이나 파일 통째로 main 프로그램에서 가져 쓸 수 있게 하여서, 함수를 한 파일이 아닌 다른 파일에서도 사용이 가능하게 만들 뿐만이 아니라 코드를 분리시켜서 유지 및 보수, 수정이 더욱 쉽게 만들 수 있다는 장점이 있습니다. C언어에서는 이러한 외부에서 가져오는 c파일을 헤더 파일과 c파일로 분리하여서 사용하게 된다고 이해하시면 될 것 같습니다. 하지만 이러한 점 때문에 문제가 생기게 됩니다.

 

undefined reference to의 의미는 분명 메뉴판에는 A라는 함수가 있는데, 정작 A를 어떻게 조리할까에 대한 내용이 없을 때 발생하게 되는 것 입니다. 하지만 이렇게 반문할 수가 있을 것 같습니다.

"어? 나는 linkedlist.c라는 파일에서 그 함수를 정의를 해줬는데?"

네 맞습니다. 하지만 visuasl studio code나 gcc에서 이 순서를 반대로 컴파일을 하게 된다면 인식이 되지 않는게 당연합니다. 마치 햄버거를 조립하려고 하는데, 패티가 아직 굽히지 않는 상태와 같다고 할까요? (비유 참...)

 

III. 해결 방법

III-1. 헤더파일이고 뭐고 제거

 

결국에는 헤더파일, c파일, 메인 파일은 하나의 프로그램 코드를 각각 편의성에 맞게 분리한 것에 불과합니다. 때문에 분리하는 것을 하나로 합치면 코드가 성공적으로 돌아가긴 합니다. 파일이 몇 개 없을 때는 이 점이 제일 간편하는 방법인 것 같습니다. 하지만 이러한 점의 문제점도 존재를 하는데요.

먼저, 헤더 파일이나, c파일이 여러 파일을 넘어 갈 경우에는 굉장히 번거로운 사태가 발생을 합니다. 하나의 메인 함수에 다 붙여한다니.. 순서를 고려하면서 말이죠. 또한, 파일들과의 순서 말고도 안에서 #define이나 #include를 위로 올려 보내는 과정, 또 각각의 함수가 어떤 의존성을 가지는지 모두 파악을 하고 오려 붙여 야한다는 점이 있습니다.

두 번째론, 헤더파일과 c파일을 분리시킨 이유가 명백히 있을 시에는 이를 반감시킬 수 있습니다. 앞서 말한 듯 분리시키는 경우에는 다른 c 프로그램에서도 사용할 수도 있다는 점이 있습니다. 하지만 이렇게 하나의 파일에 몰아놓고 집중을 하게 되면, 이 파일에 의존성을 가진 프로그램들이 작동을 하지 않을 가능성이 높습니다. 

이러한 점 때문에 이론 공부에 사용하는 비교적 간단한 파일의 경우에는 추천을 드리지만, 완벽한 방법은 아닙니다.

 

III.-2 Terminal에서 gcc를 이용한 

많은 Visual studio code에서 환경설정을 해주는 것은 결국에는 gcc를 실행하는 것을 자동화시켜준다는 점에 불구합니다. 이 때문에 터미널에서 저희가 직접 gcc를 실행하는데, 우선순위를 정해서 순서대로 컴파일을 하면 문제가 해결이 됩니다.

터미널에 입력할 저희의 명령어는 다음과 같습니다.

 

gcc -o (컴파일로 생성할 이름) (main 함수가 있는 c파일) (연결된 c파일)

이 때, 컴파일로 생성할 이름과 main 함수가 있는 c파일의 이름이 일치하면 좋습니다.

연결된 c파일의 경우에는 헤더 파일과 보통 같은 이름으로 정해주는 프로그램을 의미합니다. 의존성이 심한 즉 많은 함수나 변수들을 다른 c파일과 헤더 파일에서 정의한 것을 가져다 쓰는 파일을 가장 앞으로 보내는 것이 좋습니다. 보통은 main 함수가 있는 파일이 가장 많이 함수들과 변수들을 다른 헤더 파일들과 c파일에서 가져다 사용하기 때문에 컴파일로 생성할 이름 뒤에 main 함수가 있는 c파일의 제목을 넣어주는 것이 좋습니다.

 

저의 경우에는

 

다음과 같이 넣게 되었습니다. 컴파일로 생성할 이름과 main 함수가 있는 c파일을 이렇게 같게 넣어주는 이유는 많은 분들이 참고하시는 VS code의 설정이 main 함수가 들어 있는 c 파일과 같은 이름을 가진 컴파일된 프로그램을 찾아서 실행하고 있기 때문입니다. 다르게 설정하면 아무리 실행을 해도 실행 파일은 있는데 실행을 하지 않을 수도 있습니다. 하지만 터미널을 이용하여 실행파일도 내가 직접 실행을 하겠다는 분들은 원하시는 이름으로 적어도 될 것 같습니다.

 

위에서 나온데로 터미널에 명령을 입력하게 되면

 

이렇게 컴파일된 프로그램이 생기는 것을 알 수가 있습니다. 이때, 컴파일해서 만들 프로그램 이름을 따로 지정해주지 않으면 가장 앞 파일이 사라지는 것을 목격할 수가 있으니 주의를 해주시길 바랍니다.

 

이렇게 컴파일을 한 프로그램은 실행을 하여 결과를 확인할 수가 있게 됩니다.

 

원 코드에서 문자열이 깨져서 다음과 같이 나오긴 하지만, 실행은 됩니다!

 

 

IV. 마치며

C언어는 공부할 때마다 정말 포인터 때문에 미칠 거 같고 변수도 일일히 형태를 다 지정을 해주어야 해서 솔직히 쉽다고도, 또 생산성이 높다고도 이야기를 못하겠습니다. 오늘 다룬 주제와 같이 컴파일과 실행의 개념이 또 존재를 하기 때문에 진입장벽이 낮다고도 이야기를 못할 것 같습니다. 하지만, 컴퓨터 이론 공부를 할 때, 가장 깊게 이해하는데 도움을 주고, 파이썬이나 다른 프로그래밍 언어에서 배울 수 없던 점들을 C 언어에서 일일이 수동으로 할당해가면서 할 경우에는 가장 아래의 단계에서 문제를 이해하고 해결하는데 도움을 줄 수 있는 언어인 것 같습니다. 비록 인제 C언어를 사용해 다른 공부를 시작하였지만, 앞으로도 계속 이런 점들을 정리해나가면서 C언어 고수가 되어봐야겠습니다.

 

I. Meta Programming?

인턴을 하면서 기본적인 알고리즘이나 여러 개념말고도 문제를 해결하면서 필요한 센스들이 많았습니다. 특히 C언어 배울 때 스쳐지나간 기본적인 Call by Reference, Call by Value 그리고 자료 구조와 알고리즘, 메모리 할당 등을 이용한 최적화 문제까지 컴퓨터 과학 커리큘럼을 따랐으면 기본적으로 세팅이 되어있을 개념이라 기초가 모자란 것에 대해서 많이 반성을 하게 되는 계기가 되었습니다. 하지만 프로그래밍에서 이러한 책에서 나오는 것이 아닌 다른 개념을 활용해야 쉽게 풀리는 문제들이 있습니다.

저같은 경우에는 프로세스와 쓰레드 개념을 익히면서 정말 긴 일을 하나의 무거운 일을 여러 작은 일들로 나누어서 컴퓨터가 가지고 있는 코어를 다 사용해야하는 방법을 찾아야만 했습니다. 근데 여러 일을 한 5가지로 나누는건 괜찮은데 100개 정도로 나눠서 작업을 하려하니

 

work1
work2
work3

 

이런식으로 변수를 100까지 붙혀주어야하는 것이 너무 번거롭기도 하고, 나중에 문제가 생겼을 때, 한꺼번에 고치기도 힘들더라고요. 그래서 이러한 불편함을 (찡찡거리면서) 어떻게 해결을 할까? 고민을 하는 도중에 저의 천사같은 선임 개발자 분께서

 

"그 문제는 String Implementation과 Meta Programming 을 잘 섞어서 쓰면 해결할 수 있을 것 같아요!"

 

라고 힌트를 주셨습니다.

 

이 개념의 경우에는 복잡도나 자료구조에 대한 문제도 아니고 자원을 어떻게 관리할까의 개념도 아니기 때문에 책에 절대로 나오지 않는 개념이지만 정말 유용한 개념이기도 합니다.

실제로 MIT에서 컴퓨터과학 클래스가 놓친 한 학기라는 개념에 들어간 내용이기도 합니다.

 

1/27 Meta Programming이 확실하게 들어가있습니다.

어떤 내용이길래 저의 고민을 한번에 해결하고 더 나아가서 다른 곳에서도 중요시하는 개념일까요?

 

II. 기존 프로그래밍의 한계

 

저희는 변수를 선언할 때, 변수의 이름을 먼저 넣고 그 다음에 변수에 어떤 값들을 넣을 것인가를 정해서 컴퓨터에 명령을 넣게 됩니다.

 

 

Example1

 

하지만 이러한 변수들을 100개 넘게 선언을 하려면 work1,work2,...work100까지 일일히 넣어야한다는 단점이 있습니다.

 

"그렇다면 for 문을 사용해서 쉽게 코드를 짜면 안되나요?"

 

 

Example2

이러한 시도는 막히기 마련인데, 변수를 지정할 때 완벽하게 끝까지 지정해준 상태에서 해주어야하지, 중간에 연산자가 들어가면 Python에서 인식을 할 수 없는 상태에 빠지게 됩니다. 이러한 문제는 Meta Programming을 통해서 해결할 수가 있습니다.

 

III. Meta Programming

1. eval 활용

이러한 Meta Programming의 가장 쉬운 방법은 eval을 활용하는 방법입니다.

String을 코드로 바꿔주어서 활용할 수가 있습니다. 

 

eval 활용 방법1

다음과 같이 따옴표 안에 들어간 string을 코드로 바꾸어서 작동을 하는 것을 알 수가 있습니다. 원래 work1에는 1이라는 값을 넣어주게 되었는데, eval 함수가 작동을 하면서 work1에는 11이라는 값이 들어간 가게 되었습니다. 이러한 점은 string을 쉽게 함수로 변형시켜서 활용을 할 수가 있는데요.

 

eval 활용 방법2

다음과 같이 여러 mass와 work의 뒤의 값들을 string의 결합 원리들을 이용하여 값을 바꿔나가면서 모든 변수들에 대한 코드 실행을 할 수 있음을 볼 수가 있습니다.

 

eval 활용방법 3

이러한 eval의 장점들에도 불구하고, eval 함수는 변수를 선언해주지 못한다는 단점이 있습니다. 이 때문에 저희가 목표로 하는 여러 변수들을 자동으로 생성해주는 목표에는 도달하지 못하였습니다. 이러한 점을 해결하기 위해서 저희는 exec 함수도 같이 활용해보도록 하겠습니다.

 

2. exec 함수

 

string의 값을 단순히 작동시키는 eval과 달리 exec는 Statement, 긴 문장을 실행시킬 수 있는 장점이 있습니다. 따라서, string안에 여러 연산자들이나 함수를 넣어서 작동도 가능하고, 그 안에 변수 선언도 가능이 하다는 장점이 있습니다. 이 때, Statement에 대해서 코드를 짜줄 때 문장단위로 짤 것이기 때문에 따옴표를 세개 써야할 것을 주의를 드리겠습니다.

 

exec 함수 작동 예시1

예시에서 보면 example_code라는 변수는 Statement로 이루어져있는 것을 알 수가 있는데, exec을 사용해서 이 코드를 돌렸을 때, if문에 따른 조건 판별 뿐만이 아니라 work_result에 대한 값도 같이 할당이 되면서 훌륭하게 string을 코드로 바꾸어서 작동이 된 것을 알 수가 있습니다.

그렇다면, 처음 고민인 work1,work2,...work100까지의 선언 문제도 이를 활용하여 해결 할 수가 있습니다.

 

 

exec 활용 예시

다음과 같이 직접적으로 저희가 work99와 work100을 선언을 해주지 않았는데도 exec함수를 이용해서 work 함수가 

여기서는 eval과 별 다를바 없이 코드를 짧게 짰지만, work 뒤에 들어가는 코드의 양이 길 경우에는 exec이 유용하게 사용될 수가 있습니다. 하지만 저희는 선언도 같이 해주어야하기 때문에 eval보다는 exec이 훨씬 더 적합한 선택임을 알 수가 있습니다.

저는 이러한 exec함수를 효율적으로 활용해서 work100까지 변수들을 알맞게 나누어 선언하여서 코어를 다 활용하여 일을 빠르게 끝낼 수가 있었습니다. Meta Programming을 활용하는 목적은 다르지만 일을 효율적으로 끝낼 수 있는 최고의 방법 중 하나라고 생각합니다. 

 

IV. 마치며

제가 마주친 문제를 어떻게 eval과 exec함수를 사용하여 해결했는지에 대해서 설명을 하게 되었습니다. 하지만 이러한 Meta Programming에는 이 둘의 함수를 활용한 방법 이외에도 Compile함수를 사용하여 문제를 해결하는 방법도 있습니다. 대략적인 함수의 형태는

example_code = compile('원하는 코드', '<string>', 'eval' 혹은 'single')

라는 형태로 사용이 됩니다. 여기서 eval과 single의 경우 eval은 하나의 줄안에서 끝날 수 있는 식, single은 여러 식으로 이루어져있는 Statement를 사용한다고 생각하시면 편할 것 같습니다.

이러한 compile 방법이 가장 깊고 세세하게 컨트롤 할 수 있는 방법이지만, 저는 eval과 exec으로 문제를 해결 할 수가 있어서 많이 활용하지는 않았습니다.

 

많은 양의 변수를 선언해야하거나, string 포멧을 코드로 바꿔서 사용하고 싶으면, Meta Programming에 도전해보시는 건 어떨까요?

'Programming > Python' 카테고리의 다른 글

Python 다양한 버전 Jupyter notebook에서 사용하기  (2) 2020.05.22

I. Chromium OS 설치?

크롬 OS의 경우에는 상당히 가벼운 OS입니다. 때문에 만약 웹 서핑만 할 경우에 엄청 좋은 OS라고 저는 생각이됩니다. 크로미윰 OS의 경우에는 크롬 OS와 거의 모든 기능이 동일하지만, 안드로이드 앱 마켓이 되지 않는 단점이 있습니다. 다른 Chrome Webstore의 경우에는 사용이 가능합니다. 저는 2010년에 샀던 매우 오래된 노트북이 하나있습니다. 그 노트북을 활용해서 한 번 크로미윰 OS를 설치해보려고 합니다. 물론 크로미윰 OS의 경우에도 Linux Terminal이 가상환경에서 돌아갈 것 같아서 오래는 못쓰고 옮겨야할 것 같습니다.

 

II. Chromium OS 설치 방법

저번 시간에 소개를 드렸던 Rufus라는 프로그램을 사용하면 iso 이미지를 아주 쉽게 usb나 sd카드에 입힐 수가 있으나, 크로미윰 OS에서는 더 쉬운 방법이 존재를 하기 때문에 이것을 위주로 설명을 드리고자 합니다.

바로 CloudyReady인데요, 정작 사이트 이름은 neverware이지만 설치를 한번 진행을 해보겠습니다.

 

 

준비물 :

- Chromium OS를 설치할 노트북

- USB나 SD 카드 (샌디스크껀 피해주세요)

- 시간(1시간 정도 필요합니다.)

 

 

https://www.neverware.com/

 

Neverware

Neverware's CloudReady operating system enables schools and organizations to turn the computers they already own into Chrome devices and manage them alongside Chromebooks in the Google Admin console.

www.neverware.com

다음 사이트에 접속하신 다음에, CloudyReady Edition - Home을 클릭하여 다음과 같은 그림을 찾아줍니다. 만약 본인이 쓰시는 컴퓨터가 다른 운영체제이면은 다른걸 선택하셔도 좋을 것 같습니다.

CloudyReady 설치 파일

설치가 다 되면 다음 창이 뜨게 됩니다. 8GB에서 16GB라고 하는데, 저는 8GB써도 넉넉했습니다.

그 이후에 몇 비트를 선택할 것이냐고 하는데, 한 2008년에서 2010년 이후면은 무조건 64bit 선택하셔도 될것 같습니다.

저도 이 노트북의 이전 운영체제는 32bit였는데 64bit 선택해서 설치해도 되더라고요.

 

 

이렇게 다음 다음을 누르다보면 어느 순간 완성이 되어있는 모습을 보실 수가 있습니다.

 

그럼 만들어진 USB를 가지고 BIOS 모드로 진입한 이후에 BIOS에서 부팅 우선순위를 USB로 바꿔주고 진행해보도록 하겠습니다.

 

지금부턴 사진이 많아서 양해 부탁드립니다!

CloudyReady 접속 

이렇게 창이 먼저 나오게 되고, 오른쪽 하단에 버튼이 생기게 되는데 이것을 누르게 되면,

설치 버튼, 크롬 OS에서는 이게 설정 및 상태 창이었습니다.

다음과 같이 여러 버튼이 나오게 됩니다. 어차피 저희는 이 상태에서 오래 있지 않을 것이니 바로 Install OS를 눌러주도록 합시다.

 

주의서, 그냥 모든 내용 날라간다!에 관한 내용입니다.

백업을 하셨으면 바로 Install CloudyReady를 눌러주도록 합시다.

 

크로미윰 OS 설치 중

다음과 같은 창이 나오게 되면, 크로미움 OS 설치가 진행됩니다. 제 컴퓨터 기준으로 한 30분정도 소모가 된것 같습니다. 중간에 끄면 안되고, 다 설치가 되면 굉장히 불친절하게 자동으로 꺼지게 되니 한번씩 화면을 봐주시는게 중요합니다.

그 이후에는 부팅 USB를 뽑고 (부팅 순서가 USB가 우선으로 되어있으니까) 컴퓨터를 켜주도록 하겠습니다.

 

다음과 같이 나오게 됩니다. 이 상태에서는 바로바로 기본 초기 설정이 다음과 같이 진행되게 됩니다. 참고로 언어만 한글 설정을 하게되면 키보드도 영어 설정 이후에 한글 전환이 되니까 너무 걱정하지 말고 진행하시면 됩니다.

 

 

정보 수집에 관련된 글인데, 개인정보 말고 오류에 대한 정보를 수집하겠다고 합니다.
마지막 화룡점정인 구글 계정 로그인!

이상으로 모두 설치를 마치게 되었습니다. 그 다음은 사용 모습입니다.

 

 

III. CloudyReady Cromium OS 사용

 

 

시작 화면

일단 로그인을 하고나면, 다음과 같이 나오게 됩니다. 저의 경우에는 나중에 이 사진을 캡쳐해서 파일 브라우저와 설정 버튼을 밖으로 꺼내놓게 되었습니다. 크롬북에서 사용한 모습이랑 크게 다를봐가 없어보이는데요.
크롬 대신에 크로미윰이 작업표시줄에 나타나있는 모습을 보실 수가 있습니다. 바로 설정 모드에서 Linux Terminal을 활성화시키고 걸리는 시간동안 여기저기 돌아다녀봤습니다.

 

인터넷 창

크로미윰의 경우에도 크롬과 같이 이상없이 제대로 되는 것을 확인하였습니다. 원래의 목적인 인터넷을 상당히 쾌적하게 사용할 수 있을까? 라고 생각했는데, 인터넷의 경우에는 속도가 굉장히 쾌적하게 잘 돌아가는 것을 확인하게 되었습니다.

 

더보기 창

크롬 복구의 경우에는 웹스토어에서 제가 설정해놓아서 자동으로 깔리게 되었습니다. 기본적으로 다음과 같은 창으로 구성이 되어있고, 제 노트북에 카메라가 달려있다보니, 카메라도 자동으로 설치가 되었는데, 카메라를 작동시켜보니 운영체제 설치 시에 잘 인식이 되었다는 것을 확인할 수 있었습니다.

 

이외에도 웹스토어가 자동으로 설치되는 동시에 VirtualBox도 설치가 됩니다. 저는 VirtualBox를 사용하지 않지만, 사용하시는 분이 있으면 굉장히 유용하게 사용할 수가 있으실것 같습니다.

 

IV. 사용후기 

장점

일단 인터넷은 굉장히 속도가 빨라진게 최감이 된것 같습니다. 크로미윰 OS가 리눅스 운영체제위에 크로미윰만 올리고 그 위주로 사용해서 그런지 인터넷의 경우에는 정말 나무랄때 없이 빠르게 돌아가는 것 같습니다.

또한, 블루투스, 카메라, 터치패드 등 다양한 하드웨어 같은 경우에도 잘 인식하여 설치가 되었습니다. 블루투스 스피커나 키보드, 카메라 촬영, 터치패드로 마우스 이동 등을 체크를 하였는데 상당히 잘 작동이 되었습니다.

세번째로는 제가 크롬 OS 계열을 애용하는 이유인 인터넷을 쾌적하게 사용을 하면서 리눅스로 이것저것 만져보고 싶다라는 목표가 있었는데, 리눅스의 경우에도 Debian이 잘 돌아가는 것을 확인을 하였습니다. 여러 프로그램 (Python 등)을 설치해보았는데, 아무런 문제 없이 개발 환경도 세팅이 가능하네요.

네번째로는 VirtualBox에 관한 내용입니다. 예상외로 하나 더 딸려오는데, 쓰는 사람이 많은 프로그램인 것 같습니다. 저는 잘 안써봤지만 필요하신 분들에겐 유용하겠지요!

 

단점

먼저, 크롬 OS의 장점 중 하나인 안드로이드 어플을 사용할 수 없다는 점입니다. Chromefy를 사용하면 이것도 해결할 수 있다고하는데, Chromefy를 사용하여 설치 시도 중에 실패를 하여서 포기를 하였습니다. 생각보다 스펙 비슷한거 찾고 하는게 어려운 길이더라고요.

두 번째로는, 리눅스 속도에 관한 내용입니다. 아무래도 크롬 OS의 경우에도 가상환경으로 리눅스가 돌아가는데, 크로미윰 OS의 경우에도 마찬가지로 가상환경 위에서 돌아갑니다. 크롬 OS 만큼이나 인터넷 속도는 빠르다고 느꼈지만, 문제는 리눅스는 엄청 느리게 잡히는 것 같습니다. 물론 이건 오래된 컴퓨터를 써서 나오는 착각일 수도 있다고 생각합니다. 하지만 리눅스 터미널을 키자마자 전체적으로 버벅거리는 경향이 조금은 있는 것 같습니다.

 

V. 정리

들고다니면서 쓸 수 있는 간단한 넷북용도가 필요하면 사용하면 매우 좋을 것 같습니다. 인터넷 속도는 상당히 빠른 것으로 측정이 되었고, 동영상 등 인터넷의 여러 요소들을 사용하는데는 아무런 문제가 없습니다.

다만 크롬 OS처럼 안드로이드 어플 설치나 일반 노트북처럼 여러 프로그램 설치에는 살짝 에러가 있을 수가 있으니 인터넷 머신 이상의 용도로는 사용하지 않는 것이 좋을 것 같습니다. 진짜 오래된 넷북에 설치하는게 제일 좋을 것 같다라는 생각이 들었습니다.

 

오래됬지만 가벼운 넷북에 인터넷 용도로 사용할거면 크로미윰 OS를 적극 추천드립니다.

 

 

+ Recent posts