콘텐츠로 건너뛰기
Home » Development » Python

Python

Requests를 사용해서 파일 다운로드 경과를 표시하기

Requests는 파이썬 사용자들이 가장 많이 사용하는 HTTP 통신용 라이브러리일 것이다. 비록 파이썬 표준 라이브러리에 포함되지는 않았지만, 공식 문서에서조차 ‘Requests를 쓰는게 편리하니 추천한다’고 언급할 정도이니… 사실, 파이썬의 역사는 우리의 생각보다 훨씬 오래되었고, 그 와중에 HTTP와 관련된 공식 라이브러리에도 몇 가지 변화가 계속 있어왔다. 최초로 HTTP를 사용하여 데이터를 가져오는 기능은 urllib 에서 구현된 urlopen() 함수였는데, 이 때의 urlopen()은 단순히 open() 함수를 HTTP 너머로 작동하게 하는 것 이상도 이하도 아닌 간단한 구현체였다. HTTP와 관련된 명세는 제법 방대하고 명세 중에서 쓸만한 기능을 제작하기 위해… 더 보기 »Requests를 사용해서 파일 다운로드 경과를 표시하기

텔레그램 API로 채널에 메시지 보내기

파이썬에서 텔레그램 API를 사용하여, 특정 채널에 메시지를 보내는 방법을 알아봅시다. API를 통해서 메시지를 게시하려는 채널이 있다면, 텔레그램에서 새로 봇 하나를 만들고, 이 텔레그램 봇을 해당 채널의 관리자로 추가해줍니다. 이렇게 해 두었다면 API를 사용하여 봇으로 하여금 채널에 메시지를 보낼 수 있게 됩니다. 채널 뿐만 아니라 대화 ID만 알고 있다면,1:1 대화나 그룹대화에도 메시지를 보낼 수 있습니다. 오늘은 이 과정을 하나씩 따라가면서 살펴보겠습니다. 봇 생성하기 봇의 생성은 텔레그램 앱에서 할 수 있습니다. 모바일 앱 외에 PC용 텔레그램에서도 똑같이 할 수 있습니다. 텔레그램에서 제작한… 더 보기 »텔레그램 API로 채널에 메시지 보내기

ZMQ 파이프 만들기

ZMQ 프록시등에서 캡쳐된 데이터를 확인하려고 할 때와 같이 간단하게 1:1로 데이터를 주고 받을 수 있도록 두 개의 PAIR 소켓을 사용하여 파이프를 만들어 활용할 수 있다. 다른 소켓의 구성과 무관하게 스레드간 대화는 inproc 프로토콜을 사용해서 짝지은 소켓을 사용하여 만들 수 있다.

더 보기 »ZMQ 파이프 만들기

수식 파서를 이용한 계산기 만들기

일전에 수식을 직접 입력 받아 후위식으로 변환하여 계산하는, 사칙연산과 괄호를 처리할 수 있는 계산기를 만들어 본 적이 있는데, 1이 계산기는 지금까지 유용하게 잘 쓰고 있는 중임, 이번에는 좀 다른 계산기를 만들어보고자 한다. 사실 파서를 한 번 직접 구현해보고 싶어서 이리 저리 알아보다가 가장 간단하게 만들어 볼 수 있는 구현체가 수식 파서가 아닐까 해서, 정말 실용적으로 사용 가능한 수식 파서를 사용한 계산기를 구현해 보려고 한다.

더 보기 »수식 파서를 이용한 계산기 만들기

Python 101 : 리스트

지난 글에서 파이썬에서 사용되는 가장 기본적인 값의 유형에 대해 살펴보았다. 오늘은 리스트에 대해서 이야기해보려고 한다. 리스트는 여러 개의 값이 연속적으로 배치된 일종의 집합이다. 다른 프로그래밍 언어에서는 배열(Array)이라고 하기도 한다. 사실 배열과 다른 리스트라는 자료 구조가 별도로 존재하기는 하는데 (연결 리스트 같은 걸 들어본 적이 있을지도 모르겠다.) 파이썬의 리스트는 C의 배열과 크게 다르지 않다고 생각하면 된다.

더 보기 »Python 101 : 리스트

ZMQ 소켓을 모니터링하기

