Python 302

[FastAPI] 웹 페이지 구성하기

개요FastAPI는 주로 API 개발을 위해 많이 사용하지만, 필요하다면 간단한 웹 페이지를 구성할 수도 있다.이번 글에서는 FastAPI, Jinja2 Template을 이용해 HTML 웹 페이지를 구성하는 방법을 알아본다. 설치 필요 라이브러리Jinja2 템플릿이 필요하기 때문에 pip를 사용해 jinja2를 설치해야 한다.pip install jinja2 구성 방법순서대로 구성을 진행해 보자. 1. HTML 만들기먼저 렌더링 할 HTML을 작성한다. 아래 예시는 간단하게 전달받은 name을 출력하는 예시이다. Hello, {{ name }}작성한 템플릿은 templates라는 경로에 저장했다.2. 코드 구현- Jinja2Templates 객체 생성아래와 같이 Jinja2Templates ..

Python 2025.05.21

[Python] HTTPX - Transports를 통한 요청 재시도

개요2025.04.13-[Python] requests Transport Adapters - 요청 재시도에서 Python requests 모듈을 사용할 때의 요청 재시도 방법을 소개했었다. 그리고 HTTPX도 비슷한 방식으로 재시도 기능을 제공하고 있다.이번 글에서는 HTTPX Transports 방법을 활용해 요청을 재시동하는 방법을 소개한다. TransportsHTTPX의 Client는 Requests의 Session과 유사하게 transport 인수를 허용한다. 즉, 연결 재시도 등과 같은 일부 고급 구성이 필요한 경우 전송 클래스를 객체화해 클라이언트 객체에 전달할 수 있다.다만 Retry 객체를 정의해 재시도 정책을 정의했던 것과 달리 httpx.HTTPTransport는 retries 매개변..

Python 2025.05.20

[Python] async for - 비동기 반복

개요Python 비동기 프로그래밍을 공부하다가 async with와 함께 async for이라는 구문을 발견했다. async with은 비동기 콘텍스트 관리자인데 async for는 어떤 역할인지 공부하지 않아 이번 기회에 공부해보려고 한다. 비동기 반복async for은 비동기 이터레이터를 탐색하는 데 사용한다. 여기서 비동기 이터레이터란 __aiter__, __anext__ 메서드를 구현한 객체에 해당한다.__aiter__ : self, 객체 자신을 반환해야 한다.__anext__ : 이터레이터의 다음 항목을 반환하는 코루틴 메서드여야 한다.즉, async for은 StopAsyncIteration이 발생할 때까지 비동기 이터레이터의 __anext__ 메서드가 반환하는 객체를 탐색한다.async ..

Python 2025.05.15

[Python] HTTPX - Client

개요2025.05.05-[Python] HTTPX - 비동기/동기 http 라이브러리에서 최상위 API(get, post 등)을 사용하는 기본적인 요청 방법을 확인해 보았다. 이번 글에서는 동일한 호스트로의 반복적인 요청이 있을 때 성능 향상을 가질 수 있는 Client라는 개념에 대해서 알아보고자 한다. ClientHTTPX는 기본적으로 호스트로 요청을 보낼 때 매번 새로운 연결을 설정한다. 하지만 이 방식은 매번 새 연결을 설정해야 하기 때문에 호스트에 대한 요청 수가 증가할수록 비효율적이다.이러한 비효율성을 개선하기 위해 Client는 HTTP 연결 풀링을 사용해, 동일한 호스트에 여러 요청을 하는 경우 TCP 연결을 재사용하도록 지원한다. 연결을 재사용함으로써 요청 간 지연 시간을 줄이고, C..

Python 2025.05.14

[Python] HTTPX - 비동기/동기 http 라이브러리

