반응형

Apache Kafka - 분산 스트리밍 플랫폼


http://kafka.apache.org/


Apache Kafka

카프카(kafka)는 분산 스트리밍 플랫폼(Distributed streaming platform)이다. 분산 스트리밍 플랫폼은 아래의 기능을 가지고 있어야 한다.

  1. 데이터 스트림을 게시(Publish)하고 구독(Subscribe)할 수 있어야 한다. 이 점에서 메시지 큐 혹은 엔터프라이즈 메시징 시스템과 유사한 면이 있다.
  2. 내결함성(장애에 대한 내성)을 가지고 있어야 한다. 스트리밍 플랫폼을 구성하는 노드에 문제가 생기더라도 데이터를 안전하게 저장 할 수 있어야 한다.
  3. 데이터 스트림을 처리 할 수 있어야 한다.

카프카는 분산 스트리밍 플랫폼이 가져야 하는 위의 기본적인 기능을 가지고 있다. 카프카는 아래의 응용프로그램을 개발하는데 유용하게 사용 할 수 있다.

  1. 시스템과 시스템 혹은 시스템과 애플리케이션 사이에 안전한 데이터 전송을 위한 실시간 스트리밍 데이터 파이프라인 구축
  2. 데이터 스트림을 변환하거나 이를 받아서 즉시 처리하는 실시간 스트리밍 애플리케이션의 구축

카프카가 어떻게 이런일을 하는지 살펴보자. 아래 카프카의 주요 컨셉을 설명하고 있다.

  • 카프카는 하나 이상의 서버로 구성되는 클러스터에서 작동한다.
  • 카프카 클러스터는 토픽(topics)라고 부르는 파이프라인에 데이터 레코드 스트림을 저장한다.
  • 각각의 레코드는 키, 값, 타임스탬프로 구성된다.

카프카의 주요 API들은 아래와 같다.

  • Producer API : 애플리케이션은 이 API를 이용해서 하나 이상의 카프카 토픽에 스트림 레코드를 게시할 수 있다.
  • Consumer API : 애플리케이션은 이 API를 이용해서 하나 이상의 카프카 토픽으로 부터 스트림 레코드를 구독 할 수 있다.
  • Streams API : 애플리케이션이 하나 이상의 토픽에서 입력 스트림을 읽고 변환해서 하나 이상의 출력 토픽으로 스트림을 보낼 수 있도록 한다.
  • Connector API : Connector를 이용해서 재 사용 가능한 Producer 혹은 Consumers를 카프카 토픽에 연결 할 수 있다. 예를 들어 관계형 데이터베이스 컨넥터는 테이블에 대한 변경 사항을 캡처할 수 있다.

아래 그림은 카프카의 구성요소들을 보여주고 있다. 이들 구성요소들은 위의 주요 API를 이용해서 주어진 일을 한다.


참고

.

반응형
반응형

Python socket programming



Python socket programming

1. Python : Socket Program Produced by Tae Young Lee

2. 클라이언트/서버 아키텍처 서버가 하나 이상의 클라이언트(사용자)에게 '서비스'를 제공 listen

3. Socket • 소켓은 '통신 종단점'이라는 개념을 구체화한 컴퓨터 네트 워크 데이터 구조 • 네트워크를 사용하는 애플리케이션은 통신을 시작하기 전 에 항상 소켓을 만들어야 함 • 소켓 없이는 통신을 시작할 수 없음 • 원래 소켓은 실행중인 프로그램(프로세스)이 같은 호스트 안에 실행 중인 다른 프로그램과 통신하기 위해 개발됨

4. Socket 유형 • 유닉스 소켓 – AF_UNIX 라는 '패밀리 이름' 을 가진다. AF는 주소 패밀리(Address family)를 의미. – 쉽게 클라이언트와 서버가 유닉스 환경의 동일한 컴퓨터에 존재해야 한다는 뜻. – 이 소켓은 파일 기반이다. 소켓의 기반 구조가 파일 시스템을 통해 지원됨 – 파일 시스템은 같은 호스트에서 실행 중인 프로세스 사이에 지속적으 로 공유되므로, 합리적인 방법이라고 할 수 있다. • 네트워크 기반 – 패밀리 이름은 AF_INET 이다. – 클라이언트와 서버가 인터넷 어디서든 존재할 수 있다는 의미를 갖는 다 • 파이썬은 AF_UNIX, AF_NETLINK, AF_TIPC, AF_INET{,6} 패 밀리를 지원

