python 251

[Python] Redis - with문을 사용한 연결

개요2023.06.03-[Python] redis 사용하기, 2024.08.14-[Python] Redis - 비동기 연결에서 redis-py 공식 문서를 참조해 Python으로 Redis에 연결하고 작업을 수행해 보았다. 그 후, 컨텍스트 매니저라는 개념을 새로 알게 되었는데…… Redis 연결도 컨텍스트 매니저로 관리하는 게 좋아 보였다. 공식 문서에서는 with 문 사용 없이 일반적인 방법만 기재되어 있는데, 이번 글에서 with문을 사용한 연결이 가능한지 확인해보려고 한다.   with문 사용 가능 여부결론만 말하자면 동기 방식, 비동기 방식 모두 with 문 사용이 가능하다.2025.01.15-[Python] context manager - 리소스 관리에서 with 문을 사용하기 위해서는 __e..

Python 2025.02.13

[Python] async with - 비동기 컨텍스트 관리자

개요Python의 컨텍스트 관리자란 with문을 사용해 리소스를 관리하는 구조로, 리소스의 할당이나 삭제를 자동으로 처리할 수 있는 코드 블록을 생성해 예외가 발생하더라고 리소스의 획득과 해제를 보장한다.다만, 비동기 프로그래밍 방식에서는 비동기 방식으로 리소스를 획득하고 해제해야 하므로 with 문만으로는 충분하지 않다. 때문에 비동기 컨텍스트 관리자라는 개념이 발생했다. 이번 글에선 비동기 컨텍스트 관리자를 구현하고  사용하는 방법을 알아본다.  비동기 컨텍스트 관리자비동기 컨텍스트 관리자는 enter와 exit 메서드에서 실행을 일시 중지할 수 있는 컨텍스트 관리자다.async with EXPRESSION as TARGET: SUITE위의 async with문은 다음과 같이 이해할 수 있다.m..

Python 2025.02.05

[Python] contextlib - Context Manager 관리

개요 2025.01.15-[Python] context manager - 리소스 관리에서 Context Manager라는 개념을 알아보고, Python 매직 메서드를 구현하는 방식으로 구현도 해봤다.이번 글에서는 Context Manager를 구현하는 여러 가지 방법 중 contextlib를 활용하는 방법을 알아보려고 한다.  contextlibcontextlib은 Context Manager에 대한 일반적인 작업을 위한 유틸리티를 제공한다. 여러 작업을 할 수 있지만, contextmanger라는 데코레이터를 사용하면 매직 메서드를 구현하는 것보다 좀 더 간편하게 context manager를 구현할 수 있다.contextmanger 데코레이터를 활용한 기본적인 구조는 아래와 같다.from contex..

Python 2025.02.03

[Python] context manager - 리소스 관리

개요Python에서 파일을 다룰 때는 파일을 열고 닫는 작업이 필요하다.file = open('somefile', 'w')try: file.write('Hola')finally: file.close()일반적인 프로그래밍에서 연 파일은 반드시 닫는 작업을 해야 하는데, 명시적으로 close 함수를 호출하는 불편함을 해소하기 위해 with 문을 사용할 수 있다.with open("asd.txt", "r") as file: lines = file.readlines() ...이 때 with문을 context manager라고 한다. 그럼 대체 context manger라는 게 뭘까? 알아보자.  Context managerContext Manger는 Python의 독특한 기능 중 하나로, ..

Python 2025.01.31

[Python] Async - signal 처리하기

개요2025.01.09-[Python] signal - 프로그램 종료 처리에서 Python 프로그램의 프로그램 종료 등의 처리를 위한 signal 모듈 사용방법에 대해 알아보았다. 그런데 이제는 비동기로 프로그래밍된 Python 프로그램의 종료 시에 처리해야 할 작업이 생겼다. 이번 글에서는 Python async를 사용할 때에 signal 수신 및 처리 방법을 알아보자.   loop.add_signal_handlerPython은 asyncio라는 고수준 라이브러리로 비동기 프로그래밍을 쉽게 할 수 있지만, signal 처리와 같은 세부 제어를 하기 위해서는 이벤트 루프를 직접 다루어야 한다.이벤트 루프는 시그널 처리를 위한 add_signal_handler라는 함수를 제공한다.loop.add_signa..

Python 2025.01.21

[Python] signal - 프로그램 종료 처리

