Page tree
Skip to end of metadata
Go to start of metadata

vagrant, chef 를 통한 동일 개발환경 구축

Introduction

개발자는 왜 서버에서 문제를 일으키는 코드를 양산하는 실수를 범하는가?

양완수:구체적으로 어떤 문제와 실수를 말하는가???

김문수: 아래에 썰을 좀 풀어보았어요^^;;; 가볍게 읽어보세요~ ㅎㅎㅎ

서버환경에 영향을 받는 개발을 할 때에(기타 서버개발에도 비슷한 환경이 요구되리라 생각이 듭니다만 웹개발에 전제를 둘게요~)

개인PC에 서버에 필요로하는 프로그램들을 설치하게 된다.

가상화를 떠나서 이 프로그램들을 서버와 동일한 환경을 구축하기 위해 우리가 소요하는 시간은 대략 얼마나 걸릴까?

일반적으로 새로운 인력이 조인하게 되면 그 인력에게 하루의 시간을 투자한다.

... 하루면 될까?

김문수같은 초보개발자는 2013년 이직한 회사에 가서 닷넷환경 구축하는데에 이틀 걸렸다.

이유는 기존에 설치된 윈도우에 서비스팩이 설치되어 있지 않아 거의 마무리가 되가던 비주얼스튜디오가 OS 버전이 틀리다며 에러를 뱉은 덕분이다.

개발자를 뽑았더니 환경 셋팅도 못한다는 소리 들을까 위축되어 혼자 해결하려 삽질하다 결국 sos. 선배개발자의 도움으로 이틀동안 환경구축을 한다.

김문수는 그나마 넉살좋게 헤헷 거리며 웃어 넘겼지만 많은 개발자들이 여기서 작은 트러블을 안고가는 모습을 심심찮게 볼 수 있다.

개발자 특유의 자존감이 낳는 단점 중 하나인 경우이다.

아마 vagrant 는 이러한 이유도 한몫하면서 개발되지 않았을까?

(내가 얼마나 코딩을 잘하는데 그깟 OS에 있는 라이브러리 하나 때문에 날 우습게보다니. 열받으니까 개발환경 셋팅해버리는 거 개발하고

 이 회사 때려쳐야지. 이름은 ... 좋아, 난 능력있으니까 어디든 내가 원하는대로 떠다니겠다는 의미로. vagrant. 올~ 난 코딩만 잘하는게 아니라 작명도..멋지다.

 ps. 안타깝지만 코딩능력은 있지만 어휘력이 부족한 개발자였나보다.)

이렇게 개발자가 직접 각종 개발환경을 구축하는 데에는 시간이 엄청 소요되고 잠재된 문제점이 있다. 

여기서 잠깐, 김문수의 친구 system engineer 모군의 이야기를 들어보자.

모군이 다루는 서버는 ... 한대는 아니고 여러대다. 그리고 그 여러대는 꾸준히 늘고 있다.

김문수가 vagrant 를 알려주기 전까지 엑셀파일에 서버 증설시에 어떤 OS를 설치하고 어떤 프로그램들을 설치해야는지를 살펴보고

클릭질이나 타이핑질로 그 작업을 수행해왓다고 한다. 그때마다 터지는 문제는 바로 핑거익셉션으로 잘못된 프로그램을 설치하거나 라이브러리를 설치함으로

다른 서버에서 잘 돌아가는 프로그램이 모군이 셋팅한 서버에서 죽어나가거나 심지어 교착상태도 생겨봤다고 자랑한다.

이런 문제는 대개 서버증설 등은 모두가 잠든 시간과 같은 가장 서버 이용이 적은 시간에 야근을 통해서 수행하기때문이라고 하소연한다.

이렇게 사람은 문제를 만든다. 사람이 문제다. 코드는 문제가 되지 않는다. 그래서 코드레벨로 개발환경을 구축해야 함을 어필해본다.

 

사전준비 과정

Introduction - Vagrant

프로그램 설치

프로그램 동작 확인

  • Vagrant
    • vagrant-box-list
  • VirtualBox
    • a

Vagrant box 설치

Vagrant box에 대해...
  • Vagrant Box 목록과 실습에서 쓸 박스인 lucid32와 precise32는 대체 뭐하는 녀석들인가?
    • 코드명버전번호
      Precise Pangolin (꼼꼼한 천산갑)12.04(LTS)
      Lucid Lynx (빛나는 스라소니)10.04(LTS)
    • 상세한 차이점은 우분투 운영체제 Wikipedia 문서에서 확인이 가능합니다. 우분투의 역사가 흥미롭습니다 :)
    • 시간이 없으신 분들은 모두 읽지 않으셔도 됩니다. 단, 차이점에 대해 설명한 "버전 내역"만은 꼭 봐주세요 ^^

