Programming

알고리즘 – 최대공약수(Great Common Divisor)

분수 알고리즘에서 마지막으로 약분(reduce a Fraction to Lowest Terms) 을 합니다. 약분은 분자와 분모의 최대공약수(GCD, Great Common Divisor)로 나누는 것을 말합니다. 따라서 약분을 하기 위해서는 최대공약수를 구하면 됩니다. 약분, 최대공약수를 구하라. 최대공약수 구하기 1 최대공약수를 구하는 방법은 여러가지가 있는데 그 첫번째로 분자, 분모 두개를 동시에 나누었을때에 나머지가 없는 수를 구하면 됩니다. 1부터 시작해서 분자, 분모 두수중에 작은 수까지 대입해서 하나씩 나누어서 0이 되는지를 찾아보는 겁니다. 최대공약수를 구하는 무한대입법이라고 보시면 됩니다.

작은 수가 무엇인지를 구하기 위해서 min 함수를 이용했습니다. 무한대입법을 […]

Programming

알고리즘 – 분수(Fraction) 문제

알고리즘 – 분수(Fraction) 문제는 컴퓨터 알고리즘을 시작하는데 좋은 예제입니다. 분수는 어릴적 산수시간에 배운 그게 맞습니다. 1/2, 1/3, 1/4 식 입니다. 분수에는도 사칙연산을 할 수 있습니다. 더하기(add), 빼기(subtract), 곱셈(multiply), 나눗셈(divide) 가 그것입니다. 이를 컴퓨터 프로그램 언어를 이용해서 만들어보는 겁니다. 참고: http://interactivepython.org/runestone/static/pythonds/Introduction/ObjectOrientedProgramminginPythonDefiningClasses.html#a-fraction-class 분수의 정의와 제약사항 분수는 다음과 같이 정의됩니다. 수학에서 분수(分數, fraction)는  이나  꼴로 표시한다. 이것은 를 로 나눈 값, 즉 와 의 비를 뜻하며, 여기서 는 분자, 는 분모라고 한다. 이 때 분모 에 이 들어가는 (는 상수)라는 수는 정의될 수 없으므로 ≠ 이어야 한다. From 위키페디아 중요한 것이 분모는 0 이여서는 안됩니다. 또 한가지 이 글에서 제약조건을 걸어야 하는데, 분자와 분모 […]

HowTo, Linux

ELK 구축하기 1 – Logstash

ELK 는 ElasticSearch, Logstash, Kibana 를 말하며 보통 이 시스템은 실시간 로그분석 시스템으로 불리웁니다. Logstash 는 로그를 실시간으로 전송하고 ElasticSearch 는 전송된 로그를 검색 인덱스를 만들어 보관하며 Kibana 는 ElasticSearch 의 분석한 자료를 시각화해줍니다. 이를 이용하면 시스템 자체 뿐만 아니라 각종 애플리케이션의 로그들을 분석하고 시각화된 통계자료를 자동으로 얻을 수 있습니다. 첫번째로 Logstash 를 설치해보도록 하겠습니다. 설치 Logstash 는 Java 7 이상이 필요합니다. Java 7 을 설치해야 합니다. 이것이 없으면 동작이 안됩니다. Logstash 홈페이지에서 다운로드 받아 설치할 수 있습니다. tar.gz 도 […]

HowTo, Linux

Python JSON Tool 을 이용한 Readable한 JSON 출력하기.

Python 을 설치하면 JSON Tool 이 포함됩니다. Python JSON Tool 을 이용한  Readable한 JSON 출력이 가능합니다. 즉 쉘 상에서 JSON 포맷을 보기 좋게 볼수 있습니다. 보통은 다음과 같이 출력되서 쉽게 알아보기 힘듭니다.

이를 보기 좋게 출력하는 방법은 다음과 같습니다.

 

HowTo, Linux

쓰레드 묶음으로 처리하기..

