전체 글 1332

[FastAPI] Form 데이터 받기

개요FastAPI를 사용해 Web 애플리케이션을 구현하던 중, 사용자가 Form으로 제출한 데이터를 받아서 처리할 필요가 생겼다. 여태까지 FastAPI를 사용할 때는 JSON 형식의 요청 본문이나 쿼리 매개변수를 처리해 왔었는데, 이번 글에서는 폼 데이터를 처리하는 방법을 정리해 둔다. 설치 필요 라이브러리먼저 FastAPI에서 Form 데이터를 처리하기 위해서는 아래 라이브러리 설치가 필요하다.$ pip install python-multipart 모듈 임포트Form 데이터를 입력받기 위해서는 아래와 같이 Form 모듈 임포트가 필요하다.from fastapi import Form 데이터 전달받기Form 데이터는 요청 본문을 받는 것과 동일하게 함수의 매개변수로 전달받으면 된다. 다만 데이터 ..

Python 2025.05.23

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

개요이 블로그에서 HTTPX 라이브러리 사용법에 대해 몇 가지 글을 작성했는데, 전부 동기 방식으로 프로그래밍한 내용으로 작성했다.하지만! HTTPX는 비동기 프로그래밍도 지원하고 있다. 이번 글에서는 HTTPX를 사용해 비동기 방식으로 HTTP 요청을 보내는 방법을 작성해보려고 한다. 요청비동기 방식으로 요청을 보낼 때에는 비동기 클라이언트(AsyncClient)를 사용해야 한다. 참고로 최상위 API(httpx.get, httpx.post 등)의 경우에는 비동기 방식을 지원하지 않는 것 같다.비동기 방식이기 때문에 요청 시 await을 사용해야 한다는 것을 제외하면 동기 방식으로 프로그래밍하는 것과 큰 차이가 없다.import httpximport asyncioasync def request():..

Python 2025.05.22

[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

[Git] diff - 브랜치 비교

개요2025.05.07-[Linux] diff -rq - 디렉터리 비교에서 두 디렉터리의 내용을 비교 확인하는 방법을 알아 보았는데, 사실 이 디렉터리가 Git 레포지터리였다. 그리고 Git은 두 브랜치를 비교하는 명령어를 제공하고 있다는 것을 뒤늦게 알게되어 추가로 작성한다. diffgit diff는 커밋 간, 커밋과 작업 트리 간 변경점을 보여주는 명령어다. 아무 옵션 없이 사용하면 워킹 트리 내에서 발생한 변경점을 보여주고, 파일을 지정하면 워킹 트리 내에서 지정한 파일에 발생한 변경점을 보여준다. 그리고 비교할 브랜치를 지정하면 두 브랜치 간의 차이점을 보여준다.git diff BRANCH_1 BRANCH_2## 예시git diff origin/master origin/my_branch실행해보면..

Git | GitLab 2025.05.19

[Linux] diff -rq - 디렉터리 비교

개요GitLab 브랜치 관리를 하고 있는데, 실수가 있어 두 브랜치 간 동일해야 하는 내용도 다른 내용을 가지고 있는 것을 확인했다. 이 때 어느 파일, 어느 디렉터리에서 차이가 있는지 확인해보려고 한다.방법을 알아보자. diffdiff 명령어는 기본적으로 두 파일 간의 차이를 확인할 때 사용한다. 만약 하위 디렉터리 비교가 필요하다면 -r, --recursive 명령을 사용해 확인할 수 있다.diff -r /path_1 /path_2diff --recursive /path_1 /path_2차이가 있는 파일의 이름과 그 내용을 확인할 수 있다. 만약 상세 내용이 아니라 차이가 있는 파일의 목록을 확인하고 싶다면 -q 옵션을 주면 된다.diff -rq /path_1 /path_2diff --recursi..

Linux 2025.05.16

[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

[Shell] JOIN 함수 구현 - 배열 요소를 구분 기호로 결합

개요최근 쉘 스크립트를 만들고 있는데, 배열의 요소를 구분 기호로 결합한 문자열을 만드는 join 함수가 필요해졌다.이 글에서는 구글링 해서 찾은 join 함수를 기록해 둔다. 스크립트join_ws() { local d=$1 s=$2; shift 2 && printf %s "$s${@/#/$d}"; } 사용법arr=("apple" "banana" "cherry")echo -e $(join_ws ',' "${arr[@]}")echo -e $(join_ws ' || ' "${arr[@]}")echo -e $(join_ws '\n' "${arr[@]}")실행시켜 보면 스크립트 대로 쉼표, 문자열, 줄 바꿈을 기준으로 잘 연결된 문자열을 확인할 수 있다. 동작 방식동작 방식을 분석하면 다음과 같다. 1...

Linux/Shell Script 2025.05.12