Programming/python 13

__del__과 weakref.finalize

개요Python에서 객체의 리소스 정리를 위한 두 가지 주요 메커니즘인 __del__ 메서드와 weakref.finalize는 각각 다른 접근 방식으로 메모리 관리와 종료자 구현을 제공한다. __del__은 Python 초기부터 존재했던 전통적인 종료자 메서드로, 객체가 가비지 컬렉션될 때 자동으로 호출되지만 순환 참조와 실행 순서 문제로 인한 제약이 있다. 반면 weakref.finalize는 Python 3.4에서 PEP 442와 함께 도입된 현대적 접근법으로, 약한 참조를 기반으로 하여 더 안전하고 예측 가능한 리소스 정리를 제공한다. 두 메커니즘은 서로 다른 실행 시점과 특성을 가지며, 특정 상황에서 각각의 장단점이 존재한다. 현대 Python 개발에서는 weakref.finalize가 더 권장되..

Programming/python 2025.07.17

Python GIL

개요Python GIL(Global Interpreter Lock)은 CPython 인터프리터에서 사용되는 뮤텍스로, 한 번에 하나의 스레드만이 Python 바이트코드를 실행할 수 있도록 제한하는 메커니즘이다. 1991년 Python이 처음 개발될 당시 메모리 관리와 스레드 안전성을 보장하기 위해 도입된 GIL은 단일 스레드 프로그램의 성능을 향상시키고 C 확장 모듈의 안전한 사용을 가능하게 했다. 그러나 멀티코어 프로세서가 보편화된 현재, GIL은 CPU 집약적 작업에서 병렬 처리의 이점을 제한하는 주요 병목점으로 작용하고 있다. 2024년 현재 Python 커뮤니티는 PEP 703을 통해 GIL을 선택적으로 비활성화할 수 있는 방안을 검토하고 있으며, CPython 3.13부터 --disable-gi..

Programming/python 2025.07.16

Python의 트레일링 콤마가 JSON Schema 포맷에 영향을 주는가

개요Python의 트레일링 콤마(trailing comma)와 JSON Schema 간의 상호작용은 개발자들이 자주 간과하는 중요한 기술적 세부사항이다. Python에서는 리스트, 딕셔너리, 함수 매개변수 등에서 마지막 요소 뒤에 콤마를 붙이는 것이 허용되며, 이는 코드 유지보수와 버전 제어에서 장점을 제공한다. 반면 JSON 표준(RFC 4627)은 트레일링 콤마를 엄격히 금지하며, JSON Schema 역시 순수 JSON 형식을 따르므로 트레일링 콤마를 허용하지 않는다. 이러한 차이점은 Python 애플리케이션에서 JSON Schema를 다룰 때 파싱 오류나 검증 실패를 초래할 수 있으며, 특히 동적 스키마 생성이나 설정 파일 처리 과정에서 예상치 못한 문제를 발생시킬 수 있다.설명트레일링 콤마는 데..

Programming/python 2025.07.09

Python Dictionary와 JSON의 차이점

개요Python Dictionary와 JSON은 키-값 쌍으로 데이터를 저장하는 구조라는 공통점을 가지지만, 본질적으로 다른 특성을 지닌다. Python Dictionary는 Python 프로그래밍 언어의 내장 데이터 타입으로 메모리 상에서 동작하는 가변 객체이며, JSON(JavaScript Object Notation)은 언어 독립적인 데이터 교환 형식으로 텍스트 기반의 표준이다. Python Dictionary는 Python 런타임 환경에서만 존재하며 다양한 Python 객체를 값으로 저장할 수 있는 반면, JSON은 네트워크를 통한 데이터 전송이나 파일 저장을 위한 직렬화된 형태로 제한된 데이터 타입만을 지원한다. 두 구조 간의 차이점을 정확히 이해하는 것은 웹 API 개발, 데이터 처리, 시스템..

Programming/python 2025.07.08

Cython 방식의 라이브러리를 만들어 Python 프로젝트에 적용하기

개요Cython은 Python의 성능 병목을 해결하기 위해 개발된 프로그래밍 언어이자 컴파일러이다. Python의 문법을 확장하여 C 언어의 성능을 제공하면서도 Python의 편의성을 유지한다. Cython을 사용하면 Python 코드를 C 확장 모듈로 변환하여 실행 속도를 크게 향상시킬 수 있으며, 기존 C/C++ 라이브러리와의 통합도 용이하다. 특히 수치 계산, 데이터 처리, 알고리즘 구현 등 계산 집약적인 작업에서 순수 Python 대비 10배에서 100배까지 성능 향상을 기대할 수 있다. Cython 라이브러리는 표준 Python 패키지처럼 import 하여 사용할 수 있어 기존 Python 프로젝트에 쉽게 통합할 수 있다.설명Cython은 Python 코드를 C 코드로 변환하는 트랜스파일러 역할..