처리해야할 태스크가 100여개 있는데, 이것을 3개씩 처리하고 싶은 경우가 있습니다. 이럴때는 쓰레드 생성 함수를 루핑 돌리면서 처리해주면 됩니다. 아래 소스는 Practical threaded programming with Python 를 기반으로 작성되었습니다.

 

HowTo, Linux

패키지내에 파일 보기

패키지를 설치하기전에 그 패키지에 어떤 파일들이 들어 있는지를 알고 싶을때가 있습니다. Ubuntu, CentOS 에서 명령어로 모두 가능합니다. Ubuntu 의 경우 Ubuntu 에서는 apt-file 명령어로 간단하게 가능합니다. 설치 설치는 다음과 같이 ‘apt-get’ 명령어로 간단하게 됩니다.

File 리스트 업데이트 파일 내역들을 업데이트를 다음과 같이 해줍니다.

패키지에 File 리스트 보기 다음과 같이 간단하게 살펴볼 수 있습니다.

CentOS 의 경우 CentOS 에는 repoquery  명령어로 가능합니다. 이는 yum-utils 를 설치하면 있습니다. 설치 yum 명령어로 yum-utils 설치 가능합니다.

파일 보기 파일 보기는 […]

HowTo, Linux

리모트 스크립트 제작기

DevOps 가 대두되면서 지속적인 배포(Continuous Delivery) 가 핵심으로 떠오르면서 수만은 서버에 한꺼번에 명령어를 내리고 파일을 전송하고 설정파일을 관리하는 소프트웨어가 인기를 끌고 있다. 대표적으로 Chef, Puppet, Saltstack, Ansible 등을 들수 있는데 이들은 지속적인 배포 뿐만 아니라 시스템과 소프트웨어를 통합해 플랫폼으로서 수많은 서버들의 상태를 동일하게 유지시켜준다. 그런데 몇 해전만 해도 이런것들이 부족했던 시절이 있었는데, 이때 내가 다니던 직장에서 수천대의 서버를 관리해야하는 일이였다. 이러한 소프트웨어가 없던 시절에 나는 개인적으로 이와 비슷한 것을 만들어 사용했는데 그때 당시로 돌아가 어떤 생각으로 만들었었는지 개선했는지를 정리해보고자 한다. […]

HowTo, Linux

Opensshd 7.0에서 바뀐점

OpenSSHD 7.0 에서 바뀐점이 있습니다. SSH 데몬이 인증을 하는 방법에는 다음과 같이 두가지가 있습니다. 패스워드 인증 – interactive authentication methods 인증키 방식 패스워드 인증 방법을 “interactive authentication methods” 라고 합니다. 그런데, OpenSSHD 7.0 에서는 root 로그인할때에는 더 이상 이 인증 방법을 지원하지 않습니다.  CentOS 7 에서 Opensshd 7.0 이상 패키지를 설치를 해서 root로 로그인을 할려고 보니 패스워드 입력 프롬프트는 나옵니다. 하지만, 맞는 패스워드를 아무리 쳐도 로그인이 안되더군요. 그래서 뭔가 바뀌었나 싶어서 Changelog 를 살펴보니 다음과 같은 문구를 보게 되었습니다.

[…]

DevOps, Linux

SaltStack 에서 Jinja 사용시 유용한 팁

Salt 는 Jinja Template 을 지원해 Salt 파일 작성시에 프로그래밍이 가능하도록 되어 있습니다.  예를들어 배포판별로 아파치 웹 서버의 패키지 이름이 다른데, Jinja Template 를 이용하면 프로그래밍을 할 수 있습니다.

Salt 의 grains 을 이용해서 배포판을 가지고 오고 조건식(if statement)를 이용해서 패키지명을 명시해주고 있습니다. 하지만 이렇게하면 Salt 자체의 YAML 문법과 섞여서 읽기가 힘든 부분이 있습니다. 그래서 이를 다음과 같이 개선할 수 있습니다.

조건식을 앞으로 빼고 변수를 이용해서 패키지명을 저장해주고 이 변수를 Salt YAML 문법에 사용하는 것입니다. 앞에 버전보다는 Jinja […]