Ansible Module 개발하기

Ansible 은 대규모의 서버 장비에 대한 설치 및 어플리케이션의 배포와 서비스 운영에 대한 자동화 부분을 비교적 쉽게 작성할 수 있도록 기능을 제공합니다. 최신 트렌드인 DevOps 를 가능케하는 방법 중에 하나라고 할 수 있습니다. Ansible 은 SSH 를 기반으로 수행되며, 원격 장비의 SSH 접근 권한이 필요합니다. 별도의 데몬이나 에이전트는 필요하지 않습니다. 원격 장비 (기본 제공되는 Ansible Module 의 경우) Python-2.6 이상만 시스템에 설치가 되어 있으면 됩니다. (일부 모듈은 별도의 파이썬 모듈을 필요로 하는 경우도 있습니다.) Ansible Module 은 멱등성을 보장하는 것을 권장 합니다. 일부, 모듈에 예외적으로 멱등성을 보장하지 않는 경우 문서에 주의사항을 꼭 남겨놓아야 합니다. 소개 Ansible Module 은 Ansible Playbook 의 하나의 Task 에서 어떠한 목적을 가지는 일련의 기능 집합이라고 생각할 수 있습니다. 예를 들어, “파일을 A 경로에서 B 경로로 파일을 옮기는 기능” 이 필요할 경우, Ansible 에서 기본 모듈로 제공하는 “file” 모듈을 사용하면 됩니다. ...

2017년 11월 14일 · 4 분 · Sung-Kyu Yoo

ACOR 소개: Redis 기반 Aho-Corasick 구현

들어가며 문자열 검색은 소프트웨어 개발에서 자주 마주치는 문제다. 특정 키워드 하나를 찾는 것은 간단하지만, 수백 개의 키워드를 동시에 찾아야 한다면 어떨까? 각 키워드마다 텍스트를 순회한다면 비효율적일 것이다. Aho-Corasick 알고리즘은 이 문제를 우아하게 해결한다. 1975년 Alfred V. Aho와 Margaret J. Corasick이 개발한 이 알고리즘은 여러 패턴을 동시에 효율적으로 검색할 수 있다. ACOR은 이 Aho-Corasick 알고리즘을 Go로 구현하고 Redis를 백엔드 저장소로 사용하는 라이브러리다. 이 포스트에서는 ACOR의 소개와 Aho-Corasick 알고리즘의 기본 개념, 그리고 사용법을 살펴본다. ...

2017년 6월 28일 · 3 분 · Sung-Kyu Yoo

pyenv 파이썬 버전 가상 환경 관리

파이썬이라는 언어를 사용하다보면 다양한 버전 환경에 직면하게 된다. 먼저, Redhat, Debian 등의 배포판에는 자체에 설치된 시스템 파이썬이 존재하고, 필요에 따라 계정별로 소스 빌드를 통해 파이썬을 사용할 수도 있다. 파이썬은 크게 2.x 와 3.x 의 메이저 버전에 따라 문법과 내장 라이브러리의 차이가 있으며, 마이너 버전에 따라 일부 기능의 동작 방식이나 구현이 달라질 수 있는 자유롭지만 때론 위험한 상황에 직면해 있다. 물론, 단일 시스템에서 하나의 프로젝트만을 운용한다거나 버전이 절대 변경될 가능성이 없다면 특별히 고민하지 않아도 될 수 있다. 하지만, 일반적으로 하나의 시스템에는 다양한 파이썬 프로젝트들이 존재할 수 있고 이들은 종종 다양한 파이썬 버전에 기반하여 구현이 되어 있을 수 있다. 의존성 분리를 통해 프로젝트 간에 응집력을 줄인다면, 개별 프로젝트는 다른 환경에 대한 고민을 하지 않아도 된다. ...

2017년 4월 2일 · 7 분 · Sung-Kyu Yoo

alternatives 명령어 알아보기

alternatives (cf, update-alternatives)는 심볼릭 링크를 생성, 제거, 관리, 조회할 수 있는 기능을 제공하는 GNU 라이센스의 커맨드라인 툴. 즉, 심볼릭 링크를 통해서 특정 커맨드에 대해 디폴트 버전 혹은 경로를 정의할 수 있다. 다만, Debian 계열의 리눅스에는 update-alternatives 명령어만 제공 (perl 언어에 대한 의존성을 제거하기 위해 기존의 alternatives 스크립트가 재구현이 되었다고 함)되고, Redhat 계열의 리눅스 명령과 제공하는 기능에는 다소 차이가 있지만, 이번에는 공통적인 기능과 옵션에 대해서만 정리하기로 하였다. 추가로, 예제들은 Redhat 기준으로 정리하였다. ...

