전체 글 1199

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

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

Python 2025.02.05

[Jenkins] 암호화된 Credentials 복호화

개요Credentials이 포함된 Jenkins 파이프라인을 구성해서 사용 중인데, Jenkins 서버를 다른 서버로 이관하고자 한다. Jenkins 디렉터리를 그대로 복사해서 사용하면 좋겠지만, 그렇게 처리하기가 애매하고 작업할 수도 많지 않아 직접 옮기는 작업을 진행하고 있다. 하지만, 복사가 필요한 Credentials 값이 전부 Serect으로 처리되어 있어 실제 값을 알 수 없는 상태다.Jenkins에서 Credentials의 Secret을 복호화하는 방법을 몇 가지 알아보려고 한다.  hudson.util.Secret.decryptJenkins 스크립트 콘솔에서 hudson.util.Secret.decrypt 함수를 사용하면 암호화된 값을 복호화할 수 있다. 단, 암호화된 값을 알아내야 하는데..

Jenkins 2025.02.04

[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

[FastAPI] Lifespan - 이벤트 처리

개요2025.01.13-[FastAPI] startup, shutdown 이벤트 처리에서 FastAPI가 제공하는 on_event 데코레이터를 사용해 애플리케이션 시작 및 종료 시 처리해야 하는 작업을 정의하고 적용했다. 그런데 공식 문서에 의하면 on_event 데코레이터는 deprecated 되고, Lifespan이라는 개념으로 대체되었다고 한다.이번 글에서 Lifespan을 사용하는 방법에 대해 정리해 둔다.  LifespanLifespan은 전체 애플리케이션의 수명주기를 다루며, 애플리케이션이 시작되기 전에 실행되어야 하고, 애플리케이션이 종료될 때 실행되어야 하는 작업을 정의할 수 있게 한다. 주로 전체 애플리케이션에 사용해야 하는 자원, 요청 간 공유 자원, 정리해야 하는 자원을 설정하는 데 ..

Python 2025.01.24

[FastAPI] startup, shutdown 이벤트 처리

개요여타 다른 애플리케이션처럼 FastAPI 애플리케이션 또한 처음 실행을 시작할 때 필요한 설정값을 읽는다던가, 실행을 종료할 때 데이터를 정리하는 등의 작업이 필요할 수 있다. FastAPI는 이러한 종류를 작업을 지원하기 위해 @FastAPI.on_event라는 데코레이터를 제공한다. 이번 글에서 사용 방법을 간단히 알아본다.  @FastAPI.on_eventFastAPI.on_event 데코레이터는 애플리케이션이 시작하기 전이나 종료될 때 실행되어야 하는 이벤트 핸들러를 정의한다. startup, shutdown 이벤트에 대한 핸들러만 정의할 수 있으며, 이벤트 핸들러는 두 개 이상 정의할 수 있다. 참고로 startup 이벤트 핸들러의 경우 모든 이벤트 핸들러가 완료될 때까지 애플리케이션은 요청..

Python 2025.01.23

[백준] 3004 - 체스판 조각

문제문제 : https://www.acmicpc.net/problem/3004상근이는 체스판을 톱으로 자르려고 한다. 체스판은 최대 N번 자를 수 있고, 변에 평행하게만 자를 수 있다. 또 자를 때는 체스판의 변의 한쪽 끝에서 다른 쪽 끝까지 잘라야 하며, 자른 후에는 조각을 이동시킬 수 없다.이때 최대 몇 조각을 낼 수 있는지 구하여라.   풀이체스판 조각이 최대가 되기 위해서는 가로와 세로를 번갈아가면서 잘라야 한다.체스판 조각의 수는 가로 조각의 수와 세로 조각의 수를 곱한 값에 해당하며, 자를 때마다 조각은 1개씩 증가한다. 또한 가로 조각과 세로 조각이 모두 증가하기 위해서는 2번 잘라야 한다.때문에 가로 조각은 N을 2로 나눈 몫에 1을 더한 값, 그리고 세로 조각은 N을 2로 나눈 몫에 나머..

카테고리 없음 2025.01.22

[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