Vagrant box 확인

  • 설치된 box 확인은 vagrant box list 명령으로 확인 가능
  • 명령에 대한 결과로 아래와 같이 목록이 표시되면 성공
    • lucid32 (virtualbox)

    • precise32 (virtualbox)
  • box 설치와 설치된 box 목록을 확인하는 전체 과정에 대한 화면 덤프
    • vagrant-box-list

Vagrant instance 생성

  • 이제 본격적으로 리눅스서버(Ubuntu)를 하나 만들어 봅시다!
    • vagrant init precise32
    • vagrant up
  • 단, 2개의 명령으로 서버가 만들어 졌습니다.
    • 만들어진 서버의 instance를 gui를 통해 확인도 가능합니다.
    • 그리고 VirtualBox Preview를 자세히 보면 커서가 깜빡거리는 것을 보실 수 있습니다.
    • My cool picture

Vagrant instance 접속

  • 위에서 만들어진 instance를 컨트롤 하기 위한 방법으로 Provider(Virtual Box) 방식과 SSH 방식 2가지 사용 가능
    • Provider : 간단한 데모를 통해 보여드리는 것으로 자세한 설명은 생략
    • SSH : 윈도우를 제외한 나머지 운영체제에서는 vagrant instance를 생성한 디렉토리에서vagrant ssh명령을 통해 간단히 접속 가능

Windows에서 ssh를 통한 접속 방법

  • 아래 화면 캡쳐와 같이 윈도우에서 vagrant ssh 명령을 수행한 방식은 2가지

image

image

Windows에서 vagrant ssh로 접속하려면 https://gist.github.com/haf/2843680 문서 참고해 ssh.rb 파일에서 windows 환경에 대한 에러 처리 부분을 주석처리해야 한다. 최신 버전의 ssh.rb 파일 경로는 다음과 같다.

VAGRANT_HOME\embedded\gems\gems\vagrant-1.0.6.dev\lib\vagrant\ssh.rb

이 파일을 다음과 같이 주석처리 했더니 정상적으로 동작한다. 암튼 맥이나 리눅스에서는 한 방에 끝날 작업이 Windows에서는 상당한 시간을 투자해서 해결할 수 있었다.


 

      # if Util::Platform.windows?

      #   raise Errors::SSHUnavailableWindows, :host => ssh_info[:host],

      #                                        :port => ssh_info[:port],

      #                                        :username => ssh_info[:username],

      #                                        :key_path => ssh_info[:private_key_path]

      # end

 

      which = Util::Platform.windows? ? "where ssh >NUL 2>&1" : "which ssh >/dev/null 2>&1"

      # raise Errors::SSHUnavailable if !Kernel.system("which ssh > /dev/null 2>&1")

 

  • Putty 터미널 에뮬레이터를 통한 접속
    • 위 화면 authentication info 참고

image

image

스터디 내용 발표

Vagrant 란?...

Vagrant 실습

신규로 생성한 instance에서 직접 프로그램 설치 - 김문수

  • install program
    • sudo apt-get update
    • sudo apt-get install openjdk-6-jdk
    • sudo apt-get install maven
    • sudo apt-get install git

신규로 생성한 instance에서 chef solo를 통해 프로그램 설치 - 강대권

Chef download: https://learnchef.opscode.com/quickstart/workstation-setup

cookbooks

공통작업 : run java application, 포트 포워딩

Vagrant Tips

  • VirtualBox 스냅샷을 이용해 변경작업 후 문제발생을 대비해 보험을 들어둘 수 있다. 즉 변경작업 이전으로 손쉽게 되돌리기가 가능한데 디비 트랜잭션 처리와 유사하다고 보면 되겠다.
    • 스냅샷 생성
      • My cool picture
    • 스냅샷 복원
      • 복원 과정에서 새로운 스냅샷을 뜰건지 물어보는데 보통은 롤백하는 경우라 스냅샷을 만들지 않을것이기에 생성 체크박스는 해제한 후 복원작업 수행
      • My cool picture
      • My cool picture

참고자료

 

  • No labels