개요2025.01.08-[Python] KeyboardInterrupt - 프로그램 종료 처리에서 키보드 입력에 의한 프로그램 종료를 처리하는 방법을 알아보았는데, 프로그램은 동작 중 예기치 않게 종료되거나 SIGTERM 등의 시그널에 의해 종료될 수도 있다. 이번 글에서는 Python 프로그램에서 시그널을 처리하는 방법을 적어둔다.   signal.signalPython의 signal 모듈의 signal 함수는 시그널을 수신받을 때 실행할 사용자 정의 처리기를 정의하고 등록할 수 있게 한다. signal.signal(signalnum, handler)매개변수로 수신받을 시그널 값과 처리한 작업이 정의된 함수 hander를 전달한다. hander는 signum(시그널 번호)과 frame(현재 스택 프레임..

Python 2025.01.20

[Python] KeyboardInterrupt - 프로그램 종료 처리

개요프로그램을 개발하다 보면 프로그램 종료 시 처리되어야 하는 몇 가지 작업이 있을 수 있다. 이번 글에서는 Python 애플리케이션을 종료시킬 때 필요한 작업을 처리할 수 있도록 하기 위한 방법 중 KeyboardInterrupt를 활용한 방법을 정리해 둔다.  KeyboardInterruptKeyboardInterrupt는 사용자가 키보드 동작(ctrl + c, SIGINT)을 사용하여 프로그램 실행을 종료할 때 발생시키는 내장 예외이다. 동작하는데 많은 시간을 필요로 하는 프로그램을 제어할 때 필요할 수 있다. KeyboardInterrupt는 예외이기 때문에 try ~ except 구문으로 처리할 수 있다.try: 작업except KeyboardInterrupt: 종료 작업다만 Keyboa..

Python 2025.01.17

[FastAPI] APIRouter - 모듈 분리

개요FastAPI 공식 문서를 보면 하나의 파일에 경로를 구성하게끔 되어있는데, 사실 애플리케이션을 개발할 때 하나의 파일에 모든 내용을 넣을 수 있는 경우는 거의 없다. FastAPI는 모듈 분리를 할 수 있도록 APIRouter라는 기능을 제공하는데, 이번 글에서는 관련 내용을 정리해 둔다.  APIRouter 정의APIRouter는 경로를 그룹화하는 데 사용하며, 애플리케이션을 구조화할 수 있게 하는 역할을 한다. 일종의 작은 FastAPI 객체라고 생각해도 된다.사용할 때는 APIRouter 클래스를 임포트 한 뒤, APIRouter 객체를 생성하고, FastAPI 객체에 대한 경로를 데코레이터로 추가했던 것과 동일한 방식으로 APIRouter 객체에 대한 경로를 데코레이터로 추가한다. 아래는 예..

Python 2024.12.16

[PyMySQL] Decimal 데이터를 python float으로 변환

개요Python에서 PyMySQL을 사용해 데이터를 조회하다 보면 다음과 같이 Decimal이라는 객체로 값을 반환받는 경우가 있다.이런 데이터를 Python float이나 double로 취급하고 싶다. 방법을 적어둔다.   Decimal데이터베이스에서 Decimal은 고정 소수점 타입으로, 실수의 값을 정확하게 표현하기 위해 사용한다. 고정 소수점 방식은 소수부의 자릿수를 고정하여 표현한다. DECIMAL(M,D)M은 소수부와 정수부를 포함한 전체 자리수를자릿수를 의미하고, D가 소수부의 자릿수를 나타낸다.  converters.conversionsPyMySQL은 conversion dictionary라는 개념으로 데이터베이스의 데이터 타입을 Python의 데이터 타입으로 변환하는 규칙을 사용하고 있다..

Python 2024.12.12

[Python] filter - iterable 조건 필터링

개요현재 Python 개발을 진행 중인데, 딕셔너리의 키가 특정 조건을 만족하는 것만 필터링하려고 한다. 적당한 방법을 찾아보다 python 내장 함수인 filter 함수에 대해 알게 되어 기록해 둔다.  filter특정 조건을 만족하는 요소들로 이루어진 iterator를 반환한다.filter(function, iterable) 바로 사용 예시를 보는 편이 이해하기 좋을 것 같다. 다음과 같은 숫자로 이루어진 리스트가 있다고 하자.numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]이 리스트에서 짝수에 해당하는 값만 추출하고 싶다. 그러면 아래와 같이 짝수인 경우가 참이 되는 함수를 정의하여 전달하면 된다.def is_even(num): return num % 2 == 0filtere..

Python 2024.12.11