파이썬49 Python threading.local 와 ContextVar 비교 threading.local 와 ContextVar 는 둘 다 데이터를 격리하고 동적으로 할당한다는 점에서 유사한 목적을 가지고 있지만 사용되는 상황과 특징이 조금 다르다. 이 글에서는 둘의 공통점과 차이점을 예제 코드와 함께 비교해보고자 한다. threading.local threading.local 은 각 스레드마다 고유한 데이터를 가질 수 있게 해준다. 아래 예제 코드를 살펴보자. import threading # threading.local 객체 생성 thread_local_data = threading.local() def 스레드_울음소리(): thread_local_data.value = "끼룩끼룩!" def 스레드_동물호출(): value = getattr(thread_local_data, .. 2023. 9. 26. Python JSON 직렬화 TypeError 핸들링하기 json 변환 시 타입에러 발생 아래와 같이 Decimal 타입을 json 으로 변환하는 코드가 있다고 해보자. import json from decimal import Decimal data = {"value": Decimal("123.456")} json_str = json.dumps(data) print(json_str) 이를 실행하면 다음의 에러가 발생한다. raise TypeError(f'Object of type {o.__class__.__name__} ' TypeError: Object of type Decimal is not JSON serializable 왜냐하면 json 라이브러리는 기본적으로 다음 타입들만 직렬화를 지원하기 때문이다. dict list, tuple str int, fl.. 2023. 9. 26. Pydantic 옵션 하나로 ORM 을 DTO 모델로 변환하기 ORM 에서 DTO 로 모델 변환하기 ORM(Object-Relational Mapping) 객체를 통해 DB의 데이터를 가져왔다면 이를 DTO(Data Transfer Object)를 통해 다른 레이어로 전달하고 싶을 것이다. 이 글에서는 Pydantic 의 from_attributes=True 옵션을 활용하여 손쉽게 DTO를 생성하는 방법을 설명하고자 한다. 본론에 앞서 우선 ORM을 DTO로 변환하는 다양한 방법들을 살펴보자. (본론으로 넘어가고 싶다면 생략해도 좋다) 예를 들어 아래처럼 ORM과 DTO 모델이 명시되어 있다고 해보자. from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declar.. 2023. 8. 22. Pydantic 의 Datetime 타입으로 날짜와 시간을 다뤄보자 Pydantic 의 네 가지 Datetime 타입 Pydantic은 데이터 유효성 검사와 데이터 클래스 설정을 간결하게 만들어주는 Python 라이브러리다. Pydantic에서는 날짜와 시간을 다루는 특별한 타입이 있는데, AwareDatetime, NaiveDatetime, PastDatetime, FutureDatetime이 바로 그것이다. 이 글을 통해 각각의 타입이 어떻게 동작하고 언제 사용되는지 확인해보자. AwareDatetime AwareDatetime은 시간대(timezone) 정보가 포함된 datetime 객체를 의미한다. 세계 각지의 시간대를 일관성 있게 처리해야 할 때 유용하게 쓸 수 있다. 사용 예시 from pydantic import BaseModel from datetime i.. 2023. 8. 21. Python _ Decimal 모듈로 부동 소수점 문제 해결하기 Decimal 이란? Decimal은 '부동 소수점 문제'를 해결하고 소수점을 정확하게 표현하기 위해 사용하는 Python 자료형이다. 컴퓨터에서는 소수를 이진수로 표현하다 보니, 0.1과 같은 값이 정확하게 표현되지 않을 수 있다. 이러한 문제 때문에 금융, 회계 등 정확한 계산이 필요한 경우에는 Decimal을 사용해야 한다. 예를 들어, 파이썬에서 소수형을 그대로 사용하면 다음과 같은 부동 소수점 문제가 발생할 수 있다. value = 0.1 + 0.2 print(value) # 출력: 0.30000000000000004 하지만 아래처럼 Decimal 모듈을 사용하면 이런 문제를 피할 수 있다. from decimal import Decimal value = Decimal('0.1') + Decim.. 2023. 5. 16. python _ traceback 에러 메시지 핸들링하기 traceback 이란? 파이썬으로 개발을 하다보면 traceback 이란 단어를 많이 접하게 된다. traceback은 역 추적 이란 뜻으로 해당 에러가 어디서부터 발생했는지 우리에게 알려준다. 예를들어 다음처럼 빈 dictionary에 “값 내놔” 라는 key를 호출하면, 해당 key가 없기 때문에 KeyError가 발생한다. dict = {} dict["값 내놔"] Traceback (most recent call last): File "example.py", line 2, in dict["값 내놔"] KeyError: '값 내놔' 위의 메시지로 보자면 KeyError가 line 2에서 발생했음을 알 수 있다. 이처럼 에러 메시지는 디버깅을 할 때 매우 유용하다. 하지만 에러가 언제 발생할지 우리는.. 2022. 9. 24. 이전 1 2 3 4 ··· 9 다음