VirtualBox: Windows 7에 Ubuntu 개발환경 만들기

Continuous Integration 2015.11.19 02:57

발생일: 2015.11.18

키워드: VirtualBox, Ubuntu, Linux, Virtual Machine, Cygwin

문제

프로젝트 배포시 버전 및 git branch 관리를 위해 shell script를 이용하고 있는데, 개발 환경이 Windows라 shell script를 사용할 수 없는 상황이다. Cygwin라는 대안이 있지만, 리눅스나 맥에서만큼의 호환성을 기대하기 어려운 관계로 Windows에 Linux Virtual Machine을 설치해보기로 했다. 

해결책

Virtual Machine을 구성하기 위해서는 Virtualization Tool를 선택해야하는데, 크게 VMware의 vSphere와 Oracle의 VirtualBox라는 두개의 소프트웨어를 많이 쓰는 듯 하다. VMware의 vSphere는 유료고 VirtualBox는 무료이므로 당연히 VirtualBox로 결정.

https://www.virtualbox.org/ 로 가서 VirtualBox 5를 다운받아 설치하고나면 어떤 OS로 설치를 진행할지 물어보는데 이전에 미리 BIOS에서 가상화지원을 체크해두어야 한다.

Ubuntu 64bit로 결정해주고, 이제 http://www.ubuntu.com/download/desktop 로 가서 Ubuntu를 64bit로 다운받는다. 

Ubuntu는 iso 형태의 이미지 파일로 다운이 되는데, 이 이미지 파일을 VirtualBox에서 불러들여 Start해주면 Ubuntu 이미지를 불러들여서 부팅이 시작된다. 

얼마 지나지 않아 설치가 완료되고, 가상머신을 재부팅하면 Ubuntu가 작동하는 것을 확인할 수 있다. 

그런데 화면이 너무 작고, 너무 느리다. 

화면이 작은 이유는 그래픽에 할당된 메모리가 너무 작기 때문인데 (12MB) 이것을 128MB로 늘려주면 전체화면으로 봐도 무리가 없다.

속도가 느린 이유는 메모리가 너무 작기 때문인다. (768MB) 이것을 8G로 늘려주면 속도도 제법 빨라진다.

이제 어느정도 쓸만해졌으니 개발환경을 구축한다.

먼저 git를 설치한다. 안타깝게도 애용하던 SourceTree는 리눅스버전이 없다. 어차피 git으로 대단히 복잡한 작업을 할일이 없으니 git은 커맨드라인을 이용하는 것으로 대신한다.

대신 git branch를 표시해주는 zsh를 설치하고 기본터미널로 zsh를 사용하면 사용성이 향상된다.

git을 설치했으니 repository에서 코드를 퍼온다. 이참에 ssh키를 생성해서 repository에 등록해준다. 

이어서 Maven과 JDK, IntelliJ도 깔아준다. Node도 필요하니 NVM을 설치한 뒤에 nvm install 커맨드를 이용해 원하는 node 버전을 설치한다.

mvn clean install 커맨드로 프로젝트가 정상적으로 컴파일되는 것을 확인한다. 

이쯤되니 개발환경은 세팅이 끝난 것 같은데, 하드용량이 부족한 것 같다. VirtualBox에서 처음 하드디스크 크기를 결정할때 8GB로 잡아두었는데 이정도로는 OS에 IDE 그리고 각종 Dependency들을 담기에 부족한 것 같다.

다행히 하드 용량을 나중에 늘리는 것이 가능하다. 일단 현재의 세팅은 소중하니까 현재의 하드디스크 가상이미지를 VBoxManager clonehd 커맨드를 이용해 복제한다. 그런데 이때 --variant Standard 옵션을 주면 복제된 디스크이미지의 용량을 컨트롤 할 수 있게 된다. 

디스크이미지를 복제하고 나면, VBoxManager modifyhd 커맨드를 이용해서 용량을 늘려준다. 이때 사용해야 하는 옵션은 --resize로 

VBoxManager modifyhd "C:\abc\def.vdi" --resize 51200 이라는 커맨드를 입력하면 "C:\abc\def.vdi"라는 디스크이미지의 사이즈가 50기가로 늘어나게 된다.

그러나 아직 한단계가 더 남았다. 

