버추얼 머신을 통한 개발 환경 설정
스마트폰이 처음 등장했을 때, 내가 원하는 기능을 제공하는 앱을 검색해서 설치해 사용하고, 더이상 필요가 없으면 바로 없앨 수 있는 기능을 보고, 개발환경도 설치나 설정에 있어서 앱 스토어와 같은 곳에서 필요한 도구나 프로그램을 가져와 사용하도록 갖추어진다면, 정말 편리하고 간편할 것 같다는 생각을 했었습니다. 이러한 상상을 했던 것이 불과 몇년전인데, 상상했던 환경을 구성한다는 것이 이제는 현실이 되는 것 같습니다. 현실이 되게 하는 그것이 바로, '가상화 기술'입니다.
요즘과 같이 시스템 구성 요소가 다양한 OS, 다양한 서버, 다양한 솔루션들로 이루어지는 환경에서는 개발환경을 하나의 머신이나 OS에 구성하기가 쉽지 않습니다. 반대로, 여러 머신이나 OS에 있는 내용을 하나의 개발 머신또는 OS로 구성하는 것도 쉽지 않습니다. 여기에는 실제 운영환경과 다른 개발환경을 만들어야하는 노력이 필요하며, 다양한 설정 방법을 통해 테스트 및 운영 서버에 배포하도록 해야하기 때문에 그로 인한 부담이나 노력은 상당합니다.
또한 운영팀에서도 하나의 소스를 여러 프로젝트팀들이 접근하여 각자의 개발환경에 맞게 세팅하도록 만든다던지 하는 노력이 필요하고, 여러 개발환경에서 개발된 내용을 운영계에 배포하고자 할 때에는 개발자 로컬 환경이나 소스에 설정된 내용이 각기 다르도록 해야하기 때문에 그로 인한 각별한 주의가 필요하고 배포에 대한 부담 역시 증가합니다.
최근 이러한 부담을 버추얼 머신(Virtual Machine, VM) 기술을 통해서 어느 정도 줄일 수 있는 방법들이 강구되고 있으며, 실제로 VM을 통한 CI 기술(참조 : Travis CI)까지도 등장하고 있는 상황입니다. 따라서, 본문에서는 오픈 소스 버추얼 머신인 VirtualBox를 통해 Linux를 설치하고, 여기에 개발 환경을 설정하여 로컬 PC에서 VM 상의 별도 OS에 다양한 개발 환경을 설정하고 개발할 수 있는 방법을 소개하고자 합니다.
가상 머신(Virtual Machine) 이란?
가상 머신(Virtual Machine, VM)은 단순하게 컴퓨터 기능을 가상으로 흉내내는 에뮬레이터 기능을 하는 프로그램입니다. 1960년대를 거슬러 올라가면 시스템 가상 머신과 프로세스 가상 머신이라는 영역에서 출발했으며, 이는 하나의 머신에서 여러 사용자들이 사용하도록 하는 기술을 발전시키다보니 나타난 영역입니다.
이러한 VM 기술은 하드웨어나 OS 영역까지도 가상으로 만들 수 있도록 발전하여, 현재는 서로 다른 OS 상에서 다양한 OS를 설치하고 가동할 수 있습니다. (참고 : 가상화 개요) 예를 들어, Windows OS 환경에서 VM 프로그램을 설치하여 Linux나 또 다른 Windows OS, 심지어 Unix나 Mac OS 까지도 설치할 수 있으며, 이 OS 위에서 하드웨어까지도 가상으로 실행할 수도 있습니다. 특히, 이러한 VM 기술은 클라우드나 서버 가용성 기술까지 적용되어, 단순히 사용자 PC에서의 가상화를 넘어 서버 기술까지도 확장되고 있는 추세입니다.
로컬 PC에서의 가상 머신 종류
로컬 PC는 크게 Windows, Mac, Linux로 나뉘며, 이러한 OS에서 사용할 수 있는 소프트웨어는 유료인 VMware와 Paralles가 대표적이고, 오픈 소스로는 VirtualBox가 대표적입니다. (참조 : VM 애플리케이션 종류) 최근 Microsoft에서도 Windows 10을 본격적으로 배포하면서 Windows 또는 iOS에서 실행되는 앱을 Windows 10 OS에서도 실행할 수 있는 VM인 Islandwood 프로젝트를 오픈소스화 했습니다. (관련기사 : Islandwood 프로젝트 오픈소스화) VM을 사용하여 점점 더 많은 영역들에서 더 확장된 기술을 사용하도록 지원하고 있는 추세입니다.
VirtualBox 설치하기
VirtualBox는 설치가 아주 간단합니다. virtualbox.org 사이트에 접속해서 로컬 OS에 해당하는 파일을 다운받아 설치하면 됩니다. 일반적인 VM이 그렇듯이 크게 Windows, Mac OS X, Linux 등을 지원하며, 설치한 프로그램을 실행 후 '새로 만들기'를 이용해서 또 다른 OS를 설치하면 됩니다.
VirtualBox에서 Linux 설치
Linux를 설치하려면 CentOS나 Ubuntu에서 설치파일을 다운로드 받고, VirtualBox를 통해 설치 파일(통상 이미지 파일)을 지정해주면 됩니다. 개발 환경을 구성할 때 Oracle DB를 설치해야 한다면, Ubuntu 보다는 CentOS를 설치하는 것이 Oracle 설치 과정을 좀 더 쉽게 진행할 수 있는 방법입니다.
Linux 배포 이미지를 다운로드 받았다면, VirtualBox에서 '새로 만들기' 메뉴를 통해 해당 설치 파일(이미지 파일을) 지정해서 설치를 하면 됩니다.
가상 머신을 만들때 설치에 필요한 메모리나 저장소 용량은 선택하도록 되어 있으며, 적정한 값을 입력 혹은 조정하여 만들면 됩니다. 최초 시작시 실행할 설치 파일을 지정하게끔 되어 있으며, 해당 설치 이미지 파일을 지정하여 절차에 따라 OS 설치를 진행하면 됩니다.
VirtualBox를 개발환경으로 사용하기
VirtualBox에 Linux가 설치되면 필요한 소프트웨어를 Linux에 설치하여 개발환경을 갖추어서 사용하면 되는데, 이러한 개발환경을 갖추는데에 필요한 지식이 네트워크를 구성하는 방식입니다. VirtualBox는 다양한 네트워크 방식을 지원하지만, 개발환경에서는 외부 네트워크가 연결되지 않더라도 VirtualBox가 설치된 호스트와 VirtualBox 내에 설치된 게스트와의 통신이 유지되는 것이 중요합니다. 따라서 이를 위해 호스트 전용 네트워크(Host-only networking)를 사용합니다. 이 네트워크 방식은 호스트와 게스트 머신끼리 내부 IP를 사용하여 연결되기 때문에 외부 인터넷 연결과 상관없이 로컬 PC에서 개발환경 구성을 가능하게 합니다. 또한, 가상머신에서는 여러 네트워크 어댑터 설정이 가능하기 때문에 언제든지 필요한 네트워크 어댑터 설정이 가능합니다. (참조 : 버추얼박스 네트워크 이해 및 구성 - 완벽가이드)
위의 화면은 VirtualBox에서 호스트 PC와 게스트 PC간에 호스트 전용 네트워크로 설정 후, 내부 IP인 192.168.56.101로 세팅한 화면으로, 이러한 네트워크 구성을 통해 실제 외부 인터넷이 안되더라도 호스트와 게스트 만의 연결이 가능합니다. 또한, 추후 가상 머신을 더 추가하는 경우에도 게스트의 IP를 내부 IP로 정적 할당하면(통상 192.168.56.101 이후로 순차적으로 부여하면 됨) 폐쇄적인 네트워크 환경에서도 사용이 가능합니다.
네트워크가 일단 연결되었다면, 텔넷 프로그램으로 직접 연결을 시도해볼 수도 있습니다. (물론, 게스트 PC에서는 해당 서비스에 맞는 방화벽이 열려있어야 통신이 가능할 것입니다.)
일단 네트워크가 연결되면, FTP와 같은 필요한 서비스들을 설치하고 호스트 PC에서 필요한 내용을 통제할 수 있습니다. 오라클 역시 FTP와 텔넷을 통해 설치 후, 호스트에서 연결할 포트만 방화벽으로 여는 세팅을 하면, 호스트 PC에서 사용하는 것은 일반 개발 서버에 수행하는 방식과 동일합니다. (참조 : CentOS에서 오라클 설치하기)
VirtualBox를 개발환경으로 사용할 때의 이점
가상머신에 필요한 개발 환경을 설정한 후 이를 개발시 사용할 때에 아래와 같은 상황에서는 상당한 이점이 있습니다.
- 특정 1인이 개발 환경 설정 후, 이를 모든 이에게 공유해서 사용하면, 복잡한 개발환경 설정이나 필요 테스트 데이터를 이관하려는 노력이나 시간이 크게 절약된다. 이는 가상머신의 상태를 포함한 import/export를 통해 가능하다.
- 동시성과 같은 문제는 로컬에 가상머신을 여러개 사용하여 재현이나 테스트가 가능하며, 정확한 분석이 가능하다.
- 특히, 특정 문제 발생시 해당 상태를 그대로 shapshot을 사용해 전문가에게 의뢰가 가능하며, 전문가는 이를 재현하면서 분석 및 해결이 가능하다.
이 밖에도 다양한 이점을 발견할 수 있지만, 개발환경 설정이 특정 파일 import/export로 한번에 세팅된다는 매력이 가상환경을 구성하는 가장 큰 장점으로 보입니다. 다만, 이러한 개발환경을 갖추거나 다양한 머신을 테스트해보려면 로컬 PC의 성능도 어느 정도는 뒷받침을 해주어야 하는 단점은 있습니다. Windows 32bit 환경에서는 상당한 제약들로 인해서 사용이 무리가 될 수 있겠지만, 최근 리눅스 OS들이 상당히 가벼운 버전들로 나오기 때문에 물리적인 제약을 최소한으로 영향받게 만든다면 사용을 고려해도 좋을 듯 싶습니다.