콘텐츠로 건너뛰기
Home » python » Page 2

python

Python 101 – 함수

프로그래밍에서 함수는 핵심적인 개념이지만, 언어나 상황마다 용어가 다르기도 하고 정의도 모호해서 “함수는 이것이다!”라고 딱 잘라 말하기는 사실 힘듭니다. 위키 백과의 정의만 찾아봐도요.

함수(function), 서브루틴(subroutine), 루틴(routine), 메서드(method), 프로시저(procedure)는 소프트웨어에서 특정 동작을 수행하는 일정 코드 부분을 의미한다.

함수는 대부분의 프로그래밍 언어에서 지원하는 기능으로, 하나의 큰 프로그램을 여러 부분으로 나누어주기 때문에 같은 함수를 여러 상황에서 여러 차례 호출할 수 있으며 일부분을 수정하기 쉽다는 장점을 가진다.

https://ko.wikipedia.org/wiki/함수_(컴퓨터_과학)

가장 넓은 의미에서 함수를 정의하자면 “1개 이상의 동작을 묶어놓은 것”이라고 할 수 있습니다. 즉 일련의 동작을 하나의 단위로 묶어두고, 원하는 만큼 여러 차례 호출하여 사용하는 것이죠. 그렇게해서 전체 코드의 양을 줄일 수 있고, 또 공통된 동작에서 어떤 변경이나 수정이 필요할 때, 소스 코드의 이곳 저곳이 아닌 한 부분만 수정하면 되기 때문에 유지 보수 관점에서도 노력을 아낄 수 있죠.

이미 우리는 파이썬에서 함수를 사용하는 법을 알고 있습니다. 어떤 문자열이나 객체의 내용을 출력하는 print() 나 사용자로부터 문자열을 입력받는 input() 과 같은 동작은 파이썬이 미리 제공하는 함수입니다. 이렇게 별다른 사전 준비 없이 바로 사용할 수 있는, 파이썬이 기본적으로 제공하는 함수를 내장함수(builtin function)라고 합니다. 우리는 내장 함수를 사용하는 것외에 우리가 원하는 동작을 함수로 만들어서 사용할 수도 있습니다. 이런 개념을 내장함수에 상대적인 개념으로 사용자 정의 함수 (user defined function)이라고 합니다.

더 보기 »Python 101 – 함수

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

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

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

일전에 수식을 직접 입력 받아 후위식으로 변환하여 계산하는, 사칙연산과 괄호를 처리할 수 있는 계산기를 만들어 본 적이 있는데, 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 업데이트)

ZMQ 소켓 – Dealer, Router 이해하기

이전 글에서 프록시를 소개하면서 단순한 REQ – REP 패턴의 네트워크 중간에 중간 매개로 프록시를 넣어 REQ – ROUTER – DEALER – REP 형태로 패턴을 확장하는 예를 살펴보았다. 이 때, ROUTER – DEALER 사이에서 오가는 데이터를 보면 REQ-REP 사이에서 오가는 데이터와 다르게 추가된 프레임이 보인다는 것을 볼 수 있었다. 이번 글에서는 이런 현상은 왜 일어나며, ROUTER가 무슨 짓을 벌이는지에 대해 소개하고자 한다. 적어도 이 개념을 이해한다면 ZMQ를 통해서 훨씬 더 유연하고 창의적인(?) 패턴을 만드는 것도 가능하리라고 본다. 먼저 간단한 REQ-REP 패턴에서… 더 보기 »ZMQ 소켓 – Dealer, Router 이해하기