확장된 파티션을 Ubuntu에서 인식하게 해주어야 되는데 이때 GParted라는 소프트웨어를 사용한다. Ubuntu 설치 이미지에 들어있으니 VirtualBox에서 Optical Drive에 설치 이미지를 물려주고 부팅을 한다. 설치메뉴가 뜨면 try ubuntu 메뉴를 통해 Ubuntu를 시작한다. GParted를 실행하면 새로 확장된 파티션이 놀고 있는 것이 보인다. 기존의 파티션을 마우스 드래그로 끝까지 잡아당겨주는 것으로 설정은 끝이다. 파티션 확장에 성공하고나서 재부팅하면 하드디스크 용량이 늘어난 것을 확인할 수 있다. 그러나 혹시 모를 데이터 손실을 방지하기 위해서 앞으로는 하드용량 확장을 먼저 하고, 그 뒤에 개발환경을 설정하는 것이 안전할 듯 하다.

이제부터 윈도우로 개발하고 git으로 push한 다음 배포와 버전관리는 Ubuntu VM에서 실행할 수 있다. 또한 누군가 새로 개발자가 들어왔을 때 이번에 만든 VM을 나눠주기만 하면 간단하게 이미 완성된 개발환경을 이용할 수 있게 된다.

네줄요약:

VirtualBox로 Window 컴퓨터에 Ubuntu를 설치할 수 있다.

화면이 작으면 그래픽 메모리를 늘리면 된다.

속도가 느리면 메모리를 늘리면 된다.

하드가 작으면 VBoxManager modifyhd --resize 커맨드로 원하는만큼 하드용량을 늘리면 된다.





Trackbacks 0 : Comments 0

Write a comment


Google App Engine (Python)에서 환경변수 저장하기

Google Cloud Platform 2015.11.12 12:00

발생일: 2015.11.10

키워드: Google App Engine, app.yaml, python, ConfigParser


문제:

어플리케이션에 필요한 환경변수를 properties.ini 파일에 저장하고 이를 ConfigParser로 불러오는 식으로 환경변수 설정을 해두었는데, 로컬에서는 별 문제가 없다가 App Engine Launcher를 통해 Deploy하고 보니 properties.ini 파일을 찾지 못해 에러가 발생했다. 아마도 함께 업로드 되지 않거나 업로드 되더라도 인식되지 않는 모양.


해결책:

app.yaml에 환경변수를 저장하고 어플리케이션에서는 os.environ로 읽어들인다. app.yaml에 env_variables라는 엘리먼트에 정의해놓으면 된다. 그럼 App Engine이 알아서 이 엘리먼트에 정의된 변수들을 os.environ에 넣어준다.

예를 들어 API_KEY라는 환경변수가 필요하다고 하면, app.yaml에

env_variables:

  API_KEY: 123456789

라고 정의해놓은 뒤, main.py에서 

api_key = os.environ.get('API_KEY')

해주면 되는 식이다.


출처

https://cloud.google.com/appengine/docs/python/config/appconfig?hl=en



Trackbacks 0 : Comments 0

Write a comment


Sprint 0: 프로젝트 준비하기

Project Management 2015.11.09 10:00

발생일: 2015.11.08

키워드: React, Flux, Angular2, Google Cloud Platform, Flask, MySQL, Express, MongoDB, Heroku


목표:

고심고심 끝에 프로젝트에 사용할 기술들을 최종 결정했다.

1. React.js를 이용해서 Web Application을 만들어보자.

2. Google Cloud Platform을 통해 클라우드 이용에 익숙해져보자


사용할 스킬셋:

Front End: React + Flux (Angular2를 두고 끝까지 고민했지만 프로젝트의 목표가 React 공부인 만큼 익숙하지 않은 기술에 도전해보기로 결정)

Back End: Flask + MySQL (Express.js + MongoDB를 두고 끝까지 고민했지만 프로젝트의 목표가 React 공부인만큼 백엔드는 간단하고 익숙한 기술을 사용하기로 결정)

Envirionment: Google Cloud Platform(막판에 Express.js + MongoDB를 위해 Heroku를 써볼까도 했지만 일단 GCP로 결정)


Sprint 0 목표:

1. 개발 환경을 구축한다. (IDE 선정, Bitbucket Repository 생성, Continuous Integration 설정)

2. 사용자 인증 REST API를 작성한다.

3. 홈 스크린을 개발한다.

4. 회원 가입 스크린을 개발한다.


Sprint 0 기한: 2015.11.14


'Project Management' 카테고리의 다른 글

Sprint 0: 프로젝트 준비하기  (0) 2015.11.09
Trackbacks 0 : Comments 0

Write a comment