arcus 설치하면서 세가지 이슈가 있었다.


1. python의 easy_install을 위한 python 처리 작업

2. zookeeper 컴파일하면서 ivy.jar를 다운로드를 못받는 문제(파일이 깨진 상태로 hang) - 이 문제는 사소한 이슈

3. memcached 빌드 실패가 존재했다. 


ivy.jar 파일은 repo.maven.org에서 다운받아서 처리했고 memcached 컴파일은 컴파일 이슈가 있었다. 에러가 2개 발생하면서 memcached 바이너리가 설치가 되지 않았다. 


내 mac의 gcc는 4.2.1 이어서 문제가 된 듯 하다. 4.2로 컴파일 하면 문제가 없다. 


$ gcc --version

Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1

Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)

Target: x86_64-apple-darwin13.3.0

Thread model: posix



정상적으로 memcached 바이너라가 설치되면 다음 로그를 볼 수 있다. 



................


./install-sh -c -d '/mydev/util/arcus/lib'

 /bin/sh ./libtool   --mode=install /usr/bin/install -c   ascii_scrub.la basic_engine_testsuite.la default_engine.la example_protocol.la stdin_term_handler.la syslog_logger.la '/mydev/util/arcus/lib'

libtool: install: /usr/bin/install -c .libs/ascii_scrub.so /mydev/util/arcus/lib/ascii_scrub.so

libtool: install: /usr/bin/install -c .libs/ascii_scrub.lai /mydev/util/arcus/lib/ascii_scrub.la

libtool: install: /usr/bin/install -c .libs/basic_engine_testsuite.so /mydev/util/arcus/lib/basic_engine_testsuite.so

libtool: install: /usr/bin/install -c .libs/basic_engine_testsuite.lai /mydev/util/arcus/lib/basic_engine_testsuite.la

libtool: install: /usr/bin/install -c .libs/default_engine.so /mydev/util/arcus/lib/default_engine.so

libtool: install: /usr/bin/install -c .libs/default_engine.lai /mydev/util/arcus/lib/default_engine.la

libtool: install: /usr/bin/install -c .libs/example_protocol.so /mydev/util/arcus/lib/example_protocol.so

libtool: install: /usr/bin/install -c .libs/example_protocol.lai /mydev/util/arcus/lib/example_protocol.la

libtool: install: /usr/bin/install -c .libs/stdin_term_handler.so /mydev/util/arcus/lib/stdin_term_handler.so

libtool: install: /usr/bin/install -c .libs/stdin_term_handler.lai /mydev/util/arcus/lib/stdin_term_handler.la

libtool: install: /usr/bin/install -c .libs/syslog_logger.so /mydev/util/arcus/lib/syslog_logger.so

libtool: install: /usr/bin/install -c .libs/syslog_logger.lai /mydev/util/arcus/lib/syslog_logger.la

 ./install-sh -c -d '/mydev/util/arcus/bin'

  /bin/sh ./libtool   --mode=install /usr/bin/install -c engine_testapp memcached '/mydev/util/arcus/bin'

libtool: install: /usr/bin/install -c engine_testapp /mydev/util/arcus/bin/engine_testapp

libtool: install: /usr/bin/install -c memcached /mydev/util/arcus/bin/memcached

 ./install-sh -c -d '/mydev/util/arcus/include/memcached'

 /usr/bin/install -c -m 644 include/memcached/callback.h include/memcached/config_parser.h include/memcached/engine.h include/memcached/engine_common.h include/memcached/engine_testapp.h include/memcached/extension.h include/memcached/extension_loggers.h include/memcached/genhash.h include/memcached/mock_server.h include/memcached/protocol_binary.h include/memcached/protocol_plugin.h include/memcached/server_api.h include/memcached/types.h include/memcached/util.h include/memcached/vbucket.h include/memcached/visibility.h '/mydev/util/arcus/include/memcached'




