Python

80 posts
파이썬의 property 사용법 (함수/데코레이터)

파이썬의 property 사용법 (함수/데코레이터)

객체지향 프로그래밍 언어에서 프로퍼티(property)는 객체의 속성을 제어할 때 유용하게 사용되는 기능이며 데이터 캡슐화에 도움이 됩니다. 이번 포스팅에서는 파이썬에서 프로퍼티를 구현하기 위해서 property() 함수와 @property 데코레이터를 어떻게 사용하는지 알아보겠습니다. 필드명을 통한 접근 사람의 이름, 성, 나이 데이터를 담기 위한 간단한 클래스를 하나 작성해보겠습니다. 아래 Person 클래스는 이름 first_name, last_name, age 이렇게 3개의 필드로 이루어져 있습니다. Person 클래스의 인

[파이썬] collections 모듈의 OrderedDict 클래스 사용법

[파이썬] collections 모듈의 OrderedDict 클래스 사용법

이번 포스팅에서는 collections 모듈의 OrderedDict 클래스에 대해서 알아보겠습니다. OrderedDict 파이썬 3.6 이전에서는 사전에 데이터를 삽입된 순서대로 데이터를 획득할 수가 없었습니다. 따라서 다음과 같이 무작위 순서로 데이터를 얻게 되는 일이 빈번했었는데요. 대신에 collections 모듈의 OrderedDict 클래스를 사용하면 데이터의 순서를 보장받을 수 있었습니다. 하지만 파이썬 3.6 부터는 기본 사전(dict)도 OrderedDict 클래스와 동일하게 동작하기 때문에 이러한 용도로 Ordere

Docker Compose로 Django 프로젝트 셋업

Docker Compose로 Django 프로젝트 셋업

최근에 많은 Django 프로젝트가 Docker를 이용해서 컨테이너(container) 기반으로 개발되고 테스트, 배포되고 있습니다. 이번 포스팅에서는 Docker Compose이용해서 PostgreSQL를 데이터베이스로 사용하는 Django 애플리케이션을 셋업해보도록 하겠습니다. Docker를 처음 접하시는 분들은 관련 포스팅를 참고하시어 먼저 본인 컴퓨터에서 Docker에 설치하시기 바랍니다. requirements.txt 파이썬에서는 보통 프로젝트에서 필요한 패키지를 requirements.txt 파일에 등록해놓고, 패키지 매

파이썬의 데이터 클래스 사용법 (dataclasses 모듈)

파이썬의 데이터 클래스 사용법 (dataclasses 모듈)

우리는 파이썬으로 코딩을 하면서 데이터를 담아두기 위해서 여러 가지 방법을 사용합니다. 리스트(list), 튜플(tuple), 사전(dictoinary), 네임드 튜플(namedtuple), 세트(set), 프로즌 세트(frozen set)와 같은 내장 자료구조는 사용하기 간편하다는 장점이 있는데요. 반면에 클래스(class)를 이용해서 데이터를 담아두면 type-safe해지기 때문에 프로그램 실행 중에 오류가 발생할 확률이 적어진다는 장점이 있습니다. 파이썬 3.7에서 dataclasses라는 매우 매력적인 모듈이 표준 라이브러리

파이썬 컴프리헨션으로 데이터를 우아하게 다루기

파이썬 컴프리헨션으로 데이터를 우아하게 다루기

파이썬 코드를 읽다 보면 대괄호 안에 for가 들어간 독특한 문법을 자주 만나게 됩니다. 처음 보면 낯설지만, 한 번 손에 익으면 도저히 안 쓸 수가 없는 파이썬의 꽃 🌼이라고 할 수 있는데요. 바로 컴프리헨션(comprehension)입니다. 컴프리헨션은 기존 데이터를 기반으로 새로운 리스트, 딕셔너리, 세트를 간결하게 만들어내는 파이썬만의 문법입니다. 반복문을 여러 줄에 걸쳐 쓰는 대신 한 줄로 표현할 수 있어서 코드가 훨씬 깔끔해지거든요. 이번 포스팅에서는 리스트 컴프리헨션부터 시작해서 딕셔너리, 세트 컴프리헨션, 그리고 제

파이썬 reduce 함수 사용법

파이썬 reduce 함수 사용법