5. 연결 방식에 따른 분류 • 연결 지향 소켓(connection oriented) – 통신을 하기 전에 반드시 연결 돼 있어야 한다(전화를 거는 것과 유사) – 레코드 경계 없이 데이터를 순서대로 신뢰성 있게 중복없이 전 달. 각 메세지는 여러 조각으로 나뉘어서 반대편에 확실히 전달 된 다음에 다시 순서대로 한데 묶인 후 기다리는 애플리케이션 에 전달 – 연결 지향 소켓을 구현한 프로토콜(protocol)로는 전송 제어 프 로토콜(TCP, Trasmission Control Protocol) 이 있으며, 이 소켓을 만드려면 소켓 유형으로 SOCK_STREAM(스트림 소켓)을 지정 – 이 소켓은 네트워크상에서 IP를 호스트를 찾기 위해 사용하기 때 문에 두 프로토콜의 이름을 붙여 TCP/IP 라고 함.

6. • 비연결형 소켓(connectionless) – 스트림 소켓과 대비되는 데이터그램(Datagram) 유형의 비연결 – 통신 시 최초 연결하는 과정이 필요 없음 – 데이터 전달 과정에서 순서나 신뢰성 이나 중복 방지를 보장할 수 없음. 이는 메세지가 연결 지향 소켓처럼 조각으로 나뉘지 않 고 통째로 송신된다는 것을 의미(우편 서비스에 비유) – 연결 지향 소켓은 가상 회선을 맨 처음 만들고 유지하기 위해 상 당한 부가 비용이 발생 비연결 지향 소켓은 이런 부담이 덜하고 성능면에서 더 좋다. – 데이터그램 소켓을 구현한 프로토콜로는 (UDP, User Datagram Protocol)이 있고, UPD 소켓을 만들려면 SOCK_DGRAM을 소켓 유형으로 지정. – 이 소켓도 IP를 네트워크상에서 호스트를 찾기 위해 사용 UPD/IP라고도 부름

7. Socket의 동작 과정

8. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM)

9. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799))

10. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1)

11. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1) conn, addr = svrsock.accept() addr ('127.0.0.1', 50933)

12. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1) conn, addr = svrsock.accept() addr ('127.0.0.1', 50933) conn.recv(1024)

13. conn.close() from socket import * svrsock = socket(AF_INET, SOCK_STREAM) svrsock.bind(('127.0.0.1', 7799)) svrsock.listen(1) conn, addr = svrsock.accept() addr ('127.0.0.1', 50933) conn.recv(1024) conn.close()

14. conn.close() from socket import * clientsock = socket(AF_INET, SOCK_STREAM)

15. conn.close() from socket import * clientsock = socket(AF_INET, SOCK_STREAM) clientsock.connect(('127.0.0.1',7799))

16. conn.close() from socket import * clientsock = socket(AF_INET, SOCK_STREAM) clientsock.connect(('127.0.0.1',7799)) clientsock.send('Hi, it is me.')

17. Blocking & Non-Blocking • blocking 모드일 때 accept, recv, send 호출할 때 연결하려 고 하는 client 가 없을 때 무한정 기다리는 것 • non-blocking 모드일 때는 위와 같은 상황에서 일정한 시 간을 기다려도 응답이 없을 때 예외가 발생

18. • https://pl.python.org/docs/lib/socket-objects.html • setblocking(flag) Set blocking or non-blocking mode of the socket: if flag is 0, the socket is set to non- blocking, else to blocking mode. Initially all sockets are in blocking mode. In non- blocking mode, if a recv() call doesn't find any data, or if a send() call can't immediately dispose of the data, a error exception is raised; in blocking mode, the calls block until they can proceed. s.setblocking(0) is equivalent to s.settimeout(0); s.setblocking(1) is equivalent to s.settimeout(None). • settimeout(value)Set a timeout on blocking socket operations. The value argument can be a nonnegative float expressing seconds, or None. If a float is given, subsequent socket operations will raise an timeout exception if the timeout period value has elapsed before the operation has completed. Setting a timeout of None disables timeouts on socket operations. s.settimeout(0.0) is equivalent tos.setblocking(0); s.settimeout(None) is equivalent to s.setblocking(1). New in version 2.3. • gettimeout()Return the timeout in floating seconds associated with socket operations, or None if no timeout is set. This reflects the last call tosetblocking() or settimeout(). New in version 2.3. 위와 같이 기본적으로는 blocking 모드이다. non-blocking mode를 이용하려면 setblocking(flag)을 이용해 non- blocking mode 로 가거나 아니면 settimeout 을 이용해 non-blocking mode 로 전환하면 된다.