mac에서의 arcus 설치 정보는 다음과 같다. (https://github.com/naver/arcus 참조)



# Rquirements: JDK


# for easy_install 

$ python -c "$(curl -O http://python-distribute.org/distribute_setup.py)"


# Install dependencies

$ brew install ant autoconf automake libtool pkg-config cppunit homebrew/dupes/apple-gcc42


# Clone & Build

$ git clone https://github.com/naver/arcus.git

$ cd arcus/scripts

$ CC=gcc-4.2 ./build.sh


# Setup a local cache cloud with conf file. (Should be non-root user)

$ ./arcus.sh quicksetup conf/local.sample.json


# Test

$ echo "stats" | nc localhost 11211 | grep version

STAT version 1.7.0

$ echo "stats" | nc localhost 11212 | grep version

STAT version 1.7.0




Posted by '김용환'
,



virtualbox에서 vagrant 이미지가 있는 상태에서 docker를 설치했으나 ([docker설치] linux 3.8.0 이하에서 docker 설치/사용하기 ) boot2docker 가 새로 만들어지면서 virtualbox 에서 바로 사용가능하다. 



아래와 같은 환경 구성이 가능하다고 해서 테스트해본다. 


docker container

------------

docker server

------------

boot2docker

-----------

virtualbox

-----------

macos

-----------




boot2docker 설치

 $ brew install docker boot2docker

 $ docker -v

Docker version 1.1.2, build d84a070


boot2docker 초기화 

$ boot2docker init

2014/09/03 01:43:43 Creating VM boot2docker-vm...

2014/09/03 01:43:43 Apply interim patch to VM boot2docker-vm (https://www.virtualbox.org/ticket/12748)

2014/09/03 01:43:43 Setting NIC #1 to use NAT network...

2014/09/03 01:43:43 Port forwarding [ssh] tcp://127.0.0.1:2022 --> :22

2014/09/03 01:43:43 Port forwarding [docker] tcp://127.0.0.1:2375 --> :2375

2014/09/03 01:43:43 Setting NIC #2 to use host-only network "vboxnet0"...

2014/09/03 01:43:43 Setting VM storage...

2014/09/03 01:43:49 Done. Type `boot2docker up` to start the VM.


boot2docker init 실행 완료 후 virtualbox 화면을 보면, boot2docker-vm  이미지가 추가되었고 '전원이 꺼짐' 상태로 되어 있다.

boot2docker up

2014/09/03 01:49:28 Waiting for VM to be started...

...........

2014/09/03 01:50:00 Started.

2014/09/03 01:50:00 To connect the Docker client to the Docker daemon, please set:

2014/09/03 01:50:00     export DOCKER_HOST=tcp://192.168.59.104:2375


boot2docker up 실행 완료후 virtualbox 화면을 보니, boot2docker-vm 이미지의 상태가 '실행중'이라고 바뀌었다.  설명을 잘 보면, docker daemon에 붙기 위해서는 DOCKER_HOST를 export 하라고 되어 있다. 

DOCKER_HOST를 지정하고 docker version을 실행하면 client 와 server docker 버전이 출력된다. 

 $ DOCKER_HOST=tcp://192.168.59.104:2375 docker version

Client version: 1.1.2

Client API version: 1.13

Go version (client): go1.2.1

Git commit (client): d84a070

Server version: 1.1.2

Server API version: 1.13

Go version (server): go1.2.1

Git commit (server): d84a070


지금까지는 docker 클라이언트와 docker 서버를 연결하였다.


dcker를 사용하여 dockerfile/ghost 이미지를 다운받는다. 

 $ DOCKER_HOST=tcp://192.168.59.104:2375 docker pull dockerfile/ghost

Pulling repository dockerfile/ghost

$ DOCKER_HOST=tcp://192.168.59.104:2375 docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE

dockerfile/ghost    latest              aad91b0a4e83        35 minutes ago      602.8 MB



포트포워딩을 설정하여 docker container 실행을 할 수 있다. 

$ DOCKER_HOST=tcp://192.168.59.104:2375 docker run -d -p 80:2368 dockerfile/ghost

36f61ab4f3ae10befe661d516380a56465643b75c62383f6c3486aa60014da7c



docker 서버의 process status 상황을 확인한다. 포트 포워드 정보 확인이 가능하다.

DOCKER_HOST=tcp://192.168.59.104:2375 docker ps 

CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS              PORTS                  NAMES

36f61ab4f3ae        dockerfile/ghost:latest   bash /ghost-start   22 minutes ago      Up 22 minutes       0.0.0.0:80->2368/tcp   angry_curie   



docker container 종료를 할 수 있다. docker ps 명령어를 이용하여 아무런 process 가 없는지 확인가능하다.  

DOCKER_HOST=tcp://192.168.59.104:2375 docker stop  36f61ab4f3ae

36f61ab4f3ae

DOCKER_HOST=tcp://192.168.59.104:2375 docker ps 

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES


가상 컨테이너인 dockerfile/ghost 이미지 OS의 터미널 접근할 때 다음 명령어를 이용한다. 

$ DOCKER_HOST=tcp://192.168.59.104:2375 docker run -i -t dockerfile/ghost /bin/bash 



Posted by '김용환'
,


linux 3.8.0 이하 버전에서는 docker를 실행할 수 없다. ubunut 12.04 (precise 64)에서 docker 설치를 진행하였다. 아래와 같은 환경에서 테스트하였다. 


--------------------------------

docker 

-------------------------------

vagrant(Ubuntu Precise 12.04)

-------------------------------

virtualbox

-------------------------------

macos 

--------------------------------


 

ubuntu 12.04에서 kernel 버전이 3.2.0 인 것을 확인하고 kernel 업그레이드 후 reboot


 vagrant ssh

vagrant@precise64:~$ cat /proc/version

Linux version 3.2.0-23-generic (buildd@crested) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu4) ) #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012

