전체 글 1330

[Python] requests Transport Adapters - 요청 재시도

개요이전에 Python으로 HTTP 요청을 구현하면서 2024.07.18-[Python] Requests hooks - 응답에 대한 콜백 구현하기에서 살펴봤던 hooks를 활용해 재시도 로직을 구현했었다. 그런데 최근에 requests 모듈에서 제공하는 Transport Adapters를 활용해서 재시도 로직을 구현할 수 있다는 것을 알게 되었다.방법을 정리해 보자. Transport Adapters전송 어댑터(Transport Adapters)는 HTTP 서비스의 상호 작용 방식을 제어하는 메커니즘을 제공하며, 서비스별 구성을 적용할 수 있다.Requests는 단일 전송 어댑터인 HTTPAdapter와 함께 제공된다. HTTPAdapter는 urllib3을 사용해 HTTP와 HTTPS 간의 기본적인 ..

카테고리 없음 2025.04.18

[Python] aiofiles - 비동기 파일 작업

개요Python으로 비동기 프로그래밍을 진행 중인데, 프로그램 결과 파일을 생성해야 한다. 그런데 Python에서 파일을 다룰 때 사용하는 open 함수는 비동기를 지원하지 않는다고 한다. 이 문제를 해결하기 위해 Python 비동기 프로그래밍으로 파일 작업을 할 수 있도록 지원해 주는 ailfiles라는 라이브러리 사용 방법을 알아본다.   aiofilesaiofiles은 비동기 애플리케이션에서 로컬 디스크의 파일을 처리하기 위해 Python으로 작성한 Apache 2 라이센스의 라이브러리다.일반적으로 로컬 파일 IO는 블로킹이기 때문에 쉽게 비동기 방식으로 수행할 수 없다. 다시 말해 파일 IO 수행은 비동기 애플리케이션에 영향을 줄 수 있기 때문에, 실행 중인 스레드를 차단해서는 안 된다. 하지만 ..

Python 2025.04.17

[MySQL] LIMIT ~ OFFSET - 조회 범위 지정

개요데이터베이스를 조회한 데이터를 응답하는 RestAPI의 응답시간이 늦다는 피드백이 왔다. 관련해서 요청 데이터 양을 변경하여 API 테스트가 필요한데, 요청할 때마다 데이터를 다르게 주고 싶다.관련해서 LIMIT과 OFFSET을 활용하고자 사용 방법 등을 정리한다.  LIMITLIMIT은 조회하는 행의 수를 제한할 때 사용한다. SELECT column_name(s)FROM table_nameLIMIT number;예시 데이터는 1부터 10까지의 값을 가진 테이블인데 이 테이블을 5행까지만 조회하는 것으로 제한한 것이다.  LIMIT ~ OFFSETLIMIT은 OFFSET 옵션으로 조회 시 건너뛸 행의 수를 지정할 수 있다.SELECT column1, column2, ...FROM table_name..

Database 2025.04.16

[Python] websockets - 웹소켓 연결 확인

개요2025.04.06-[Python] websockets - 연결 종료 시 자동 재연결에서 연결이 자동으로 종료되는 경우, 자동으로 재연결을 시도하도록 코드를 개선했었다.확인해보니 어떤 웹소켓 서버의 경우에는 기본적으로 아무 데이터도 수/발신하지 않는 상태로 120초 정도가 경과하면 웹소켓 연결을 종료한다고 한다. 때문에 websockets 라이브러리는 클라이언트에서 서버와의 연결을 확인함과 동시에 keepalive 역할을 할 수 있는 ping 함수를 제공하고 있다. 사용 방법을 가볍게 알아본다.  websockets.pingwebsockets.ping 함수는 0x9 연산코드를 포함하는 Ping 프레임을 보낸다. pong_waiter = await websocket.ping()# only if you ..

Python 2025.04.15

[Python] 여러 웹소켓 연결하기

개요Python으로 WebSocket 통신이 필요한 프로그램을 개발하고 있는데, 여러 웹소켓 통신 연결 및 유지가 필요한 상황이다. 평소 Python으로 개발을 할 때 특정 서버, 그것도 여러 서버와 지속적인 통신 연결을 유지할 상황이 많지 않았다. 이번 기회에 적당한 방법을 정리해 둔다.   웹소켓 통신 함수먼저 웹소켓 통신을 유지할 함수를 작성한다. 함수는 2025.04.06-[Python] websockets - 연결 종료 시 자동 재연결에서 작성한 코드이다. 다만 재사용성을 확보할 수 있도록 통신할 URL과 전송할 데이터를 매개변수로 전달받을 수 있도록 수정했다.import asynciofrom websockets.asyncio.client import connectimport jsonasync ..

