“ 매주 목요일마다 당신이 항상 하던대로 신발끈을 묶으면 신발이 폭발한다고 생각해보라.
컴퓨터를 사용할 때는 이런 일이 항상 일어나는데도 아무도 불평할 생각을 안 한다. ”- Jef Raskin
맥의 아버지 - 애플컴퓨터의 매킨토시 프로젝트를 주도

들어가며 : SQL의 한계를 넘어서
PostgreSQL은 강력한 관계형 데이터베이스이지만 순수 SQL만으로는 복잡한 비즈니스 로직이나 문자열 처리를 구현하는 데 한계가 있습니다. 이때 사용할 수 있는 가장 강력한 도구가 바로 PL/Python입니다. 이는 데이터베이스 내부에서 파이썬 언어를 사용하여 함수나 프로시저를 작성할 수 있게 해주는 절차적 언어 핸들러입니다. 본 글에서는 윈도우 운영체제에서 PL/Python을 사용하기 위한 설치 방법과 환경 설정 그리고 실무에서 활용 가능한 예제 코드를 상세하게 정리해 드립니다.
윈도우 환경 설치 및 설정 방법
윈도우에서 PostgreSQL과 파이썬을 연동할 때 가장 주의해야 할 점은 버전 호환성입니다. 리눅스 패키지 관리자와 달리 윈도우 인스톨러는 특정 파이썬 버전에 의존적인 DLL 파일을 포함하고 있습니다.
설치 및 설정 단계는 다음과 같습니다.
- Python 설치 : PostgreSQL 버전에 맞는 파이썬을 공식 홈페이지에서 다운로드하여 설치합니다.
- 환경 변수 설정 : 제어판의 시스템 환경 변수 설정에서 PYTHONHOME 변수를 새로 만들고 파이썬 설치 경로를 지정해야 합니다. 또한 Path 변수에도 파이썬 실행 경로와 Scripts 경로를 추가합니다.
- 서비스 재시작 : 환경 변수 변경 사항이 PostgreSQL 서비스에 적용되도록 Windows 서비스 관리자에서 서비스를 재시작합니다.
PostgreSQL 확장 활성화
환경 설정이 끝났다면 데이터베이스에 접속하여 확장을 생성해야 합니다. plpython3u 확장을 설치하며 여기서 u는 untrusted를 의미하므로 슈퍼유저 권한이 필요합니다.
CREATE EXTENSION plpython3u;
SELECT * FROM pg_extension WHERE extname = 'plpython3u';
PL/Python 함수 활용 예제
파이썬 문법을 그대로 사용하여 DB 함수를 만드는 방법을 예제와 함께 살펴보겠습니다.
예제 1 : 두 수 비교 함수가장 기초적인 형태의 함수입니다. 파이썬의 if 조건문을 사용하여 로직을 구현합니다.
CREATE OR REPLACE FUNCTION public.py_max(a integer, b integer)
RETURNS integer
AS $$
if a > b :
return a
return b
$$ LANGUAGE plpython3u;
SELECT public.py_max(10, 20);
파이썬의 내장 모듈인 json을 import하여 딕셔너리 데이터를 손쉽게 JSON 문자열로 변환할 수 있습니다.
CREATE OR REPLACE FUNCTION public.py_create_json(key text, value text)
RETURNS json
AS $$
import json
data = {key : value}
return json.dumps(data)
$$ LANGUAGE plpython3u;
SELECT public.py_create_json('result', 'success');
여러 행을 반환해야 하는 경우 파이썬의 yield 키워드를 사용하여 제너레이터 형태로 구현합니다.
CREATE OR REPLACE FUNCTION public.py_sequence(start_val int, end_val int)
RETURNS SETOF integer
AS $$
for i in range(start_val, end_val + 1) :
yield i
$$ LANGUAGE plpython3u;
SELECT * FROM public.py_sequence(1, 5);
마무리
이상으로 윈도우 환경에서 PostgreSQL에 파이썬을 연동하고 활용하는 방법에 대해 알아보았습니다. PL/Python을 도입하면 복잡한 연산이나 외부 라이브러리가 필요한 작업을 데이터베이스 계층에서 효율적으로 처리할 수 있습니다. 개발 환경 구축 시 파이썬 버전과 환경 변수 설정만 꼼꼼히 챙기신다면 강력한 백엔드 기능을 구현하실 수 있습니다.
커피 한 잔의 힘
이 글이 도움이 되셨다면, 커피 한 잔으로 응원해주세요!
여러분의 작은 후원이 더 좋은 콘텐츠를 만드는 큰 힘이 됩니다.