vagrant@precise64:~$ sudo apt-get update && sudo apt-get install linux-image-generic-lts-raring

vagrant@precise64:~$ sudo reboot


docker 설치 


 $ vagrant ssh

vagrant@precise64:~$ cat /proc/version

Linux version 3.8.0-44-generic (buildd@tipua) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #66~precise1-Ubuntu SMP Tue Jul 15 04:01:04 UTC 2014

vagrant@precise64:~$ sudo apt-get install python-software-properties && sudo add-apt-repository ppa:dotcloud/lxc-docker

vagrant@precise64:~$ sudo apt-get update

vagrant@precise64:~$ sudo apt-get install lxc-docker


ubuntu 설치후 /bin/bash 실행 및 echo "hello world" 테스트,

ubuntu 12.04 위에 docker 이미지 ubuntu 14.04 리눅스 확인. 


vagrant@precise64:~$ sudo docker run -i -t ubuntu /bin/bash

root@42c1c054d4cf:/# exit

vagrant@precise64:~$ sudo docker run -i -t ubuntu /bin/echo "hello world"

hello world

vagrant@precise64:~$ sudo docker run -i -t ubuntu /bin/bash              

root@7be46c519b93:/# cat /proc/version

Linux version 3.8.0-44-generic (buildd@tipua) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #66~precise1-Ubuntu SMP Tue Jul 15 04:01:04 UTC 2014

root@7be46c519b93:/# cat /etc/issue   

Ubuntu 14.04.1 LTS \n \l


Posted by '김용환'
,

한국와 미국의 일부 스타트업 회사에서 쓰이고 있는 것으로,,

git flow 프로세스가 조금 복잡한 만큼, 프로세스가 늘어남에 따라 빠른 배포가 어렵다.

모 회사에 있을때 git flow의 small set으로 방향을 정하고  개발한 적이 있다. 


Github flow는 master와 master기반의 이름을 넣은 branch로 개발한다. 따라서 배포될 버전만 개발하고 테스트하고 master로 merge하고 테스트후 배포하면 끝이다. git flow가 훌륭하나 간단하게 배포만 할 때는 github flow를 쓰는 것도 좋을 듯 하다. 