2017년 3월 17일 · 6 분 · Sung-Kyu Yoo

Ansible Galaxy - Git 저장소를 활용하여 Role 의존성 관리하기!

Git 저장소에 Ansible Role 올리기 먼저, Ansible Role 을 개발하기 위한 Git repository를 생성한다. 그리고, Ansible Role 초기 프로젝트 구조를 Ansible Galaxy 를 사용하여 생성한다. Git repository 를 로컬 머신에 복제한다. 1 $ git clone "https://github.com/xxxxx/sample-role.git" Ansible Role 초기 디렉토리 및 파일 생성한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $ ansible-galaxy init --force sample-role - sample-role was created successfully $ tree sample-role/ sample-role/ ├── README.md ├── defaults │ └── main.yml ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── templates ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml Ansible Role 개발을 진행 한 뒤에 Git repository 에 Push 1 $ git commit * -m "Add ansible role" && git push Git 저장소로부터 Ansible Role 가져오기 방법 1) Ansible Galaxy CLI 명령을 통해 다운로드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $ ansible-galaxy install git+https://github.com/xxxx/sample-role.git,master -p roles/ $ tree roles/ roles/ └── sample-role ├── README.md ├── defaults │ └── main.yml ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml 방법 2) 의존성 파일에 명시하고 CLI 명령을 통해 다운로드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 $ vi requirements.yml - src: git+https://github.com/xxxx/sample-role.git version: master $ ansible-galaxy install -r requirements.yml -p roles/ - extracting sample-role to roles/sample-role - sample-role was installed successfully $ tree roles/ roles/ └── sample-role ├── README.md ├── defaults │ └── main.yml ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── tests │ ├── inventory │ └── test.yml └── vars └── main.yml ‘requirements.yml’ 작성하기 src username.role_name : Ansible Galaxy 공식 저장소에 등록된 Ansible Role 을 다운로드할 때 사용. url : Ansible Galaxy 에서 지원하는 SCM으로부터 다운로드할 때 사용. scm 연동할 SCM 이름을 명시. 디폴트 값은 ‘git’ (ansible-galaxy 2.2.1.0 기준으로 git, hg 만 지원) version tag 명 / commit hash 값 / branch 이름을 명시. 디폴트는 ‘master’ SCM 으로부터 가져올 때에만 사용. name 다운로드한 Ansible Role 의 이름을 명시. 기본적으로는 Ansible Galaxy에 등록된 이름 혹은 Git repository 의 이름을 사용. 아래 예시를 참고! ...

2017년 2월 16일 · 3 분 · Sung-Kyu Yoo

Java 8 람다 표현식 자세히 살펴보기

2010년도에 ‘Project Lambda’ 라는 프로젝트로 진행되어 Java 8 에 공식 릴리즈가 되었다. 기존의 Java 언어에 어떻게 함수형 프로그래밍을 녹여내었는지 좀 더 자세히 정리하고자 한다. 함수형 프로그래밍 간략하게 알아보기 자바의 람다식을 소개하기 전에 함수형 프로그래밍에 대해서 간략하게라도 알아볼 필요가 있다. (람다 대수에 근간을 두는 함수형 프로그래밍은 패러다임이고, 람다 표현식은 이를 나타낸다고 볼 수 있기 때문!) 함수형 프로그래밍은 함수의 입력만을 의존하여 출력을 만드는 구조로 외부에 상태를 변경하는 것을 지양하는 패러다임으로 부작용(Side-effect) 발생을 최소화 하는 방법론이라 할 수 있다. 함수형 프로그래밍에서는 다음의 조건을 만족시켜야 하는데 먼저 이것부터 정리해보자. ...

2016년 11월 9일 · 7 분 · Sung-Kyu Yoo

Java 8 살펴보기

Java 8 버전에 추가된 내용들에 대해서 정리하고자 한다. 전반적인 내용을 정리하고자 하였고, 자세하고 세부적인 내용은 관련 링크를 첨부하여 추후에 가능하다면, 해당 부분에 대해서 더 자세히 정리해보고자 한다. 새로운 기능 정리 Lambda Expression (a.k.a Anonymous Method) 자바의 람다 표현식의 근간은 ‘알론소 처치 (Alonzo Church)‘가 1930년대에 람다 대수를 제안. 함수 정의, 함수 적용, 귀납적 함수를 추상화한 형식 체계! 자세한 사항은 람다 대수 위키 참조. 익명 메소드 생성 문법을 지원한다는 정도로 이해하면 좋을 듯 하다. ...

2016년 10월 25일 · 7 분 · Sung-Kyu Yoo