Programming/python 2025.06.21

파이썬 함수 내부에 import를 하면 생기는 일

개요파이썬에서 import 문은 일반적으로 모듈의 최상위 레벨에서 수행되지만, 함수 내부에서도 import를 실행할 수 있다. 함수 내부에서 import를 수행하면 해당 모듈은 함수가 호출될 때마다 로드되는 것이 아니라, 이미 sys.modules에 캐시되어 있다면 캐시된 모듈을 참조하게 된다. 이러한 로컬 import는 특정 상황에서 유용할 수 있지만, 성능과 가독성 측면에서 고려해야 할 사항들이 있다. 함수 내부 import는 지연 로딩(lazy loading), 순환 import 문제 해결, 조건부 import 등의 목적으로 활용되며, Python의 동적 특성을 잘 보여주는 기능 중 하나이다.설명파이썬에서 함수 내부에 import 문을 작성하면, 해당 import는 함수가 실행될 때 수행된다. 그러..

Programming/python 2025.06.19

logger의 propagate

개요Logger의 propagate는 Python logging 모듈에서 제공하는 중요한 속성으로, 로그 메시지가 로거 계층 구조를 따라 상위 로거로 전파되는 방식을 제어한다. 이 속성은 Boolean 값을 가지며, 기본값은 True로 설정되어 있다. propagate 속성은 로깅 시스템의 유연성과 효율성을 높이는 핵심 메커니즘이며, 복잡한 애플리케이션에서 로그 출력을 세밀하게 제어할 수 있게 해 준다. 이 기능을 통해 개발자는 특정 로거의 메시지가 상위 로거로 전달되는 것을 차단하거나 허용할 수 있어, 로그 중복을 방지하고 성능을 최적화할 수 있다.설명propagate 속성은 Python logging 모듈의 Logger 클래스에 정의된 인스턴스 변수이다. 이 속성이 True로 설정되면, 해당 로거에서..

Programming/python 2025.06.18

psycopg2와 psycopg3의 차이점 분석

개요psycopg2는 Python에서 PostgreSQL 데이터베이스와 상호작용하기 위한 대표적인 드라이버로 오랜 기간 사용되어 왔다. 그러나 최신 Python 및 PostgreSQL 기능을 지원하고 성능을 향상시키기 위해 psycopg3가 새롭게 개발되었다. 본 글에서는 psycopg2와 psycopg3의 주요 차이점을 기능, 성능, 사용성 측면에서 비교 분석한다.설명psycopg3는 psycopg2의 완전한 재작성 버전으로, 현대적인 Python 및 PostgreSQL 기능을 보다 효과적으로 활용할 수 있도록 설계되었다. 주요 개선 사항으로는 비동기 지원, 서버 측 파라미터 바인딩, 이진 통신, 향상된 COPY 지원 등이 있다 .특징1. 비동기 지원psycopg3는 asyncio를 기반으로 한 비동기..

Programming/python 2025.06.02

Pydantic v2의 model_config 속성과 ConfigDict: 모델 설정의 새로운 패러다임

개요Pydantic v2에서는 모델 설정 방식이 크게 변화했다. v1에서 사용되던 Config 클래스는 deprecated되었고, 대신 ConfigDict를 사용하는 방식으로 변경되었다. model_config 클래스 속성을 통해 설정을 지정할 수 있으며, 이는 Pydantic 모델의 동작을 제어하는 핵심 메커니즘이다. 이러한 변화는 설정의 타입 안전성을 높이고, 더 직관적인 API를 제공하며, 향후 확장성을 고려한 설계 결정이었다.설명Pydantic v2의 model_config는 BaseModel.model_config 클래스 속성을 통해 정의되며, ConfigDict 객체를 값으로 가진다. ConfigDict는 모델의 다양한 동작을 제어하는 설정값들을 담고 있는 딕셔너리 형태의 설정 객체다. v1에..

Programming/python 2025.05.31

nest_asyncio를 적용하여 중첩된 이벤트 루프 허용

개요nest_asyncio는 Python의 asyncio 모듈에서 중첩된 이벤트 루프를 허용하도록 패치하는 라이브러리이다. 기본적으로 asyncio는 이벤트 루프의 중첩을 허용하지 않도록 설계되어 있어, 이미 이벤트 루프가 실행 중인 환경에서 작업을 실행하고 결과를 기다리려고 하면 "RuntimeError: This event loop is already running" 오류가 발생한다. 이러한 제약은 Jupyter 노트북, IDE, 또는 기타 대화형 환경에서 비동기 코드를 실행할 때 실질적인 문제를 야기한다. nest_asyncio는 이 문제를 해결하여 개발자가 더 유연하게 비동기 코드를 작성하고 테스트할 수 있도록 한다.설명asyncio의 기본 설계에서 이벤트 루프의 중첩을 금지하는 이유는 주로 안전..

Programming/python 2025.05.29
728x90
반응형