zmq 소켓을 사용한 확장 패턴에서 zmq 프록시를 사용하는 경우, 일반적으로 두 개의 소켓을 사용하여 프론트엔드와 백엔드로 사용하는데, 세번째 소켓인 캡쳐를 추가할 수 있다. 캡쳐는 주로 publisher를 사용하는데, 이 소켓으로는 프록시 내부에서 흘러가는 모든 데이터가 캡쳐되어 발송된다. 이런 방식으로 우리는 zmq 프록시의 내용을 모니터링할 수 있다. 이와는 별도로 각각의 zmq 소켓은 그 자체로 모니터링 기능을 제공한다. 소켓은 프로그램과 네트워크 사이를 연결하는 인터페이스로, 소켓을 통과하는 데이터를 캡쳐링할 필요는 없다. 대신에 소켓의 모니터링 기능은 소켓이 네트워크에서 피어와 연결할 때 발생하는 이벤트를 감지한다. 소켓의… 더 보기 »ZMQ 소켓을 모니터링하기

DEALER, ROUTER로 REQ, REP 구현하기

이전 글에서 REQ, REP가 메시지를 주고 받을 때 그 속에서 벌어지는 일들에 대해서 살펴본 바 있다. 그리고 이를 통해 REQ > ROUTER > DEALER > REP 로 이어지는 확장 패턴이 어떻게 맞물려 돌아가는지 확인했다. 그렇다면 과연 ROUTER, DEALER 소켓은 중계기로서의 의미만 있는 것일까? 그렇지 않다. ROUTER/DEALER 소켓은 그 자체로도 유용하게 사용될 수 있는데, 이들 소켓은 REQ/REP 소켓처럼 수신-발신 사이크의 제약을 받지 않는다. 따라서 이들 소켓을 사용하면 완전히 자유로운 비동기 패턴을 구축할 수 있다. 그러한 확장 패턴을 탐구해보는 기초로서, 이 글에서는… 더 보기 »DEALER, ROUTER로 REQ, REP 구현하기

파이썬으로 구현하는 채팅앱

파이썬으로 터미널 상에서 돌아가는 간단한 채팅앱을 구현해보고자 한다. 채팅 앱은 서버와 클라이언트로 구성되며, 각각의 클라이언트가 보내는 메시지를 모든 클라이언트에게 되돌려주면 된다. 이 때 일반적인 에코서버 구현과 다른 점은, 대화 메시지가 오고 가는 방식은 비동기적이기 때문에 실제로는 서버와 클라이언트 모두 각각 수신용과 발신용의 2개의 소켓을 준비해야 한다는 점이다. 어쨌든 이것은 ZMQ를 사용하면 손쉽게 해결할 수 있다. 다음으로 채팅앱에서 어려운 점은 일반적인 input() 함수에 관한 것이다. 채팅앱은 키보드를 통해 메시지를 입력하는 중간에도 수신한 메시지를 출력할 수 있어야 한다. 그런데 input() 함수는 블록킹함수이기… 더 보기 »파이썬으로 구현하는 채팅앱

Subprocess 모듈 사용법 (2021 업데이트)

subprocess 모듈을 사용하는 방법에 대해 정리한 이전 글이 있는데, 이 글도 2021년 기준으로 벌써 6년전 글이고, 실제로 글이 발행됐을 때쯤에 파이썬 3.5가 나오면서 subprocess 모듈이 다시 업데이트 됐었다. 지금은 그 글에서 설명하고 있는 여러 API들은 레거시로 분류되어 있다. 그래서 좀 늦은 감은 있지만 subprocess 모듈의 사용법을 새롭게 정리해 보고자 한다. 급한 사람들을 위한 요약 딱 두 가지이다. 이제 subprocess.run() 함수만 쓰면 된다. run() 의 리턴값인 객체에서 리턴코드, 출력 내용 등을 확인할 수 있다. 물론 함수에 전달하는 추가적인 파라미터에 따라 여러가지… 더 보기 »Subprocess 모듈 사용법 (2021 업데이트)

점자 텍스트로 이미지 표현하기

지난 글에서 이미지를 아스키문자로 렌더링하는 방법에 대해서 알아보았는데, 이번에는 조금 다른 이미지 렌더링 방식에 대해서 알아보자. 인터넷에서 돌아다니는 다음과 같은 아스키아트를 본 적이 있을지 모르겠다. 기존의 아스키아트는 글자 1개가 픽셀 1개를 표현하는데, 이런 종류의 아스키 아트는 1글자가 픽셀 8개를 표현한다. 2×4의 점으로 한 글자가 이루어지는 이 문자들은 유니코드 점자 문자 세트의 글자들이다. 각각의 점이 on/off 상태로 총 128개의 문자를 표현할 수 있기 때문에 실질적으로 모든 픽셀을 표현하는 것이 가능하다. 점자 코드의 첫글자는 0x2800로 빈 칸을 표현하며, 이후 아래방향으로 그리고 다시… 더 보기 »점자 텍스트로 이미지 표현하기