https://github.com/blog/1557-github-flow-in-the-browser

https://guides.github.com/introduction/flow/index.html

http://scottchacon.com/2011/08/31/github-flow.html

http://www.atmarkit.co.jp/ait/articles/1401/21/news042_2.html

Posted by '김용환'
,



'Vagrant와 Ansible을 이용한 개발 환경 구축' 내용을 소프트웨어 공학센터의 웹집에 게재했다.

(http://www.software.kr/mbs/swkr/jsp/board/list.jsp?boardId=183&mcategoryId=&id=swkr_040500000000)


102호_공학_트렌드_Vagrant와_Ansible을_이용한_개발_환경_구축_Part_1.pdf


103호_공학_트렌드_Vagrant와_Ansible을_이용한_개발_환경_구축_Part_2 (1).pdf




----------------------------------------------------------------------------------



기고한 글이 좀 짧고 굵은 내용으로 써야 하는 관계로 원 글도 게재했다.


참고하세요. 



Ansible과 Vagrant를 이용한 개발 환경 구축 #1 - Google 문서.pdf


Ansible과 Vagrant를 이용한 개발 환경 구축 #2 - Google 문서.pdf


Posted by '김용환'
,


play 프로젝트에서 eclipse 프로젝트로 import하기 위해서는 play eclipsify 을 활용하면 편하게 개발을 진행할 수 있다. 


$ cd play-projects

$ ls play-project (실제 play project)

play-project

play eclipsify play-project



참조 : http://www.playframework.com/documentation/1.2/ide 



.project, .classpath, .settings 파일이 만들어져서 general java project로 import 가능하고 eclipse auto compiling이 지원된다.


사실 이보다 더 큰 장점은...play-project/eclipse 디렉토리에 다양한 것들이 생긴다는 것이다. 



drwxr-xr-x   9 Samuel  wheel   306  8 11 16:04 .

drwxr-xr-x  22 Samuel  wheel   748  8 11 16:00 ..

-rw-r--r--   1 Samuel  wheel   307  8  7  2013 .classpath

-rw-r--r--   1 Samuel  wheel   441  9 24  2012 .project

drwxr-xr-x   4 Samuel  wheel   136  2 18 11:09 .settings

-rw-r--r--   1 Samuel  wheel   810  8 11 16:00 Connect JPDA to story-webapp.launch

-rw-r--r--   1 Samuel  wheel  2381  8 11 16:00 Test story-webapp.launch

drwxr-xr-x  12 Samuel  wheel   408  8 11 17:01 classes

-rw-r--r--   1 Samuel  wheel  2067  8 11 16:00 story-webapp.launch




특히 Connect JPDA to play-project.launch 파일은 jpda 연결 가능하다. 

해당 파일을 마우스 오른쪽 버튼 누르고 (마우스 우클릭 후) Debug As->play-project 선택한다. Debug Configuration에 Remote Java Application 으로 등록되었는지 확인한다. port 수정해서 jpda 데몬에 붙어서 socket attach 를 통해 jpda디버그가 가능하다. 


마찬가지로 play-project.launch 마우스 우클릭 후 Run As --> play-project 로 선택하면 run에 등록된다. 


classes 디렉토리는 자동 빌드된 java 클래스파일들이 들어가 있다. 



Posted by '김용환'
,


소프트웨어공학센터에 'Cassandra(Nosql)를 이용한 유닛 테스트 방법'을 기고했다. 


SKP 자바 서비스 모니터링의 데이터 저장소를 Cassandra로 사용했다. Cassandra는 개인적으로 서비스보다는 백엔드가 어울리는 듯 하다라는 생각이 든다. Delete가 많아질 경우 Cassandra 성능이 떨어지는 경우가 있으니. 반드시 서비스에 맞는 성능 테스트는 진행해야 할 듯.. Insert, Delete가 정말 중요하다면 다른 Nosql(HBase )를 사용하는 것이 좋을 수 있다. 


하여튼 자바기반 Cassandra DAO 유닛 테스트 코드 내용에 참고하면 좋을 듯 해서 공유한다. 



98호_공학_트렌드_Cassandra_Nosql_를_이용한_유닛_테스트_방법_Part_1.pdf


99호_공학_트렌드_Cassandra_Nosql_를_이용한_유닛_테스트_방법_Part_2.pdf



http://www.software.kr/mbs/swkr/jsp/board/view.jsp?spage=1&boardId=183&boardSeq=2735175&mcategoryId=&id=swkr_040500000000


http://www.software.kr/mbs/swkr/jsp/board/view.jsp?spage=1&boardId=183&boardSeq=2762205&mcategoryId=&id=swkr_040500000000




Posted by '김용환'
,


vagrant의 가상화 이미지를 만들다가 lucid, precise가 나와서, 이게 먼가 살펴보니. ubuntu 버전 명이다. (참고로 난 ubuntu 보다는 centos 쪽이 훨씬 친숙하다....;;;;)

http://www.vagrantbox.es/



위키를 확인해보니. lucid는 10.04이고 precise 12.4 이다. 

http://en.wikipedia.org/wiki/List_of_Ubuntu_releases


2 Release history

2.1 Ubuntu 4.10 (Warty Warthog)

2.2 Ubuntu 5.04 (Hoary Hedgehog)

2.3 Ubuntu 5.10 (Breezy Badger)

2.4 Ubuntu 6.06 LTS (Dapper Drake)

2.5 Ubuntu 6.10 (Edgy Eft)

2.6 Ubuntu 7.04 (Feisty Fawn)

2.7 Ubuntu 7.10 (Gutsy Gibbon)

2.8 Ubuntu 8.04 LTS (Hardy Heron)

2.9 Ubuntu 8.10 (Intrepid Ibex)

2.10 Ubuntu 9.04 (Jaunty Jackalope)

2.11 Ubuntu 9.10 (Karmic Koala)

2.12 Ubuntu 10.04 LTS (Lucid Lynx)

2.13 Ubuntu 10.10 (Maverick Meerkat)

2.14 Ubuntu 11.04 (Natty Narwhal)

2.15 Ubuntu 11.10 (Oneiric Ocelot)

2.16 Ubuntu 12.04 LTS (Precise Pangolin)

2.17 Ubuntu 12.10 (Quantal Quetzal)

2.18 Ubuntu 13.04 (Raring Ringtail)

2.19 Ubuntu 13.10 (Saucy Salamander)

2.20 Ubuntu 14.04 LTS (Trusty Tahr)

3 Future releases

3.1 Ubuntu 14.10 (Utopic Unicorn)

3.2 Ubuntu 16.04 LTS

Posted by '김용환'
,


'버튼 하나'만 누르면 재현 가능한 빌드를 만들어 주는 뭔가를 만려는 저의 모험이 시작됐습니다. (그 당시에 마틴 파울러의 이야깃거리 중 하나였습니다.) 

from 지속적인 통합 - 저자 :  듀발, 마티야스, 글로버 , 번역 : 최재훈



나는 지금 현재 Legacy System 을 담당하고 있으며, 해당 시스템을 고치는 작업을 진행중이다.


Legacy 시스템이라는 표현을 쓰는 이유는..  두가지 의미이다.

1) 회사에서 굉장히 중요한 시스템(수익을 창출하는 근간이 됨)이다. 