Python 2025.04.14

[Python] websockets - 연결 종료 시 자동 재연결

개요Python websockets 라이브러리르 사용해서 가상 자산 거래소에 orderbook 정보를 구독하고 있는데, 일정 시간이나 횟수가 지나면 자동으로 연결이 종료되는 문제가 발생했다.관련해서 자동으로 연결을 재시도할 수 있도록 코드를 변경해보려고 한다.   기존 코드import asynciofrom websockets.asyncio.client import connectimport jsonasync def connect_test(): url = "wss://ws-api.korbit.co.kr/v2/public" send_data = [ { "method": "subscribe", "type": "orderbook", ..

Python 2025.04.11

[Python] websockets - 웹소켓 서버 및 클라이언트 개발

개요최근 WebSocket 통신을 다룰 일이 생겼다. 관련하여 Websocket 서버와 클라이언트를 구축하기 위한 Python 라이브러리인 websockets 사용 예시를 간단하게 적어두려고 한다.websockets 라이브러리는 기본적으로 Python 내장 비동기 I/O 라이브러리인 asyncio를 기반으로 한다. threading 구현을 제공하고 있어 asyncio에 익숙하지 않은 경우의 대안을 제공하기도 한다.  WebSocket이란먼저 WebSocket 개념에 대해 빠르게 정리한다.WebSocket은 클라이언트와 서버 간의 양방향 데이터 전송을 가능하게 하는 실시간 통신 프로토콜이다. 비상태 프로토콜인 HTTP와 달리 클라이언트와 서버 간의 지속적인 연결을 유지하여 즉각적인 데이터 전송을 허용한다...

Python 2025.04.10

[Codility] PassingCars

문제문제 : https://app.codility.com/programmers/lessons/5-prefix_sums/passing_cars/N개의 정수로 구성된 비어 있지 않은 배열 A가 있다. 배열 A의 연속된 요소는 도로 위의 연속된 자동차를 나타내며, 배열 A에는 0 또는 1로만 구성되어 있다. 이때, 0은 동쪽으로 이동하는 차량을 나타내고 1은 서쪽으로 이동하는 차량을 나타낸다.목표는 지나가는 차를 세는 것으로, P가 동쪽으로 이동하고 Q가 서쪽으로 이동할 때 0 ≤ P 한 쌍의 차 (P, Q)가 지나간다고 한다.예로 들어 아래와 같은 배열 A가 있다고 하자. A[0] = 0 A[1] = 1 A[2] = 0 A[3] = 1 A[4] = 1지나가는 차의 쌍은 (0, 1), (0, 3), ..

[Airflow] CLI - import error 확인하기

현상Airflow에서 Dag를 개발하다 보면 어떠한 이유로 오류가 나서 Dag가 생성되지 않는 경우가 발생할 수 있다. 이번 글에서는 import error에 대한 정보를 CLI로 확인하는 방법을 적어둔다.  CLI 외 다른 방법이전에 작성했던 글이 있어 CLI를 활용하지 않고 확인하는 방법을 먼저 작성한다.참고 : 2024.11.30-[Airflow] Dag Import Error 확인하기간단하게 Airflow Web UI를 통해 확인하거나, Airflow Meta DB의 import_error 테이블을 조회하는 방식으로 확인할 수 있다.   CLI 사용CLI를 통해 사용할 때는 dags list-import-errors를 통해 확인할 수 있다.airflow dags list-import-errors참..

Apache Airflow 2025.04.08

[MySQL] GET DIAGNOSTICS

개요2025.03.24-[MySQL] Stored Procedure - HANDLER에서 SQL을 사용하며 발생하는 에러를 처리하기 위한 핸들러를 알아보았었다. 이번 글에서는 비슷하게 에러를 다루는 데 사용할 수 있는 GET DIAGNOSTICS라는 구문을 알아보려고 한다.  DIAGNOSTICSSQL문을 실행 시 진단 영역에 진단 정보를 생성하는데, 진단 정보는 SQL 실행 중 발생한 오류에 대한 정보를 포함한다. 진단 정보를 통해서 오류 코드, 경고, 영향을 받은 행 수 및 조건, 명령문에 대한 기타 진단 데이터와 같은 세부 정보에 접근할 수 있다.진단 영역은 크게 발생한 조건 수나 영향을 받은 행 수와 같은 명령문 정보와 오류 코드 및 메시지 등의 조건 정보로 구성되어 있다. 명령문이 여러 조건(c..

Database 2025.04.07