10 Comments

  1. 실수할뻔 했네요. ㅡ_-);;

    윈도우 가상머신에서 vagrant를 설치하고, 거기서 vagrant를 이용해서 또 우분투 가상머신을 돌릴 뻔했다능...!

     

    사전 학습자료 : http://www.slideshare.net/arawnkr/vagrant-chef

      1. vagrant box add "precise32" http://files.vagrantup.com/precise32.box
      2. vagrant init
      3. vagrant up

      을 순차적으로 실행하고 나면, 운영체제에 VirtualBox Manager의 목록에 vargrant_랜덤수 가 추가되고 자동으로 실행되는군요. ㅡ_-)>

      vagrant ssh 하면 접속됩니다.

      1. ssh 접속시,  설정 프로그램을 등록해야하나요? 

        설치는 완료되었는데  ssh 접속이 안되요><

        1. 윈도우에는 SSH 접속을 할 수 있는 클라이언트가 없습니다.

          그러니, cgwin(http://www.cygwin.com/)을 설치하고(설치시 ssh 선택 필수) 다시 시도하면 됩니다.

          혹은 putty(http://www.chiark.greenend.org.uk/~sgtatham/putty/) SSH 클라이언트를 설치하고 나와있는 정보들을 입력하면 접속가능하다고 메시지에서 알려주고 있습니다.

    1. vagrant halt : 실행되고 있는 vm 종료 

  2. Bringing machine 'default' up with 'virtualbox' provider...
    There are errors in the configuration of this machine. Please fix
    the following errors and try again:

    vm:
    * The box 'base' could not be found.

     

    위의 오류가 보이면,

    vagrant box add 를 실행한 위치에 보면 Vagrantfile 이라는 파일이 있는데, 그 파일 안에 보시면

    config.vm.box = "base"

    이렇게 되어 있을 겁니다. 이걸 자신이 받을 때 명명한 이름<vm.box.name>으로 수정하면 됩니다.

    vagrant box add <vm.box.name> http://files.vagrantup.com/precise32.box

    1. 덕분에 설치 무사히 완료^^

  3. 첨에 설치문서 띄엄띄엄 보고는 precise32.box 랑 lucid32.box  둘다 미리 다운받은 1인 ㅡㅜ;
    (도서관 와이파이는 대용량 다운을 막아버려서 핸폰 테더링으로 받는데 느려서 죽는줄 알았...) 

     로컬파일경로로 할려니 안되서 제 로컬 웹서버로 파일 이동시켜 설치하구요..

    위 순서대로 했더니 
    역시나 저도 


    the box 'base' could not be found .....


    전 그냥  
    rm -rf Vagrantfile 해서 기존 파일 지우고

    vagrant init lucid32
    vagrant up

    해서 설치 완료했습니다.^^

     인증샷 첨부! 


  4. 오늘 내용을 개인적으로 정리해보자면,

    vagrant는 가상머신VM 혹은 인스턴스(클라우드 서비스에서 한개의 가상머신을 지칭)를 패키징하여 배포하는데 적합한 도구입니다.

    이 vagrant는 가상머신(클라우드 서비스에서 사용할 때와 구분지을 목적으로 이렇게 지칭) 관리를 하는데 적합하다는 것이죠.

    가상머신에다가 개발서버(웹서버, WAS,  DB, CMS 등의 기능을 담당)로서의 환경을 설정할 수도 있고, 개발PC환경(자바, 혹은 C++, 이클립스, 비쥬얼 스튜디오)을 구축할 수도 있습니다. 가상머신에다가 어떤 용도로 어떤운영체제를 설치하고 어떤 개발환경을 구축할지를 고민하는 것은 그것을 사용하는 사람의 마음이겠죠. ^^;

    제가 생각한 vagrant는 클라우드 환경에서 서비스 운영에 필요한 환경을 설정해두고, 스케일업Scale-up(인스턴스를 추가생성하는 형태로 양적인 증가)형태로 서비스 리소스를 추가할 때 좋은 성능을 발휘할 수 있을겁니다. 전에 AWS에서 인스턴스를 하나 생성해봤는데, 그 때는 우분투 기본설치되어 있는 인스턴스만 추가되어 있었는데, 그걸 대체하고 배포할 수 있는거라면... 꽤 인상적이죠. 

    아까 이야기했던, 개발PC환경 배포를 하기 위해서는 그룹원들의 PC사양이 좋을 때 적절하지 싶습니다(넉넉한 메모리[8기가 이상]와 SSD). 

     

    개발PC환경은 삽질하면서 개별적으로!!

    개발서버환경으로 배포하기는 유용하죠!

  5. ZooKeeper를 설치하고 운영해볼 요량으로 vagrant 랑 Chef를 활용해보려고 했는데...

    Chef에서 살짝쿵 방황했네요. @_@);;

    Chef도 그냥 받을 수 있는 방법도... 이메일주소를 헌납하고 확인했습니다. ㅎㅎ