19. 위와 같이 socket 객체를 생성하고 gettimeout을 하면 처음에 아무 것도 볼 수 없음 blocking mode (default) 이므로 값이 무한대임을 의미 그 다음에 setblocking() 을 이용해 non-blocking mode로 변환한 후 gettimeout을 호출하면 0.0 이 나옴 non-blocking mode의 default time out value는 0.0 임

20. 위의 상황에서 생성된 socket 객체를 제거하고 다시 socket을 생성하면 default 이므로 blocking mode 임을 확인 (gettimeout) 여기서 setblocking 을 이용하지 않고 바로 settimeout 을 이용해도 원하는 timeout을 시간을 가진 non-blocking mode 로 변환되는 것을 확인

21. Example • 다음은 blocking mode 의 간단한 예제이다. Server 측 : localhost connection 이고 8000 port 를 binding 한 후 accept 함수를 호출해 client 와의 connection을 기다리고 있다.

22. • Client 측 : non-blocking mode 이고 timeout 이 3.5 초이 다. connect 을 통해 서버와 연결 된 후 non-blocking mode로 변환되고, recv 를 통해 3.5 초간 서버로부터의 데 이터 전송을 기다리다가 예외를 발생시킨다.

.

반응형
반응형

Sublime Text 3에 Package Control 설치하기 - korean( euc-kr ) 사용




ST3에서 Ctrl + ‘로 콘솔을 열고, ST3 패키지 컨트롤 페이지의 간단 설치 페이지에 있는 ST3용 스크립트를 복사해서 콘솔 입력 부분에 붙여넣고 엔터를 눌러 실행시키면 스크립트가 알아서 설치를 해 준다.



ST3에서 Ctrl + Shift + P로 패키지 팔렛트를 호출한 다음에 팔렛트 창에 install을 입력하면 Package Control: Install Package만 보이고 (위에 그림 참고), Package Control: Install Package를 선택한 다음에 CovertToUTF8을 찾아서 설치한다.


그리고 메뉴에서 File | Set File Encoding To | Korean (EUC-KR)을 선택하면 된다.







.

반응형
반응형

track1 03. 지적 프로그래밍을 위한 넓고 얇은 습관/ 카카오 서지연




.



반응형
반응형

http://www.naver.com/NOTICE/read/1100001014/10000000000030652367


네이버에서 알려드립니다.


네이버 PC메인 개편, 베타버전을 먼저 공개합니다. 


-

안녕하세요, 네이버입니다. 

 

네이버 메인을 이용해 주시는 이용자 여러분께 감사드리며 

PC메인 개편과 베타버전 이용에 대해 안내드립니다.

 

2017년 3월 27일부터 PC메인이 개편되어 새로운 화면으로 제공 될 예정입니다.

정식 출시에 앞서 2017년 3월 13일부터 베타버전 (new.www.naver.com) 을 먼저 소개해 드립니다.

 

네이버 메인은 검색, 로그인 후 네이버 서비스 이용, 뉴스 읽기, 주제형 캐스트 읽기, 쇼핑 상품 둘러보기 등

네이버 첫 화면에 들어와 실행할 수 있는 다양한 서비스를 보다 효과적으로 제공하기 위해 연구개발을 계속하고 있습니다.

그 중에서도 이번 PC메인 개편은 국내외 다양한 이용자 환경을 고려하기 위해 데이터 분석 및 이용자 설문을 실시하고,

이용자 의견을 토대로 개선 방향을 정리하였습니다. 급진적인 변화보다 기존의 사용성을 해치지 않는 범위에서

점진적으로 계속해서 개선해나갈 예정이오니 많은 관심과 응원 부탁드립니다.




반응형
반응형

MS, 신경망 번역에 ‘한국어’ 추가…11개 언어 지원

마이크로소프트(MS)가 인공지능(AI) 기반으로 개발한 자사 신경망 기반 번역 서비스에 한국어를 추가했다. 최대 1만자까지 신경망 기술을 이용해 번역한다.


신경망 기반 번역은 단편적인 단어에 대한 직역이 아닌, 문장 전체의 맥락을 파악해 사람이 말하는 것처럼 자연스러운 번역이 특징이다. 구글과 네이버도 최근 신경망 기술을 이용한 번역 서비스인 ‘구글 번역’과 ‘파파고’를 선보였다. 구글 신경망 번역은 7가지 언어, 네이버 파파고는 한영 번역을 최대 200자 이내 번역한다.


MS는 지난해 11월 처음으로 신경망 기반 번역 서비스를 공개했다. 당시 영어, 독일어, 아랍어, 중국어, 일본어를 포함한 10가지 언어를 지원했다. 이번에 한국어가 추가하면서 총 11가지 언어를 번역한다.


