Successfully reported this slideshow.
Your SlideShare is downloading. ×

[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 98 Ad

More Related Content

Slideshows for you (20)

Similar to [H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기 (20)

Advertisement

More from KTH, 케이티하이텔 (20)

Recently uploaded (20)

Advertisement

[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기

  1. 1. 내 컴에선 잘 되던데? Vagrant로 서버와 동일한 개발환경 꾸미기 기술전략팀 | 강소리
  2. 2. @curioe 강소리입니다
  3. 3. @curioe 강소리입니다 ravash
  4. 4. 디버깅의 6단계 디버깅의 6단계
  5. 5. 디버깅의 6단계 디버깅의 6단계 1. 에러라고? 그럴 리 없어 ・・・・・・・・・・・・・・・・・・・・・・ 부정
  6. 6. 디버깅의 6단계 디버깅의 6단계 1. 에러라고? 그럴 리 없어 ・・・・・・・・・・・・・・・・・・・・・・ 부정 2. 내 컴에선 잘 되던데? ・・・・・・・・・・・・・・・・・・・・・・・・ 회피
  7. 7. 디버깅의 6단계 디버깅의 6단계 1. 에러라고? 그럴 리 없어 ・・・・・・・・・・・・・・・・・・・・・・ 부정 2. 내 컴에선 잘 되던데? ・・・・・・・・・・・・・・・・・・・・・・・・ 회피 3. 그럴리가 없을텐데 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 의심
  8. 8. 디버깅의 6단계 디버깅의 6단계 1. 에러라고? 그럴 리 없어 ・・・・・・・・・・・・・・・・・・・・・・ 부정 2. 내 컴에선 잘 되던데? ・・・・・・・・・・・・・・・・・・・・・・・・ 회피 3. 그럴리가 없을텐데 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 의심 4. 왜 그렇게 되었지? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 분석
  9. 9. 디버깅의 6단계 디버깅의 6단계 1. 에러라고? 그럴 리 없어 ・・・・・・・・・・・・・・・・・・・・・・ 부정 2. 내 컴에선 잘 되던데? ・・・・・・・・・・・・・・・・・・・・・・・・ 회피 3. 그럴리가 없을텐데 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 의심 4. 왜 그렇게 되었지? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 분석 5. 헉... 알았다! ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 각성
  10. 10. 디버깅의 6단계 디버깅의 6단계 1. 에러라고? 그럴 리 없어 ・・・・・・・・・・・・・・・・・・・・・・ 부정 2. 내 컴에선 잘 되던데? ・・・・・・・・・・・・・・・・・・・・・・・・ 회피 3. 그럴리가 없을텐데 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 의심 4. 왜 그렇게 되었지? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 분석 5. 헉... 알았다! ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 각성 6. 이게 어떻게 동작했던거지? @.@ ・・・・・・・・・ 반성
  11. 11. 디버깅의 6단계 디버깅의 6단계 1. 에러라고? 그럴 리 없어 ・・・・・・・・・・・・・・・・・・・・・・ 부정 2. 내 컴에선 잘 되던데? ・・・・・・・・・・・・・・・・・・・・・・・・ 회피 3. 그럴리가 없을텐데 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 의심 4. 왜 그렇게 되었지? ・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 분석 5. 헉... 알았다! ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 각성 6. 이게 어떻게 동작했던거지? @.@ ・・・・・・・・・ 반성
  12. 12. 왜 내 컴에서만 잘 되는 걸까? 개발 환경 불일치 Image - http://futurist.se/gldt/page/3/
  13. 13. 왜 내 컴에서만 잘 되는 걸까? 개발 환경 불일치
  14. 14. 왜 내 컴에서만 잘 되는 걸까? 프로젝트마다 다 달라 Image - http://itprojectguide.blogspot.kr/2007/02/project-variation.html
  15. 15. 해결책은 있어요 해결책은 있어요 Image - http://www.flickr.com/photos/86979666@N00/7623744678/
  16. 16. 해결책은 가상화 해결책은 가상화
  17. 17. 해결책은 가상화 로컬에 서버 VM 설치 Image - http://www.flickr.com/photos/catch2205/4361365020/sizes/o/in/photostream/
  18. 18. 해결책은 가상화
  19. 19. 해결책은 가상화
  20. 20. 해결책은 가상화 쓰기 불편한 것은 마찬가지
  21. 21. 로컬 가상머신을 손쉽게 빌드하자 로컬 가상머신을 손쉽게 관리하자.
  22. 22. 개발과 실서버의 일치를 위해 개발과 실서버의 일치를 위해 로컬 가상머신을 손쉽게 관리하자.
  23. 23. vagrant up $ vagrant up
  24. 24. Vagrant를 소개합니다. Vagrant 개발과 실서버의 일치를 위해 로컬 가상머신을 손쉽게 관리하자.
  25. 25. Vagrant를 소개합니다. Vagrant 가상머신 관리 툴 http://vagrantup.com
  26. 26. Vagrant를 소개합니다. Vagrant @mitchellh 오픈소스 MIT 라이센스 Ruby 현재 1.0.5 << 1.0.0 - 2012.03.07 << 0.1.0 - 2010.03.07
  27. 27. Vagrant를 소개합니다.
  28. 28. Vagrant로 로컬에 VM 실행하기 우분투 10.04 Ubun tu VM
  29. 29. Vagrant로 로컬에 우분투 VM 실행하기 준비물
  30. 30. Vagrant로 로컬에 우분투 VM 실행하기 VirtualBox 설치 http://virtualbox.org
  31. 31. Vagrant로 로컬에 우분투 VM 실행하기 Vagrant 설치 http://downloads.vagrantup.com
  32. 32. Vagrant로 로컬에 우분투 VM 실행하기 $ vagrant Usage: vagrant [-v] [-h] command [<args>] -v, --version Print the version and exit. -h, --help Print this help. Available subcommands: box destroy gem halt init Command Line Interface package provision reload GUI 없어요 resume ssh ssh-config status suspend up
  33. 33. Vagrant로 로컬에 우분투 VM 실행하기 @work$ vagrant box add ↵ lucid32 ↵ http://files.vagrantup.com/lucid32.box @work$ 내 로컬에서의 별칭 미리 빌드된 우분투 10.04 가상머신 이미지
  34. 34. Vagrant로 로컬에 우분투 VM 실행하기 @work$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box @work$ mkdir project @work$ cd project @project$
  35. 35. Vagrant로 로컬에 우분투 VM 실행하기 @work$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box @work$ mkdir project @work$ cd project @project$ vagrant init lucid32 @project$ 방금 우분투 가상머신 별칭
  36. 36. Vagrant로 로컬에 우분투 VM 실행하기 @work$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box @work$ mkdir project @work$ cd project @project$ vagrant init lucid32 @project$ vagrant up @project$
  37. 37. Vagrant로 로컬에 우분투 VM 실행하기 @project$ vagrant ssh Linux lucid32 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686 GNU/Linux Ubuntu 10.04.4 LTS Welcome to Ubuntu! * Documentation: https://help.ubuntu.com/ New release 'precise' available. Run 'do-release-upgrade' to upgrade to it. Welcome to your Vagrant-built virtual machine. Last login: Fri Sep 14 07:26:29 2012 from 10.0.2.2 vagrant@lucid32:~$ uname -na Linux lucid32 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686 GNU/ Linux vagrant@lucid32:~$
  38. 38. Vagrant로 로컬에 우분투 VM 실행하기 @work$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box @work$ mkdir project @work$ cd project @project$ vagrant init lucid32 @project$ vagrant up @project$
  39. 39. Vagrant 기본 지식 @work$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box h3@work$ mkdir project h3@work$ cd project @project$ vagrant init lucid32 @project$ vagrant up 분해 요. 알아도충 명령 만 요
  40. 40. Vagrant 기본 지식 @work$ vagrant box add <name> <url> VM 이미지 다운로드 B OX
  41. 41. Vagrant 기본 지식 Box 기본 설정을 가진 VM 템플릿 이미지
  42. 42. Vagrant 기본 지식 Box 기본 설정을 가진 VM 템플릿 이미지 메모리 파일시스템 네트워크
  43. 43. Vagrant 기본 지식 $ vagrant box add lucid32 http://~~ $ cd ~/.vagrant.d/box @$[HOME]/.vagrant.d/box$ ls -al drwxr-xr-x Oct 31 17:07 lucid32 Ubuntu VM Ubunt Ubuntu VM u Ubuntu VM Ubuntu VM Ubuntu VM
  44. 44. Vagrant 기본 지식 box 다운로드 공식 http://files.vagrantup.com/[box이름].box - lucid32, lucid64, precise32, precise64 3rd party http://vagrantbox.es
  45. 45. Vagrant 기본 지식 @project$ vagrant init <box-name> Vagrant 프로젝트 설정 파일 r antfile V ag
  46. 46. Vagrant 기본 지식 $ vagrant init lucid32 # -*- mode: ruby -*- # vi: set ft=ruby : Vagrant::Config.run do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "lucid32" # The url from where the 'config.vm.box' box will be fetched if it # doesn't already exist on the user's system. config.vm.box_url = "http://files.vagrantup.com/lucid32.box" # Forward a port from the guest to the host, which allows for outside # computers to access the VM, whereas host only networking does not. config.vm.forward_port 8080, 8088 # Share an additional folder to the guest VM. The first argument is # an identifier, the second is the path on the guest to mount the # folder, and the third is the path on the host to the actual folder. config.vm.share_folder "v-showcase", "/service", "spring-mvc-showcase" # Update Server config.vm.provision :shell do |shell| shell.inline = "apt-get update --fix-missing" end end
  47. 47. Vagrant로 개발 환경 구성하기 미니 개발 상황극
  48. 48. Vagrant로 개발 환경 구성하기 개발자 5명 서버: 우분투 10.04 SW: 자바6, 메이븐2(톰캣) 소스위치: /service 포트: 8080
  49. 49. Vagrant로 개발 환경 구성하기 문제 #1 서버 로컬 윈도우 2 우분투 != 맥2 10.04 우분투 1 12.04
  50. 50. Vagrant로 개발 환경 구성하기 문제 #2 서버 로컬 자바 1.6.0_24 자바 1.6.0_24 메이븐 2.2.1 메이븐 2.2.1 자바 1.7 설치환경 문서 공유; 버전 제각각 위험
  51. 51. Vagrant로 개발 환경 구성하기 문제 #3 localhost:8080/spring-mvc-showcase Address already in use 8080
  52. 52. Vagrant로 개발 환경 구성하기 문제 #4 ( 소프트웨어 다운로드 + 설치 + 설정 ) * 5
  53. 53. Vagrant로 개발 환경 구성하기 “Vagrant 를 사용해보자”
  54. 54. Vagrant로 개발 환경 구성하기 @work$ cd project @project$ ls Vagrantfile @project$ vagrant up @project$
  55. 55. Vagrant로 개발 환경 구성하기 문제 #1 해결 서버 로컬 Ubuntu VM 윈도우 2 우분투 == 맥2 Ubuntu VM 10.04 우분투 1 Ubuntu VM 12.04
  56. 56. Vagrant로 개발 환경 구성하기 @project$ git clone https://github.com/ SpringSource/spring-mvc-showcase @project$ @project$ ls Vagrantfile spring-mvc-showcase
  57. 57. Vagrant로 개발 환경 구성하기 $ vagrant ssh vagrant@lucid32:~$ sudo apt-get install openjdk-6-jdk vagrant@lucid32:~$ sudo apt-get install maven2 vagrant@lucid32:~$ vagrant@lucid32:~$ java -version java version "1.6.0_24" OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~10.04.2) OpenJDK Client VM (build 20.0-b12, mixed mode, sharing) vagrant@lucid32:~$ vagrant@lucid32:~$ mvn -version Apache Maven 2.2.1 (rdebian-1) Java version: 1.6.0_24 Java home: /usr/lib/jvm/java-6-openjdk/jre Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux" version: "2.6.32-38-generic" arch: "i386" Family: "unix"
  58. 58. Vagrant로 개발 환경 구성하기 $ vagrant package
  59. 59. Vagrant로 개발 환경 구성하기 box 공유 curioe$ vagrant package curioe$
  60. 60. Vagrant로 개발 환경 구성하기 box 공유 curioe$ vagrant package curioe$
  61. 61. Vagrant로 개발 환경 구성하기 box 공유 curioe$ vagrant package curioe$ tebica$ vagrant box add newbox http://kthcorp.com/package.box
  62. 62. Vagrant로 개발 환경 구성하기 box 공유 curioe$ vagrant package curioe$ tebica$ vagrant box add newbox http://kthcorp.com/package.box tebica$ vagrant init newbox tebica$ vagrant up tebica$
  63. 63. Vagrant로 개발 환경 구성하기 문제 #2, #4 동시 해결 환경이 설치된 box 공유 버전 설정 모두 동일 소프트웨어 다운로드 + 설치 + 설정 1명만
  64. 64. Vagrant로 개발 환경 구성하기 미니 개발 상황극 (계속) “VM쓰라고?” “로그인해서 개발해야해?” “내가 쓰는 에디터 쓰고 싶은데!”
  65. 65. 거룩한 전쟁 돌발상황 Vim이 최고! 싸우자 SublimeText 2가 대세 구글 행아웃에서 싸우자! 에막스 지옥! 진리의 젯브레인! 이클립스 완전구려!
  66. 66. Vagrant로 개발 환경 구성하기 파일 동기화 config.vm.share_folder “v-data”, “/service”, “spring-mvc-showcase” $ vagrant reload
  67. 67. Vagrant로 개발 환경 구성하기 파일 동기화 service VM spring-mvc-showcase Host
  68. 68. Vagrant로 개발 환경 구성하기 프로젝트는 무사 진행 Vim이 최고! 싸우자 SublimeText 2가 대세 구글 행아웃에서 싸우자! 에막스 지옥! 진리의 젯브레인! 이클립스 완전구려!
  69. 69. Vagrant로 개발 환경 구성하기 포트 포워딩 config.vm.forward_port 8080, 8088 $ vagrant reload Outside( Host( VM( :8080( :8088(
  70. 70. Vagrant로 개발 환경 구성하기 문제 #3 해결 localhost:8088/spring-mvc-showcase 8088 8080
  71. 71. Vagrant로 개발 환경 구성하기 SSH $ vagrant ssh $ ssh vagrant@localhost -p 2222 Outside( Host( VM( :22( :2222(
  72. 72. Vagrant로 개발 환경 구성하기 $ git add Vagrantfile $ git commit -m ‘개발 환경 설정’ $ git push
  73. 73. Vagrant로 개발 환경 구성하기 서버 OS != 로컬 OS 서버 OS == 로컬 OS 설치 환경 문서로 공유 설치 환경 자체가 공유 소프트웨어 버전 불일치 소프트웨어 버전 전부 일치 개발자마다 개발 환경 구축 설치는 단 한명이! 쓰고 있는 포트 충돌 손쉬운 포트 포워딩
  74. 74. Vagrant로 개발 환경 구성하기 $ vagrant destroy
  75. 75. Vagrant로 개발 환경 구성하기 “사실은 더 복잡해요”
  76. 76. 분산 환경 구성하기 Multi-VM Vagrant::Config.run do |config| config.vm.define :web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 end config.vm.define :db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306 end end
  77. 77. 분산 환경 구성하기 Host-Only 네트워킹 Vagrant::Config.run do |config| config.vm.define :web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 web_config.vm.network :hostonly, "10.11.12.13" end config.vm.define :db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306 db_config.vm.network :hostonly, "10.11.12.14" end end
  78. 78. Vagrant 사용 일반적인 사용법 1. box 는 사내 웹서버에 업로드 $ vagrant box add ~ 2. 프로젝트 내에 Vagrantfile을 포함 $ git add Vagrantfile $ git commit -m ‘개발 환경 설정’ 3. Vagrant 사용 $ vagrant up
  79. 79. Vagrant 사용 facebook/tornado https://github.com/facebook/tornado/blob/master/maint/vm/ubuntu10.04/Vagrantfile
  80. 80. 프로비저닝 조금 아쉬워요 소프트웨어 버전 업데이트 box는 이미 배포 완료
  81. 81. 프로비저닝 프로비저닝 Image - http://www.scalarium.com/features/automation/
  82. 82. 프로비저닝 프로비저닝 config.vm.provision :{provisioner} shell chef puppet
  83. 83. Chef 프로비저닝 Chef Server 프로비저닝
  84. 84. Chef 프로비저닝 Chef Server 프로비저닝 VM
  85. 85. Chef 프로비저닝 Chef Server 프로비저닝 config.vm.provision :chef_client do |chef| chef.chef_server_url = "http://cocina.kthcorp.com" chef.validation_key_path = "chef/validation.pem" chef.run_list = ["role[baas]"] end
  86. 86. Chef 프로비저닝 “Chef 서버 없어도 실망 마세요~”
  87. 87. Chef 프로비저닝 Chef Solo 프로비저닝 VM
  88. 88. Chef 프로비저닝 Chef Solo 프로비저닝 !"" cookbooks #"" apache2 #"" apt #"" php !"" php_sample config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "php_sample" end https://github.com/curioe/vagrant_sample
  89. 89. Chef 프로비저닝
  90. 90. Vagrant로 VM을 관리하자 Vagrant 개발과 실서버의 일치를 위해 로컬 가상머신을 손쉽게 관리하자.
  91. 91. vagrant up 프로젝트를 새로 시작할 때
  92. 92. vagrant up $ vagrant up
  93. 93. vagrant up 프로젝트에 새 동료가 참여할 때
  94. 94. vagrant up $ vagrant up
  95. 95. vagrant up 서버와 동일한 개발 환경을 꾸미기 위해
  96. 96. vagrant up $ vagrant up
  97. 97. 감사합니다. 개발실 / 기술전략팀 / 강소리 curioe@kthcorp.com @curioe
  98. 98. 고마워요, 레퍼런스 레퍼런스 https://speakerdeck.com/mitchellh/develop-and-test-configuration- management-scripts-with-vagrant https://speakerdeck.com/u/lewg/p/consistent-local-development- with-vagrant-and-chef

×