reduce 함수 파이썬의 functools 내장 모듈의 reduce() 함수는 여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용합니다. 기본 문법은 다음과 같은데요. 기본적으로 초기값을 기준으로 데이터를 루프 돌면서 집계 함수를 계속해서 적용하면서 데이터를 누적하는 방식으로 작동합니다. 여기서, 집계 함수는 두개의 인자를 받아야 하는데요. 첫번째 인자는 누적자(accumulator), 두번째 인자는 현재값(current value)가 넘어오게 됩니다. 누적자는 함수 실행의 시작부터 끝까지 계속해서 재사용되는 값이고,
함수형 프로그래밍에서 데이터 필터링(filtering) 작업을 할 때 반복문 대신에 함수 호출로 처리하는 경우가 많은데요. 이번 포스팅에서는 파이썬의 filter() 함수를 사용하여 특정 조건을 충족하는 요소만 추출하는 방법에 대해서 알아보겠습니다. filter 내장 함수 파이썬의 내장 함수인 filter()는 여러 개의 데이터로 부터 일부의 데이터만 추려낼 때 사용하는데요. 따라서, 여러 개의 데이터를 담고 있는 리스트(list)나 튜플(tuple)을 대상으로 주로 사용하는 함수입니다. 사용 방법은 매우 간단한데요. 기본 문법은
함수형 프로그래밍에서 데이터 맵핑(mapping) 작업을 할 때 반복문 대신에 함수 호출로 처리하는 경우가 많은데요. 이번 포스팅에서는 파이썬의 map() 함수를 사용하여 여러 데이터를 한 번에 변환하는 방법에 대해서 알아보겠습니다. map 내장 함수 파이썬의 내장 함수인 map()는 여러 개의 데이터를 한 번에 다른 형태로 변환하기 위해서 사용하는데요. 따라서, 여러 개의 데이터를 담고 있는 리스트(list)나 튜플(tuple)을 대상으로 주로 사용하는 함수입니다. 사용 방법은 매우 간단한데요. 기본 문법은 다음과 같습니다. ma
Immutability (불변성) 최근 소프트웨어 개발 트랜드를 보면 프로그래밍 언어에 관계없이 불변(imuutable) 데이터 타입의 사용을 권장하는 추세입니다. 여러 가지 이유가 있겠지만 메모리의 가격이 계속해서 싸지면서 데이터를 복제하는 대신에 변경하는 것이 더 이상 큰 이점으로 여겨지지 않고 있습니다. 반면에, 데이터를 변경하는 것에 대한 리스크는 멀티 쓰레드 기반의 동시/병렬 프로세싱 기법이 발달하면서 점점 더 커지고 있습니다. 즉, 여러 쓰레드가 동시에 데이터를 변경할 경우, 소프트웨어가 어떻게 동작할지 예측이 어렵고 버
가짜 데이터 소프트웨어를 개발하다 보면, 특히 시제품(prototype)을 개발하거나, 단위 테스트를 작성할 때 가짜 데이터가 필요할 때가 있습니다. 이럴 때, 직접 가짜 데이터를 하드코딩(hard-coding)할 수도 있겠지만, 좀 더 쉽고 빠르게 가짜 데이터를 얻을 수 있는 방법이 있어서 소개드리려고 합니다. 바로, Faker라는 라이브러리인데요. Faker를 사용하면 가짜 데이터를 정말 너무 간단하게 생성할 수 있습니다. 👍 패키지 설치 패키지 임포트 가짜 이름 생성 name() 메서드를 사용하면 간단하게 가짜 이름을 생성할
지난 포스팅에서 파이썬의 logging 내장 모듈을 이용해서 정말 기본적인 로깅 방법에 대해서 살펴보았습니다. 이번 포스팅에서는 애플리케이션 규모가 커짐에 따라 어떻게 효과적으로 로깅을 설정해야 하는지에 대해서 다뤄보도록 하겠습니다. 핵심 컴포넌트 로깅 설정을 제대로 하기 위해서는 먼저 로깅 시스템을 구성하는 핵심 컴포넌트를 이해하는 것이 중요합니다. 먼저 가장 로깅 시스템의 가장 근간이 되는 로거(logger)는 로그 메시지를 남기기 위해서 우리가 직접 사용하는 프로그래밍 인터페이스를 제공합니다. 우리는 로거를 통해서 debug(
여러 환경에 파이썬 애플리케이션을 배포하려면 환경 변수라는 것을 이용해야하는데요. 이번 포스팅에서는 파이썬에서 환경 변수에 어떻게 접근하고 설정할 수 있는지에 대해서 알아보겠습니다. 환경 변수란? 먼저 환경 변수(environment variable)가 무엇인지 간단하게 짚고 넘어가면 좋을 것 같은데요. 환경 변수는 운영 체제(operating system) 수준에서 설정되는 변수로, 주로 애플레케이션 수준에서 설정하기가 불가능하거나 어려운 값들을 환경 변수로 관리하는 경우가 많죠. 환경 변수를 이용하면 애플리케이션 코드를 수정하지
지난 포스팅에서 unittest.mock 모듈의 Mock 또는 MagicMock 클래스를 사용하여 기본적인 mocking을 하는 방법에 대해서 알아보았습니다. 이번 포스팅에서는 실전에서 더 많이 쓰이는 unittest.mock 모듈의 patch() 데코레이터를 이용하여 단위 테스트를 좀 더 세련되게 작성하는 방법에 대해서 알아보겠습니다. patching? mocking? unittest.mock 모듈의 patch() 데코레이터를 이용하면 특정 모듈의 함수나 클래스를 가짜(mock) 객체, 좀 더 엄밀히 말하면, MagicMock 인
float 타입 파이썬의 float 기본 타입은 대부분의 다른 프로그래밍 언어들처럼 소수를 내부적으로 이진수의 형태로 저장합니다. (컴퓨터라는 기계는 결국에 0 또는 1로 모든 데이터를 저장히기 때문이죠...) 예를 들어, 십진 소수 0.875을 float 타입으로 저장하면 이진 소수인 0.111의 형태가 됩니다 (1/2 + 1/4 + 1/8). 하지만 불행이도 모든 십진 소수가 이와 같이 딱 떨어지게 이진 소수의 형태로 표현될 수 있는 것은 아닙니다. 예를 들어, 십진 소수 0.895를 이진 소수로 변환해보면 0.111001010
본 포스팅의 내용을 문제없이 이해하려면 파이썬의 기본 테스팅에 대한 선수 지식이 필요합니다. 해당 지식이 부족하신 분들은 관련 포스팅를 먼저 읽고 돌아오시는 것을 추천드립니다. Mocking이란? 단위 테스트를 작성하다보면 데이터베이스 또는 외부 API에 의존하는 코드를 테스트해야 할 일이 필연적으로 생기기 마련입니다. 운영 환경 대비 제약이 많은 테스트 환경에서는 실제 데이터베이스와 연동하거나 실제 외부 API를 호출하기가 불가능한 경우가 많습니다. 가령 가능하더라도, 이렇게 외부 서비스에 의존하는 테스트는 해당 서비스에 문제가
logging 내장 모듈 외부 라이브러리가 없더라도 대부분의 애플리케이션에서는 파이썬에 내장되어 있는 logging 모듈만으로도 충분히 로깅이 가능합니다. logging 내장 모듈은 파이썬만 설치되어 있다면 다음과 같이 인터프리터에서도 간단히 임포트해서 사용해볼 수 있습니다. 심각도 별 로깅 logging 모듈은 5단계의 심각도 따라 다른 메서드를 제공하고 있습니다. 기본적으로 이 중 하나의 메서드에 로깅할 메시지를 인자로 넘겨서 호출하면 로그가 남습니다. 위 프로그램을 실행해보면 다음과 같이 debug와 info를 제외하고 로그가
파이썬의 패키지 매니저 대부분의 프로그래밍 언어들은 자체적으로 패키지 관리 도구(package manager)를 제공하고 있습니다. 자바의 Maven, 자바스크립트의 npm처럼 파이썬에서는 pip라는 매우 간단한 패키지 관리 도구가 있는데요. 다른 언어의 패키지 매니저와 비교했을 때 부족한 부분들이 많다고 느끼실 겁니다. 일단 기본적으로 패키지 설치가 전역으로(global) 설치되기 때문에 한 컴퓨터 상에서 여러 파이썬 프로젝트에 걸쳐 작업을 하기가 힘들고, 프로젝트 별로 설치가 필요한 패키지를 정의하는 방식도 어디는 require
코드 스타일 파이썬과 같이 사용차층이 넓은 범용 프로그래밍 언어의 경우, 개발자들이 선호하는 코드 스타일이 다양해지게 됩니다. 개인 프로젝트에서는 자신이 선호에 따라 어떤 방식으로 코드를 포맷팅하든지 코드가 돌아가기면 하면 큰 상관이 없지만, 협업 프로젝트에서는 이러한 개발자 간의 사소한 코드 스타일 차이로 불필요한 감정 싸움이 발생하기도 합니다. 예를 들어, 똑같은 문자열을 표현하기 위해서 개발자 A는 홑따옴표를 사용하고 싶은데, 개발자 B는 쌍따옴표를 사용하고 싶습니다. 만약에 개발자 A가 작성한 코드를 나중에 개발자 B가 수정
이번 포스팅에서는 의존성 충돌없이 파이썬 개발을 할 수 있도록 도와주는 매우 유용한 도구인 venv 내장 모듈에서 대해서 알아보겠습니다. 의존성 충돌 문제 하나의 컴퓨터 상에서 Python으로 개발된 여러 개의 프로젝트 돌리는 경우 프로젝트 간에 의존성(dependency) 충돌이 발생하기 쉬운데요. 예를 들어서 프로젝트 A에서 Django 패키지 3.x 버전을 사용하는데, 프로젝트 B에서 Django 패키지를 4.x 버전을 사용하고 있다면, 둘 중 하나의 프로젝트에서는 Django 앱을 실행할 때 오류가 발생할 가능성이 높습니다.
2020년 파이썬 2 지원 종료 파이썬 2는 2020년 1월 1일부로 공식적으로 지원이 중료되었으며, 버전 2.7 이후로는 더 이상 업데이트가 되지 않습니다. (참고: https://pythonclock.org) 하지만 Mac의 경우, 아직도 파이썬 2가 기본 실행 환경(runtime/interpreter)로 사용되고 있어서, 파이썬 3를 사용하려면 추가 설치가 필요한 실정입니다. macOS에 내장된 파이썬의 정확한 버전과 바이너리 파일의 위치는 다음과 같이 확인하실 수 있습니다. Mac에서 파이썬 3 설치 Mac의 패키지 매니저인
파이썬에서도 자바스크립트처럼 비동기로 작동하는 코드를 짤 수 있을까요? 이번 글에서는 파이썬에 내장된 asyncio 모듈을 통해 비동기 프로그래밍을 어떻게 수행하는지에 대해서 알아보겠습니다. 동시 프로그래밍의 패러다임의 변화 전통적으로 동시 프로그래밍(concurrent programming)은 여러 개의 쓰레드(thread)를 활용하여 이루어졌는데요. 하지만 쓰레드를 이용해서 직접 코딩을 해보신 분이라면 겪어보셨겠지만, thread safe한 프로그램을 작성하는 것은 생각보다 쉬운 일이 아닙니다. 게다가 싱글 코어 프로세서에서 이
간단한 시간 데이터를 처리하기 위해서 사용되는 파이썬의 내장 모듈인 time에 대해서 알아보도록 하겠습니다. Epoch Time 파이썬의 time 내장 모듈은 주로 epoch time(Unix time, POSIX time)을 다룰 때 사용합니다. epoch time은 UTC(GMT+0) 기준으로 1970년 1월 1일 0시 0분 0초부터의 경과 시간을 나타내는데 흔히 timestamp라고 불리기도 합니다. 인간이 사용하는 사용하는 날짜와 시간에는 시간대(time zone), 일광절약타임(date light saving), 윤년/윤달
JSON은 JavaScript Object Notation의 약자로서 데이터를 문자열의 형태로 나타내기 위해서 사용되는데요. 이름이 암시하듯 JSON은 원래 자바스크립트에서 파생되었지만 현재는 프로그래밍 언어와 무관하게 거의 표준으로 자리잡아 특히 이종의 시스템 간에 원격으로 데이터를 주고 받을 때 많이 사용되고 있습니다. 이번 포스팅에서는 파이썬에서 JSON 형태의 데이터를 처리하기 위해서 사용되는 내장 모듈인 json에 대해서 알아보도록 하겠습니다. loads() 함수: JSON 문자열을 Python 객체로 변환 JSON 문자열
파이썬에서는 내장 함수인 open()을 이용해서 다른 언어에 비해서 매우 간단하게 파일 입출력 처리를 할 수 있습니다. 파일에 데이터 쓰기 먼저 파일에 데이터를 쓰는 방법에 대해서 알아보겠습니다. 아래 colors 배열에 들어있는 문자열 3개를 colors.dat 파일에 쓰려고 합니다. 파일을 열 때는 기본적으로 with 문을 통해 open() 내장 함수를 호출하는 것이 권장됩니다. with 문을 사용하지 않을 경우, 파일 닫기를 스스로 해줘야 해서 불필요하게 코드가 지저분해지기 때문입니다. open() 내장 함수는 첫번째 인자로는
어느 언어로 코딩을 하든 단위 테스트는 신뢰할 수 있는 애플리케이션을 개발하기 위해서 필수적으로 습득해야하는 기술입니다. 파이썬에서는 내장 모듈인 unittest을 통해서 다른 라이브러리 없이 비교적 간단하게 단위 테스트를 작성할 수 있습니다. unittest 모듈 unittest 모듈은 Java의 JUnit, JavaScript의 Jest 또는 Mocha와 같은 단위 테스트 프레임워크입니다. 다만 다른 언어와 달리 기본적으로 언어에 내장되어 있기 때문에 파이썬만 설치가 되어 있다면 바로 모듈을 불러와서(import) 사용할 수 있