신경망 번역 원리

신경망 번역 원리


MS 신경망 기반 번역은 인공지능과 머신러닝 알고리즘을 통해 언어를 학습한다. 총 두 단계에 걸쳐 번역한다. 먼저, 번역 대상이 되는 문장을 인공지능으로 분석해, 해당 문자에 사용된 언어가 어떤 문맥을 가졌는지 파악한다. 그다음 문장에 맞는 단어를 골라 뜻을 배치하고 번역한다. 단순히 해당 문장 안에 단어가 몇 개 들어가 있고, 각 단어의 뜻을 기계적으로 번역해서 보여주는 게 아니라 문장 전체 의미를 파악해서 이에 가장 잘 맞는 뜻을 가진 단어를 골라 번역한다.


예를 들어, ‘개가 매우 행복해 보인다. 그 개는 강아지 6마리를 낳았다’라는 문장을 프랑스인과 미국인이 MS 신경망 번역을 이용해 문장을 번역했다 치자. 미국인에게는 ‘The dog looks very happy. The dog bore 6 puppies’라고, 프랑스인에게는 ‘La chienne a l’air très heureux. La chienne portait 6 chiots’라고 보여준다.


프랑스어에서는 똑같은 단어라도 모든 명사에 남성형과 여성형으로 성이 나뉜다. 이 성별이 무엇이냐에 따라 뒤따라오는 동사 형태가 미묘하게 다르다. 여기서 신경망 분석이 빛을 발한다. 신경망 분석은 ‘그 개는 강아지 6마리를 낳았다’라는 문장의 의미를 해석해 ‘그 개 성별은 암컷이다’라고 추론했다. 불어로 ‘개’는 남성형 명사로 ‘le chine’으로 표현하지만, 이 문장에서는 암컷이라고 생각해 여성 형태의 ‘La chienne’를 쓴다. 흐름을 파악해서 자연스러운 번역을 제공한다.


이날 MS는 언어의 의도(Intent)와 실체(Entity)를 파악하는 자연어 처리 서비스 ‘루이스(LUIS, Language Understanding Intelligent Service)’도 이제 한국어를 지원한다고 밝혔다.


루이스는 챗봇과 앱, 그리고 다양한 서비스와 결합해 사용자의 의도를 파악하고, 이에 맞는 서비스를 제공한다. 예를 들어 ‘파리행 티켓을 예약해줘’라는 문장을 입력하면, 루이스와 결합한 서비스 플랫폼에서 파리행 티켓을 예약할 수 있는 웹사이트를 불러온다.


MS 측은 “이미 IT, 제조, 교통, 물류, 쇼핑, 미디어 등 다양한 분야의 국내 많은 기업이 마이크로소프트 루이스 기반의 AI 챗봇과 앱을 통해 서비스를 준비하고 있다”라며 “파트너와 함께 클라우드 기반의 AI 서비스를 활발히 개발 중으로, 이번 루이스의 한국어 지원을 통해 스마트 스피커, ARS 부가 서비스, 상품 예약 및 조회 등 다양한 한국어 애플리케이션들이 개발될 것으로 기대된다”라고 밝혔다.







.

반응형
반응형
[카카오AI리포트]인간이 로봇에게 바라 온 도덕의 변화 : https://brunch.co.kr/@kakao-it/53

카카오 AI 리포트 Vol. 1 전체글 다운받기 : Kakao_AI_Report_Vol01_201703.pdf

.


반응형
반응형

Domain Knowledge-기술지식  


https://subokim.wordpress.com/2013/03/31/technical-domain-knowledge/


소프트웨어 뿐 아니라 대부분의 분야에서, Developer와 End User와의 커뮤니케이션은 쉽지 않습니다.

왜 그럴까요? End User의 도메인 지식(Domain Knowledge)이 부족하기 때문인데요.

도메인 지식에 대해 간단히 고민을 해보았습니다.


1) Domain Knowledge란?

Wikipedia에 보면, “도메인 지식이란, 인간활동 영역이나 자율적인 컴퓨터활동이나, 다른 전문분야에서 사용되어지는 유효한 지식을 말한다.” (Domain knowledge is valid knowledge used to refer to an area of human endeavour, an autonomous computer activity, or other specialized discipline.)고 기술되어 있습니다.


소프트웨어 기술에서 Domain Knowlege라 한다면, 목표 시스템이 운영되는 환경에 대한 지식을 이야기합니다.

하지만, 창업이나 사업을 준비하다보면 Domain Knowlege를 조금 더 넓은 의미에서 이해할 필요가 있습니다.


2) 종류