2) Sustainable 하지 않고 주먹구구 방식으로 돌아갔던 시스템을 의미한다. 



게다가 Test Code 한 줄 없고 방대한 코드들, 통신사의 History를 깊이 알지 않으면 이해할 수 없는 제품군이었다. 이를 조금씩 좋아지도록 하는 작업을 진행하고 있다. (사실 많은 이들이 어려운 Legacy 시스템을 고치려고 했으나, 퇴사 또는 다른 조직 전배를 갔다. 그러나 나는 혼자 서 있다..)


두가지 관점으로 일을 진행하고 있다.  

첫번째는 "Continuous Integration" 적용과 

두번째는 "Divide and conquer" 이다.



1) Continuous Integration

현재 돌아가는 상용버전은 svn, 브랜치 전략을 사용하지 않았다. 요즘은 흔하디 흔한 Test 코드조차 한 줄 없다. 게다가 가물거리는 프레임웍을 쓰고있다.  Sonar를 통해 확인해보니. 엄청난 양의 코드와 중복코드, 그리고 기간망간의 통신쪽은 건들기 어려운 부분이 존재했다. 게다가 model은 단 하나의 클래스로 사용하고 있었다.. 


그래서 운영/개발을 편하기 하기 위해서 조금씩 바꾸고 있다. 