reduce 함수 파이썬의 functools 내장 모듈의 reduce() 함수는 여러 개의 데이터를 대상으로 주로 누적 집계를 내기 위해서 사용합니다. 기본 문법은 다음과 같은데요. 기본적으로 초기값을 기준으로 데이터를 루프 돌면서 집계 함수를 계속해서 적용하면서 데이터를 누적하는 방식으로 작동합니다. 여기서, 집계 함수는 두개의 인자를 받아야 하는데요. 첫번째 인자는 누적자(accumulator), 두번째 인자는 현재값(current value)가 넘어오게 됩니다. 누적자는 함수 실행의 시작부터 끝까지 계속해서 재사용되는 값이고,

파이썬의 filter 내장 함수로 데이터 추출하기

파이썬의 filter 내장 함수로 데이터 추출하기

함수형 프로그래밍에서 데이터 필터링(filtering) 작업을 할 때 반복문 대신에 함수 호출로 처리하는 경우가 많은데요. 이번 포스팅에서는 파이썬의 filter() 함수를 사용하여 특정 조건을 충족하는 요소만 추출하는 방법에 대해서 알아보겠습니다. filter 내장 함수 파이썬의 내장 함수인 filter()는 여러 개의 데이터로 부터 일부의 데이터만 추려낼 때 사용하는데요. 따라서, 여러 개의 데이터를 담고 있는 리스트(list)나 튜플(tuple)을 대상으로 주로 사용하는 함수입니다. 사용 방법은 매우 간단한데요. 기본 문법은

파이썬의 map 내장 함수로 데이터 변환하기

파이썬의 map 내장 함수로 데이터 변환하기

함수형 프로그래밍에서 데이터 맵핑(mapping) 작업을 할 때 반복문 대신에 함수 호출로 처리하는 경우가 많은데요. 이번 포스팅에서는 파이썬의 map() 함수를 사용하여 여러 데이터를 한 번에 변환하는 방법에 대해서 알아보겠습니다. map 내장 함수 파이썬의 내장 함수인 map()는 여러 개의 데이터를 한 번에 다른 형태로 변환하기 위해서 사용하는데요. 따라서, 여러 개의 데이터를 담고 있는 리스트(list)나 튜플(tuple)을 대상으로 주로 사용하는 함수입니다. 사용 방법은 매우 간단한데요. 기본 문법은 다음과 같습니다. ma

파이썬의 불변(immutable) 자료구조 - tuple, frozenset, namedtuple

파이썬의 불변(immutable) 자료구조 - tuple, frozenset, namedtuple

Immutability (불변성) 최근 소프트웨어 개발 트랜드를 보면 프로그래밍 언어에 관계없이 불변(imuutable) 데이터 타입의 사용을 권장하는 추세입니다. 여러 가지 이유가 있겠지만 메모리의 가격이 계속해서 싸지면서 데이터를 복제하는 대신에 변경하는 것이 더 이상 큰 이점으로 여겨지지 않고 있습니다. 반면에, 데이터를 변경하는 것에 대한 리스크는 멀티 스레드 기반의 동시/병렬 프로세싱 기법이 발달하면서 점점 더 커지고 있습니다. 즉, 여러 스레드가 동시에 데이터를 변경할 경우, 소프트웨어가 어떻게 동작할지 예측이 어렵고 버

파이썬으로 가짜 데이터 생성하기 - Faker

파이썬으로 가짜 데이터 생성하기 - Faker

가짜 데이터 소프트웨어를 개발하다 보면, 특히 시제품(prototype)을 개발하거나, 단위 테스트를 작성할 때 가짜 데이터가 필요할 때가 있습니다. 이럴 때, 직접 가짜 데이터를 하드코딩(hard-coding)할 수도 있겠지만, 좀 더 쉽고 빠르게 가짜 데이터를 얻을 수 있는 방법이 있어서 소개드리려고 합니다. 바로, Faker라는 라이브러리인데요. Faker를 사용하면 가짜 데이터를 정말 너무 간단하게 생성할 수 있습니다. 👍 패키지 설치 패키지 임포트 가짜 이름 생성 name() 메서드를 사용하면 간단하게 가짜 이름을 생성할

파이썬 로깅 설정 - logger, handler, formatter

