Python에서 mongodb 사용

테스트 환경 우분투리눅스 17.04 python 2.7.12 mongodb 2.6.11는 설치했다고 가정한다. pymongo 패키지를 설치한다.$ pip install pymongo패키지가 제대로 설치됐는지 확인한다.>>> import pymongoMongoClient를 이용해서 몽고디비에 연결한다.>>> from pymongo import MongoClient>>> client = MongoClient(127.0.0.1, 27017)혹은 형식으로 데이터베이스 주소를 설정 할 수 있다.>>> client = MongoClient(mongodb>>> print clientMongoClient(host=, document_class=dict, tz_aware=False, connect=True)

Kafka exactly-once

IoT 관련일을 하고 있다. 클라이언트로 부터 메시지를 수신하는 메시지 게이트웨이, 수집한 메시지를 백앤드 서버로 안전하게 보내기 위한 메시지 큐, 메시지큐에서 데이터를 처리하고 저장하는 부분에 관심을 가지고 있다.IoT 메시지 인프라는 비교적 작은 크기의 메시지를 대량으로처리할 수 있어야 한다. 사람과 사람과의 메시지 특성과는 차이가 있다. 이 분야는 대략 아래와 같이 정형화된 구성이 있다.

TensorFlow 시작하기

이 문서는 TensorFlow를 이용한 프로그래밍을 가이드 한다. 이 문서를 읽기전에 해야 한다. 이 문서를 활용하기 위해서는 아래의 사항을 알고 있어야 한다. 파이썬으로 프로그래밍 하는 법 적어도 배열이 뭔지는 알아야 한다. 가능 하면 기계 학습에 대한 것을 알고 있는게 좋다. 그러나 기계 학습에 대해서 전혀 모르더라도 읽을 수 있도록 만들었다.TensorFlow는 다양한 API들을 제공한다. 가장 낮은 레벨의 API(TensorFlow Core)는 완전한 프로그래밍 제어 기능을 제공한다. TensorFlow Core는 기계 학습 연구자 및 모델을 정밀하게 제어해야 할 필요가 있는 사람들에게 권한다. 높은 수준의 API는 TensowFlow Core 위에 구축이된다. 상위 수준의 API는 TensorFlow Core 보다 배우기가 쉽다. 또한 상위 수준 API는 반복적인 작업을 보다 쉽고 일관되게 처리 하도록 도와준다. tf.contrib.learn과 같은 고급 API를 사용하면 데이터 세트, 트래이닝과 인터페이스등을 쉽게 관리 할 수 있다. 고수준 TensorFlow 중 이름에 contrib가 포함된 API는 아직 개발 중이라는 걸 참고하자. contrib 메서드는 변경되거나 아예 사용하지 않을 수도 있다.

git remote

원격 저장소와 관련된 작업을 수행 할 수 있다. 다른 옵션 없이 실행하면 현재 디렉토리의 프로젝트가 등록된 리모트 저장소를 확인 할 수 있다. 테스트를 위해서 내 개인 프로젝트를 clone 했다.$ git clone git@github.comgo-pattern에 복제합니다...remoteremote오브젝트를 받는 중연결을 확인하는 중입니다... 완료.git remote로 원격 저장소를 확인해 보자.$ cd go-pattern$ git remoteorigin단축 이름이 나오는데 쓸만한 정보는 아니다. -v 옵션으로 URL도 함께 확인 할 수 있다.

github 소개

GitHub는 Git을 웹 기반으로 호스팅 해주는 서비스다. 다양한 데이터의 이력을 관리하기 위해서 사용 할 수 있지만, 보통은 프로그램 코드를 관리하기 위해서 사용한다. Git을 기반으 하는 만큼, Git이 가지고 있는 분산 버전 관리, SCM(소스코드 관리) 기능을 가지고 있으며 기타 사용자 편의를 위한 다양한 기능들을 추가적으로 제공한다. 추가 기능에는 위키페이지, 프로젝트 관리 툴, 버그 수정, 기능 요청, 공동작업을 위한 접근관리를 포함한다.

Mongodb Find 예제

MongoDB를 이용 할 때 가장 짜증나는게 질의어 만들기다. 익숙함의 문제라고 하는 개발자도 있지만, SQL과 비교해서 보자면 근본적인 문제점을 가지고 있다. 요즘은 언어세대라는 용어를 별로 쓰지 않는 것 같은데, 이 분류를 따르자면 SQL은 4세대 언어다. 즉 인간의 언어와 매우 비슷한 문법을 가지고 있다는 이야기다. 아래 예제를 보자.SELECT person, SUM(score), AVG(score), MIN(score), MAX(score), COUNT()

웹 애플리케이션에서의 context 활용

Go의 context패키지는 프로세스 혹은 API 간에, 값, 시그널, 취소(cancelation), 데드라인(deadline)등을 전달하기 위해서 사용한다. REST API 서버를 만든다고 가정해보자. 서버는 요청 받으면, 이에 대한 컨텍스트를 만들 수 있다. 그리고 이 요청을 처리하기 위한 함수를 호출 할 수 있다. 이러한 함수의 호출 체인에 컨텍스트를 전파하면, 호출 체인을 효과적으로 관리 할 수 있다. 예를 들어 A() 함수가 B()함수를 호출했다고 가정해보자. B() 함수는 바깥에 있는 인증 API를 호출하는데, 정해진 시간내에 처리를 해야 한다. 정해진 시간이 지났다면, B() 프로세스를 종료해야 할 것이다. Context를 이용하면 A() 함수는 WithCancle, WithDeadline, Withtimeout 등의 context를 전달 할 수 있다. 이제 B() 함수에서 타임아웃등이 발생하면, B() 함수는 컨텍스트를 반환하고 함수를 종료할 수 있게 된다.

Fluentd

로그 분석 시스템으로는 ELK(ElasticSearch Logstash, Kibana)가 아마 가장유명 할 것이다. 로그 색인으로는 ElasticSearch, 대쉬보드 구성은 kibana로 구정된 것 같고, 결국 남는 선택지는 로그수집툴을 무얼로 할 것이냐 하는 거다. 나는 logstash 대신에, fluentd를 선택하기로 했다. 무슨 대단한 이유가 있어서 fluentd를 선택한 건아니다. 비교적 가볍고, 기능이 더 많더라는 지인의 이야기를 듣고 선택했다. 서비스 인프라를 컨테이너로 하고 있기 때문에 가볍다(그리고 배포하기 쉽다)는 특징은 나에게 꽤나 중요하다.

Blockchain

의 응용이 있을지 탐색하는게 목표다. 이를 위해서 기반 기술인 블럭체인 부터 정리 한다. Go 언어로 만들어본다. 심심해서

HashCash

HashCash는 이메일 스팸과 DOS(Denial of services) 공격을 제한하기 위해서 사용하는 작업증명(proof-of-work) 시스템의 구현 알고리즘이다. 최근 비트코인의 마이닝 알고리즘에 사용되면서 주목받고 있다. POW의 핵심은 문제풀이의 비 대칭성에 있다. 만드는데는 짧은 시간이 걸리지만 문제를 푸는데는 긴 시간이 걸린다. 적절한 시간내에 문제를 풀었다면, 이 사용자는 유효한 사용자라는 것을 증명 할 수 있다. Hash가 대표적인 경우로 한 방향 계산은 쉽지만 역방향 계산은 매우 어렵다. Hashcash는 160비트 SHA-1, 비트코인은 256비트 SHA-2를 사용한다.