1. SVN 으로 버전관리도 없이 하나의 branch에서 작업하던 개발 코드 (어느 버전이 상용인지. 개발인지 알수 없었음)을 모두 GIT 으로 전환한다.

2. 멤버들에게 GIT FLOW 교육을 실시하고 브랜치 전략 사용하도록 한다.

3. Jenkins 서버 설치하여 develop, master 빌드가 깨질때마다 메일이 전달되게 한다. (깨진 코드로 커밋 방지)

4. Sonar를 적용한다. 어차피 품질은 좋아지지는 않지만 언제나 현황을 본다. 

5. 중요 코드 Test Code로 품질 향상 (Legacy 시스템이라 많이 할 계획은 없지만. 

6. 소스 코드 정리 

  (사용하지 않아도 언제가 쓸 수 있다는 생각으로 코드가 삭제하지 않고 그대로 방치되고 있었고.. 배치성 코드는 하드코딩으로 버물려 있는 코드들이라. 우선 쓰지 않는 것부터 정리.)

7. CheckStyle, Formatter 적용

8. 진정한 Continuous Integration 적용 예정

(그동안 나는 DB 통합 자동화를 한적이 한번도 없었다. 그러나 이번에는 이 부분을 진행하면서 Ansible/Vagrant 기반위에 Tomcat을 두고 Node.js, DB등을 모두 Acceptance 테스트할 수 있는 환경.)

9. Ant를 통해 빌드/배포 모두 하는 구조에서 Ant/Ivy + 배포 서버, Maven + 배포서버 구조 변경

10. DB 스키마를 올바르게 변경

(오래된 Legacy 일수록 표준 문서와 개발 DB, 상용 DB의 constraints가 많이 깨져있었다. 그 부분을 모두 현행화하고 올바르게 바꿔야 한다.)

10. DB 변경 (검토)

(DB가 오래되면 물리적 장비를 바꿔야 하지만, DB 성능/기능이 제대로 동작하지 않으면 바꿀 수 있어야 한다. 그러나 리소스가 너무 없다. 리소스만 주어진다면 반드시 바꿔야 한다.)



(그러나 워낙 오래된 프레임 웍, 잘못 개발된 아키텍처로 CI 와 운영/패치일은 최소화할 수 밖에 없다.)




2)Divide and conquer

Legacy 시스템을 패기하나만으로 고칠 수 없다. 지식도 많아야 하고 관찰하고 관찰하고 또 관찰해야 한다. 한번에 개발하려고 했으나, 이는 쉽지 않다.  하나의 소스로 된 프로젝트를 여러개의 프로젝트로 나누고 개발한다. 

마치 진나라의 진시황이 한나라씩 나라를 정복한 방법처럼 하기로 했다. 


1. 공통모듈을 서버로 개발 (공용으로 개발가능한 개발 서버로 분리)

   서비스마다 비슷하게 구현하고 있는 것들은 다시 개발하지 않도록 하여 재활용할 수 있도록 하면 된다.

2. 특수모듈을 서버로 개발 (다른 서비스에서 필요하면 바로 연동할 수 있도록 분리)

(모듈을 7-8개로 쪼개서 분리시킨다.. 사실 항상 분리시키는 것이 좋은 방법이 아니다. 그러나 소스 자체의 의미를 모르고 정확한 의미를 위해서 복잡성을 제거한 서버 분리가 좋은 방법이라고 생각하고 진행중이다.)