파이썬 로깅 설정 - logger, handler, formatter

지난 포스팅에서 파이썬의 logging 내장 모듈을 이용해서 정말 기본적인 로깅 방법에 대해서 살펴보았습니다. 이번 포스팅에서는 애플리케이션 규모가 커짐에 따라 어떻게 효과적으로 로깅을 설정해야 하는지에 대해서 다뤄보도록 하겠습니다. 핵심 컴포넌트 로깅 설정을 제대로 하기 위해서는 먼저 로깅 시스템을 구성하는 핵심 컴포넌트를 이해하는 것이 중요합니다. 먼저 가장 로깅 시스템의 가장 근간이 되는 로거(logger)는 로그 메시지를 남기기 위해서 우리가 직접 사용하는 프로그래밍 인터페이스를 제공합니다. 우리는 로거를 통해서 debug(

파이썬에서 환경 변수 다루기 (os.environ)

파이썬에서 환경 변수 다루기 (os.environ)

여러 환경에 파이썬 애플리케이션을 배포하려면 환경 변수라는 것을 이용해야하는데요. 이번 포스팅에서는 파이썬에서 환경 변수에 어떻게 접근하고 설정할 수 있는지에 대해서 알아보겠습니다. 환경 변수란? 먼저 환경 변수(environment variable)가 무엇인지 간단하게 짚고 넘어가면 좋을 것 같은데요. 환경 변수는 운영 체제(operating system) 수준에서 설정되는 변수로, 주로 애플레케이션 수준에서 설정하기가 불가능하거나 어려운 값들을 환경 변수로 관리하는 경우가 많죠. 그중에서도 PATH 환경 변수는 터미널에서 명령어

[파이썬] 테스트 모킹 - patch

[파이썬] 테스트 모킹 - patch

지난 포스팅에서 unittest.mock 모듈의 Mock 또는 MagicMock 클래스를 사용하여 기본적인 mocking을 하는 방법에 대해서 알아보았습니다. 이번 포스팅에서는 실전에서 더 많이 쓰이는 unittest.mock 모듈의 patch() 데코레이터를 이용하여 단위 테스트를 좀 더 세련되게 작성하는 방법에 대해서 알아보겠습니다. patching? mocking? unittest.mock 모듈의 patch() 데코레이터를 이용하면 특정 모듈의 함수나 클래스를 가짜(mock) 객체, 좀 더 엄밀히 말하면, MagicMock 인

파이썬 소수 연산 - float 타입과 decimal 모듈

파이썬 소수 연산 - float 타입과 decimal 모듈

float 타입 파이썬의 float 기본 타입은 대부분의 다른 프로그래밍 언어들처럼 소수를 내부적으로 이진수의 형태로 저장합니다. (컴퓨터라는 기계는 결국에 0 또는 1로 모든 데이터를 저장히기 때문이죠...) 예를 들어, 십진 소수 0.875을 float 타입으로 저장하면 이진 소수인 0.111의 형태가 됩니다 (1/2 + 1/4 + 1/8). 하지만 불행이도 모든 십진 소수가 이와 같이 딱 떨어지게 이진 소수의 형태로 표현될 수 있는 것은 아닙니다. 예를 들어, 십진 소수 0.895를 이진 소수로 변환해보면 0.111001010

[파이썬] 테스트 모킹 - unittest.mock

[파이썬] 테스트 모킹 - unittest.mock

본 포스팅의 내용을 문제없이 이해하려면 파이썬의 기본 테스팅에 대한 선수 지식이 필요합니다. 해당 지식이 부족하신 분들은 관련 포스팅를 먼저 읽고 돌아오시는 것을 추천드립니다. Mocking이란? 단위 테스트를 작성하다보면 데이터베이스 또는 외부 API에 의존하는 코드를 테스트해야 할 일이 필연적으로 생기기 마련입니다. 운영 환경 대비 제약이 많은 테스트 환경에서는 실제 데이터베이스와 연동하거나 실제 외부 API를 호출하기가 불가능한 경우가 많습니다. 가령 가능하더라도, 이렇게 외부 서비스에 의존하는 테스트는 해당 서비스에 문제가

파이썬 기본 로깅 - logging 내장 모듈

파이썬 기본 로깅 - logging 내장 모듈

logging 내장 모듈 외부 라이브러리가 없더라도 대부분의 애플리케이션에서는 파이썬에 내장되어 있는 logging 모듈만으로도 충분히 로깅이 가능합니다. logging 내장 모듈은 파이썬만 설치되어 있다면 다음과 같이 인터프리터에서도 간단히 임포트해서 사용해볼 수 있습니다. 심각도 별 로깅 logging 모듈은 5단계의 심각도 따라 다른 메서드를 제공하고 있습니다. 기본적으로 이 중 하나의 메서드에 로깅할 메시지를 인자로 넘겨서 호출하면 로그가 남습니다. 위 프로그램을 실행해보면 다음과 같이 debug와 info를 제외하고 로그가

Pipenv를 사용한 파이썬 가상 환경과 패키지 관리

Pipenv를 사용한 파이썬 가상 환경과 패키지 관리

파이썬의 패키지 매니저 대부분의 프로그래밍 언어들은 자체적으로 패키지 관리 도구(package manager)를 제공하고 있습니다. 자바의 Maven, 자바스크립트의 npm처럼 파이썬에서는 pip라는 매우 간단한 패키지 관리 도구가 있는데요. 다른 언어의 패키지 매니저와 비교했을 때 부족한 부분들이 많다고 느끼실 겁니다. 일단 기본적으로 패키지 설치가 전역으로(global) 설치되기 때문에 한 컴퓨터 상에서 여러 파이썬 프로젝트에 걸쳐 작업을 하기가 힘들고, 프로젝트 별로 설치가 필요한 패키지를 정의하는 방식도 어디는 require

Black으로 파이썬 코드 스타일 통일하기

Black으로 파이썬 코드 스타일 통일하기

코드 스타일 파이썬과 같이 사용차층이 넓은 범용 프로그래밍 언어의 경우, 개발자들이 선호하는 코드 스타일이 다양해지게 됩니다. 개인 프로젝트에서는 자신이 선호에 따라 어떤 방식으로 코드를 포맷팅하든지 코드가 돌아가기면 하면 큰 상관이 없지만, 협업 프로젝트에서는 이러한 개발자 간의 사소한 코드 스타일 차이로 불필요한 감정 싸움이 발생하기도 합니다. 예를 들어, 똑같은 문자열을 표현하기 위해서 개발자 A는 홑따옴표를 사용하고 싶은데, 개발자 B는 쌍따옴표를 사용하고 싶습니다. 만약에 개발자 A가 작성한 코드를 나중에 개발자 B가 수정

파이썬의 venv 모듈로 가상 환경 사용하기

파이썬의 venv 모듈로 가상 환경 사용하기

이번 포스팅에서는 의존성 충돌없이 파이썬 개발을 할 수 있도록 도와주는 매우 유용한 도구인 venv 내장 모듈에서 대해서 알아보겠습니다. 의존성 충돌 문제 하나의 컴퓨터 상에서 Python으로 개발된 여러 개의 프로젝트 돌리는 경우 프로젝트 간에 의존성(dependency) 충돌이 발생하기 쉬운데요. 예를 들어서 프로젝트 A에서 Django 패키지 3.x 버전을 사용하는데, 프로젝트 B에서 Django 패키지를 4.x 버전을 사용하고 있다면, 둘 중 하나의 프로젝트에서는 Django 앱을 실행할 때 오류가 발생할 가능성이 높습니다.

여러 버전의 파이썬 관리하기 (pyenv)

여러 버전의 파이썬 관리하기 (pyenv)

2020년 파이썬 2 지원 종료 파이썬 2는 2020년 1월 1일부로 공식적으로 지원이 중료되었으며, 버전 2.7 이후로는 더 이상 업데이트가 되지 않습니다. (참고: https://pythonclock.org) 하지만 Mac의 경우, 아직도 파이썬 2가 기본 실행 환경(runtime/interpreter)로 사용되고 있어서, 파이썬 3를 사용하려면 추가 설치가 필요한 실정입니다. macOS에 내장된 파이썬의 정확한 버전과 바이너리 파일의 위치는 다음과 같이 확인하실 수 있습니다. Mac에서 파이썬 3 설치 Mac의 패키지 매니저인

Discord