당신이 의류브랜드를 가진 사장님이라면, 종이 위에 그려진 디자인, 색상만 가지고 사업전략을 짤 순 없습니다. 컨셉수립 정도는 할 수 있겠지요.

의류업에 종사하는 사장님들을 만나보면 옷감의 종류, 나염의 종류, 세탁방법, 무게와 재질 등에 해박한 지식이 있습니다.

이런 걸 모르고 의류사업을 시작했다가 망한 경우를 주변에서 많이 보셨을 것입니다.

자동차 회사에서 디자이너나 마케터도 마찬가지입니다. 엔진, 시트(재질, 질감, 내구성), 전기제품 등에 대한 지식이나 이해도가 일반인들보다 훨씬 깊습니다.

반도체, 건설, 백화점, 유통업도 마찬가지입니다.


어떤 업종이든 제품 기획이나 사업전략을 수립할 때, 반드시 그 분야의 ‘기술지식’, ‘업무지식’, ‘재무지식’ 세 가지를 함께 생각합니다.

업종마다 각각 달라서, 새로운 분야에 들어갈 때마다 새로 익혀야 하는 것들입니다.

이 세가지를 Domain Knowledge 라고 할 수 있을 것 같습니다.


3) 기술지식 (Technical Knowlege)

시장을 돌아다니다보면, 세부 사업전략을 수립할 때 아직도 기술팀 없이 진행되는 경우가 종종 있습니다. 또는, implementation의 역할로만 한정되어 중요한 부분에서 의견 개진이 안되는 경우도 있습니다.


IT회사에서 소프트웨어와 개발을 모르고, 제품기획이나 전략수립이 가능할까요?

이론적으로야 가능하겠지만, 경험적으로 불가능합니다.

현장을 이해하지 못하고 만든 전략은 반드시 ‘구현단계’와 ‘성장단계’에 벽에 부딪혀 고꾸라지고 맙니다.


소프트웨어는 하드웨와 형상이 다르지만, 사용자에게 “효용가치를 주는 제품”이라는 점에서는 동일합니다.

Domain Knowledge에서 ‘기술지식’은 팔기 위한 제품자체를 의미하므로 ‘업무지식’이나 ’재무지식’에 못지 않게 중요합니다.

하물며 소프트웨어 분야(서비스든 솔루션이든)도 예외가 될까요?


소프트웨어의 특성, 가치, 제작방법, 제작 후의 유지보수, 그에 필요한 기술적 지식 등을 이해하지 못하고, 어떻게 좋은 전략과 디자인이 나올까요?

사업논리에 묻혀 기술논리를 등한시 한다면 ‘제품’없이 제조업을 하겠다는 것과 같습니다.


‘Technical Domain Knowledge’ 없이 IT 사업에 도전하는 것은, 경쟁자들에게 스스로 호구임을 자처하는 꼴입니다.


4) 개발팀의 에너지가 키워드다.

개발팀은 UI,UX 등 제품의 ‘제작에 참여하는 모든 팀’을 말합니다.

자기 제품을 가진 회사라면, ‘재무지식’과 ‘업무지식’ 만으로 차별된 제품가치를 만들어 내기 힘듭니다.

– 개발팀을 단순히 구현을 위한 역할로 한정짓지 말고,

– ‘개발팀의 에너지를 어떻게 활용하는가?’를 기본으로 깔고 가는 것이 매우 중요한 키워드임을 의사결정권자들이 충분히 공감했으면 좋겠습니다.


그러한 시스템이 되지 않은 상태에서, 개발팀의 열정을 독려하는 것은 물에 젖은 종이에 불을 붙이고자 하는 것과 같습니다. 그런 시스템을 만드는 것은 의사결정권자들의 역할입니다.


5) 사업지식(Business Domain Knowlege) 

사업현장에서 개발팀의 에너지가 유용해지려면, 비즈니스에 대한 지식공유나 이해가 선행되어야 합니다.


중동지방의 기후적 특성이나 고객의 기호를 이해하지 못하고, 수출가능한 자동차를 만들 수는 없습니다. – 중동지방은 밤낮의 온도차가 크고 모래바람이 심해, 도장처리나 철판의 팽창,수축에 대한 심화된 기술지식이 필요했다고 하더군요.


제품을 제작하는 사람이 사업에 대한 이해도를 높이는 건 ‘매우 당연하면서 자연스러운 일’입니다.


큰 회사건 작은 회사건 개발자들의 사업에 대한 이해가 없다면, 핵심과는 동떨어진 기술과 아이디어들로 많은 시간을 낭비하게 될 것입니다.




.

반응형

+ Recent posts