3. 개발은 모두 Agile 방법론을 이용해서 진행한다.  

4. 새로 만든 서버들은 모두 배포 시스템을 이용해서 배포하도록 한다. (Continuous Deployment, Delivery 정책. Ansible, SSH 이용)

5. 가상 개발 환경을 구축한 후 Legacy API Test를 테스트할 수 있는 UI를 개발하고 그 UI로 selenium으로 기능 테스트(또는 시나리오테스트)를 진행하여 개발자들이 두려움 없이 테스트할 수 있는 방법을 제시한다.

(= Continuous Integration 8번과 공통)





'버튼 하나'만 누르면 재현 가능한 시스템과 API를 테스트해 주는 뭔가 (이것을 더 응용하면 자동 배포할 수 있는 시스템)를 만려는 저의 모험이 시작됐습니다.

김용환



처음에는 어려웠다. 그러나 계속 생각하며 Legacy System을 고치는 본질을 고민했다. 내가 적은  방법이 답이 아닐 수는 있다..

 "내가 배울 수 있는 것이 무엇인지를 알게 되는 시간"에서 작은 최선만 다할 뿐이다. 




Posted by '김용환'
,


vagrant/ansible을 이용한 테스트 환경 및 자동 배포 환경을 테스트해보고 있다. ansible(정확히 말하면 ansible-playbook)의 환경설정 파일은 yml은 yaml이라는 표준을 사용하고 있다. 내가 chef나 puppet을 안쓰게 된 결정적인 배경은 바로 DSL대신 표준 spec 인 yaml을 썼다는 점이다.  (안좋아할 수도 있는 사람도 있을 터이지만.) json과 같이 읽기 좋은 표준은 계속된 발전이 있었던 것 같다. 


ansible에 yaml(yml) 문법을 사용하는데. 관련한 자료들을 공유한다. 


0. 첫 시작은 위키피디아 

http://ko.wikipedia.org/wiki/YAML

배경과 예제 정도를 아주 간단히 알 수 있다. 


1. yaml 스펙

이 자료를 쓱 봐주는 것이 좋다. 문법과 예제들이 많고 눈에 좀 익히는 연습이 필요하다. 

http://www.yaml.org/spec/1.2/spec.html


재미있는 스펙과 예제들이 많이 있다. 

YAML can therefore be viewed as a natural superset of JSON, offering improved human readability and a more complete information model. This is also the case in practice; every JSON file is also a valid YAML file. This makes it easy to migrate from JSON to YAML if/when the additional features are required.


2. yaml ruby cookbook

http://yaml.org/YAML_for_ruby.html

yaml 스펙과 ruby의 타입으로 변환가능한지 알려준다. ruby 개발자라면 바로 yaml이 눈에 들어온다. 


기타 : python 모듈 

http://pyyaml.org/wiki/PyYAML


3. yaml cheat sheet

http://yaml.org/refcard.html


4. yaml syntax check 

웹에서 yaml 문법 체크가 가능한 url이다. 또한 문법적으로 nice한 yaml을 제공한다. 

http://yaml-online-parser.appspot.com

http://yamllint.com


5. 좋은 한글 싸이트

http://10apps.tistory.com/156

http://blog.doortts.com/172

http://devopser.me/ansible-secret-tips/



6. ansible-yaml  관련 자료

ansible-book과 yaml 좋은 자료 

https://www.digitalocean.com/community/articles/how-to-create-ansible-playbooks-to-automate-system-configuration-on-ubuntu


좋은 문서

http://docs.ansible.com/YAMLSyntax.html

(http://docs.ansible.com)


좋은 예제

https://github.com/ansible/ansible-examples

https://raymii.org/s/tags/ansible.html

https://github.com/takuan-osho/pyconapac2013-ansible-session

https://github.com/leucos/ansible-tuto




Posted by '김용환'
,