Python 317

[Python] requests links - link 헤더 사용하기

개요많은 서버들이 자신의 데이터를 효율적으로 제공하기 위해 페이지네이션을 사용한다. 일반적으로는 쿼리 매개변수를 사용해서 제공하는데, 일부 서비스의 경우에는 HTTP 응답 내 헤더에 다음 페이지를 가리키는 링크를 제공한다. 대표적인 서비스로는 Github가 있다.이번 글에서는 Python으로 HTTP 응답을 처리할 때 헤더 내 Link 헤더를 효과적으로 파싱 하는 방법을 적어둔다. 응답 예시예로 들어 requests 라이브러리 공식 문서에서 기재하고 있는 URL에 요청을 날려보겠다.import requestsurl = "https://api.github.com/users/kennethreitz/repos?page=1&per_page=10"response = requests.get(url)print(re..

Python 2026.01.05

[Python] HTTP 헤더에서 ratelimit 파싱 후 대기 및 재시도 구현

개요최근 서버에 HTTP로 요청을 보내는 작업을 많이 하는데, 사용자가 많은 대규모 서비스의 경우에는 특정 사용자가 자원을 점유하지 않도록 ratelimit을 설정해 둔다. 클라이언트가 서버에 요청을 하다 ratelimit에 걸려도 동작이 중단되지 않고 계속 이어나갈 수 있도록 구현하는 방법을 기록해두려고 한다.참고로 Python을 사용하며 요청 서버는 huggingface이며, 재시도는 Tenacity를 사용하여 구현할 예정이다. ratelimit 파싱huggingface의 경우 클라이언트의 요청이 제한에 도달하면 HTTP 429 Too Many Request 오류를 발생시킨다. 이 때, 서버는 할당량, 속도 제한 정책과 함께 클라이언트의 현재 사용량과 제한을 전달하여 속도 제한을 피할 수 있도록 H..

Python 2025.12.19

[Python] Tenacity - 재시도 로직 구현

개요Python으로 API 호출이 발생하는 라이브러리를 사용하려고 하는데, 다량의 요청이 발생하다 보니 Rate Limit에 의해 요청 실패가 발생하는 경우가 있다. 이때 동작을 종료하거나 다음 동작으로 넘어가는 대신, 실패했던 요청을 재시도하려고 한다.재시도 로직은 직접 구현해도 좋지만, 확인해보니 Tenacity라는 Python 범용 재시도 라이브러리가 존재해 이 라이브러리를 사용해보려고 한다. TenacityTenacity는 Apache 2.0 라이선스가 적용된 파이썬 기반의 범용 재시도 라이브러리로, 거의 모든 기능에 재시도 동작을 쉽게 추가하도록 설계되었다. retrying 라이브러리를 포크해서 만들어졌으며, 두 라이브러리 간 호환성은 없지만 신규 기능을 추가하고 버그를 수정하는 등의 개선이..

Python 2025.12.18

[Python] __call__ 이란

개요최근 Python으로 작성된 코드 분석을 위해 공부를 하다가 __call__이라는 매직 메서드를 보게 되었다. 잘 모르는 부분이라 개념을 정리한다. __call____call__은 Python 클래스의 특수 메서드로, 클래스의 객체를 함수처럼 호출 가능하게 만들어준다.__call__ 메서드를 정의하면 객체 obj(arg1, arg2)를 호출할 때 obj.__call__(arg1, arg2)가 자동으로 트리거 된다. 이를 통해 객체를 함수처럼 동작하게 만들어 유연하고 재사용 가능한 코드를 작성할 수 있다. 문법class Example: def __init__(self): # code # Defining __call__ method def __call__(self): ..

Python 2025.12.10

[Python] MetaClass

개요디자인 패턴 관련 공부를 하다가 새로 알게된 메타클래스에 대해서 정리한다. MetaClassPython에서는 클래스도 객체에 해당한다. 때문에 클래스를 만드는 클래스가 존재하는데, 이를 메타클래스라고 한다. 클래스로 객체를 생성하듯, 메타클래스로 클래스를 생성한다. 메타클래스는 드물게 사용되지만, 파이썬을 사용하는 대부분의 개발자는 이미 메타클래스를 알고 있다. 바로 변수의 데이터 형을 알려주는 type()이 메타클래스이기 때문이다.type은 데이터 형을 알려줄 뿐만 아니라 클래스를 만드는 기능도 제공하는데 예시와 함꼐 알아본다. type - 클래스 생성type으로 클래스를 생성할 때는 type 메서드에 클래스 이름, 부모 클래스 튜플, 속성 및 메서드 딕셔너리를 지정한다.아래 코드는 이름이 K..

Python 2025.12.08

[Python] Singleton Pattern 구현 - 1

개요2025.11.27-[디자인 패턴] Singleton pattern 개념과 구현 기법에서 Java 코드를 예시로 Singleton Pattern 구현 기법을 와르르 살펴보았다. 이번 글에서는 Python으로 구현하는 방법에 대해서 적어두려고 한다. 구현 방식아래 내용은 스레드 환경에서 안전하지 않은 간단한 구현 방식이다. 유일한 객체를 생성하도록 하는 Singleton Pattern을 구현하기 위해서는 객체를 생성하는 과정에 참여해야 한다. 또한 객체를 생성한 후 초기화 과정도 두 번 수행하지 않도록 처리해야 한다. - 객체 생성아래 코드는 객체를 _instance 속성에서 관리한다. 객체에 _intance 속성이 없을 때만 객체를 생성해 _instance에 저장하는 방식이다.class Klass..

Python 2025.12.05

[Python] 객체 생성과 초기화

개요Python에서 클래스를 정의하고 사용할 때 __init__이라는 메서드를 많이 사용하는데, 최근 객체를 생성하는 메서드인 __new__가 존재한다는 것을 알게되었다. 비슷한 기능을 수행하는 두 메서드의 역할을 좀더 명확하게 정리해두려고 한다. __new____new__ 메서드는 객체를 생성하는 역할을 한다.객체를 생성할 때는 일반적으로 __init__ 메서드를 사용하는데, 실제로는 object 클래스의 __new__가 자동으로 호출되어 객체를 생성한다. 만약 객체가 생성되는 과정을 제어하고 싶을 때 __new__ 메서드를 오버라이드하면 된다. 문법직접 정의할 때는 클래스 자기 자신 나타내는 cls 변수와 위치 매개변수, 키워드 매개변수를 전달하면 된다. 그리고 반드시 생성되어있는 객체를 반환해야..

Python 2025.12.04

[Python] json.dump - TypeError: Object of type datetime is not JSON serializable

개요데이터를 다루다 보면 딕셔너리 형식의 데이터를 JSON 형식으로 변환해야 하는 경우가 종종 있다. 이때 데이터에 큰 문제가 없어서 JSON 형식으로 잘 변환이 되면 좋지만, 아래처럼 오류가 나는 상황이 발생할 수도 있다.import jsonfrom datetime import datetimedata = { 'create_dt': datetime.now(), 'name': 'june', 'age': 22,}print(json.dumps(data))내 경우에는 주로 날짜 형식 데이터를 변환하다가 발생하곤 하는데, 아주 간편하게 문제를 해결하는 방법을 적어둔다. 원인 TypeError: Object of type datetime is not JSON serializableJSON은 문자..

Python 2025.11.21

[Python] traceback - 예외 메세지 추적하기

개요프로그래밍을 하다 보면 프로그램 종료를 방지하기 위해 try ~ except 구문으로 특정 예외가 아니라 예외 전체를 처리하게 되는 경우 가 있다. 모든 예외를 처리하면 어찌어찌 프로그램은 동작하지만 예상하지 못한 예외로 인해 버그가 발생할 때 예외 메시지가 없어 디버깅이 어려운 상황이 있었다.때문에 이번 글에서는 예외 메세지를 다룰 수 있는 traceback이라는 모듈이 조금 살펴보려고 한다. tracebacktraceback은 Python 프로그램의 Stack Trace를 추출하고 포맷팅, 출력하는 표준 인터페이스를 제공한다. Python 인터프리터가 Stack Trace를 출력할 때의 동작을 재현하며, 프로그램 제어 하에서 Stack Trace을 출력하려는 경우에 유용하다. print_tbt..

Python 2025.11.17

[Python] textwrap.dedent - 문자열에서 같은 공백 제거

개요개발을 하다보면 어느 부분에서 로그를 출력할지 고민하게 되는데, 간혹 실제로 실행되는 SQL 실행문을 로깅하고 싶을 때가 있다. 다만 아무래도 SQL은 개행이 포함되어 있어야 가독성이 좋다보니 로깅을 하면 들여쓰기가 영 안 맞게 되는 문제가 있다. 때문에 이번 글에서는 각 행의 왼편에 같은 길이로 공백이 포함된 문자열의 공백을 제거하는 방법을 적어둔다. textwraptextwrap은 문자열을 다루는데 편리한 함수를 제공한다. 텍스트를 래핑하거나 채우는 경우인데, 만약 이보다 복잡한 작업이 필요한 경우에는 TextWrapper를 사용하는 것이 적절한다.textwrap은 텍스트를 채우거나 축약하거나, 공백을 제거하는 등의 작업을 위한 함수를 제공하고 있다. textwrap.dedenttextwrap..

Python 2025.10.29