개요2025.04.13-[Python] requests Transport Adapters - 요청 재시도에서 Python requests 모듈로 http 요청 재시도를 수행하는 멋진 방법을 살펴보았는데, 이 과정을 비동기 방식으로 수행하고 싶다. 하지만 requests 모듈은 비동기 프로그래밍을 지원하지 않는 것 같다.관련해서 동기식, 비동기식 프로그래밍을 모두 지원하는 HTTPX라는 라이브러리가 있다는 것을 알게 되었다. 아주 기본적인 사용 방법을 적어둔다. HTTPXPython3용으로 설계된 HTTP 클라이언트로, 동기 및 비동기 API, 그리고 HTTP/1.1과 HTTP/2를 모두 지원한다.공식 문서에 따르면 requests 라이브러리의 표준 기능 모두 지원하며, WSGI 또는 ASGI에 직접 요..

Python 2025.05.13

[Pandas] itertuples - 컬럼 접근 방법(?)

개요Pandas에서 DataFrame.itertuples을 사용하면 DataFrame의 각 행을 namedtuples 형식으로 반환한다.이번 글에서는 이 namedtuples을 사용해 컬럼에 접근하는 예시를 하나 적어두려고 한다. + 다른 사람이 작성한 코드에서 봤는데, 낯선 방법이라 적어둔다. 방법itertuples 함수 결과로 변환된 row는 Pandas 객체이다. 이 부분은 namedtuples의 type을 확인해보면 알 수 있다.import pandas as pddata = {'col1':[1,2],'col2':[3,4]}idx = ['row1','row2']df = pd.DataFrame(data = data, index=idx)for row in df.itertuples(): print..

[Python] aiosqlite - sqlite 비동기 프로그래밍

개요2025.04.12-[Python] sqlite3 - SQLite 사용하기에서 Python으로 sqlite를 다루는 방법을 정리했었다. 추가로 sqlite를 비동기로 다룰 일이 생겨서 아래와 같이 코드를 짜봤는데,import sqlite3import asyncioasync def main(): sql = 'SELECT * FROM stocks WHERE symbol=:symbol' condition = {'symbol': 'RHAT'} async with sqlite3.connect('example.db') as con: cur = await con.cursor() await cur.execute(sql, condition) data = await..

Python 2025.04.29

[Python] sqlite3 - SQLite 사용하기

개요이전에 2023.01.08-[SQLite] 설치 및 사용에서 간단한 파일 데이터베이스인 SQLite를 설치하고 실행해 보았다. 당시에는 CLI를 활용하여 SQLite를 다뤘는데, 이번에는 Python으로 SQLite를 다뤄보려고 한다.방법을 알아보자. sqlite3SQLite 데이터베이스용 라이브러리인 sqlite3는 Python 기본 내장 라이브러리로 별도로 설치하지 않고 바로 import 하여 사용할 수 있다.import sqlite3 데이터베이스 연결connect 함수를 사용하여 데이터베이스 연결을 생성한다. 기본적으로 connect 함수로 전달한 값이 파일 DB의 경로가 된다.import sqlite3con = sqlite3.connect('example.db')아무 테이블도 생성하지 않..

Python 2025.04.25

[Python] Pandas - Display 옵션 조정

개요Jupyter 노트북 환경에서 작업을 하다 보면 DataFrame을 확인할 때 컬럼이나 행이 생략되어 전체 정보를 확인할 수 없는 경우가 있다. 이런 경우 생략하는 정도를 조정하면 보다 효율적으로 데이터를 조회할 수 있다. 현재 옵션 확인옵션을 조정하기 전에 먼저 어떤 옵션이 있는지 확인할 필요가 있을 것 같다.옵션에 대한 설명은 pandas.describe_option을 통해 확인할 수 있다.import pandas as pdpd.describe_option()코드 상으로도 확인할 수 있지만 공식 문서를 활용하는 게 더 수월할 수 있다.https://pandas.pydata.org/pandas-docs/stable/user_guide/options.html#available-options 인쇄..

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

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

Python 2025.04.17