파이썬 프로그래밍을 하다 보면 종종 마주치게 되는 오류 중 하나가 바로 TypeError: unhashable type 입니다. 이 오류는 보통 해시 가능하지 않은 타입의 객체를 딕셔너리의 키나 집합의 요소로 사용하려 할 때 발생합니다. 오늘은 이 오류가 발생하는 원인과 해결 방법에 대해 자세히 알아보겠습니다. unhashable type 오류란? TypeError: unhashable type 오류는 파이썬에서 해시(hash) 연산이 불가능한 객체를 해시 기반 자료구조에 사용하려 할 때 발생합니다. 파이썬에서 딕셔너리와 집합(set)은 내부적으로 해시 테이블을 사용하기 때문에, 이러한 자료구조에 사용되는 키나 요소는 반드시 해시 가능(hashable)해야 합니다. 해시 가능하다는 것은 객체가 생명 주기 동안 변하지 않는 해시 값을 가지고 있어야 하며, 다른 객체와 비교할 수 있어야 함을 의미합니다. 파이썬에서 모든 불변(immutable) 내장 객체는 해시 가능하지만, 변경 가능(mutable) 객체는 해시 불가능합니다. 해시 가능한 타입 vs 해시 불가능한 타입 해시 가능한 타입: 정수(int) 부동소수점(float) 문자열(str) 튜플(tuple) - 모든 요소가 해시 가능할 때 frozenset 해시 불가능한 타입: 리스트(list) 딕셔너리(dict) 집합(set) 오류 발생 예시 다음은 TypeError: unhashable type 오류가 발생하는 대표적인 예시입니다: # 리스트를 딕셔너리 키로 사용하려 할 때 my_dict = {[ 1 , 2 , 3 ]: "값" } # TypeError: unhashable type: 'list' # 리스트를 집합에 추가하려 할 때 my_set = { 1 , 2 , [ 3 , 4 ]} # TypeError: unhashable type: 'list' # 딕셔너리를 튜플...
파이썬 개발 중 'ValueError: Signature expired' 오류를 마주치셨나요? 이 오류는 일반적으로 인증 토큰이나 서명의 유효 기간이 만료되었을 때 발생합니다. 특히 AWS, JWT 토큰, 서명된 URL 등을 다룰 때 자주 등장하는 문제입니다. 이 글에서는 이 오류의 원인과 해결 방법을 상세히 알아보겠습니다. ValueError: Signature expired란 무엇인가? 'ValueError: Signature expired'는 파이썬에서 디지털 서명이나 토큰의 유효 기간이 지났을 때 발생하는 예외입니다. 보안을 위해 많은 시스템이 시간 제한이 있는 서명을 사용하며, 이 시간이 지나면 서명은 더 이상 유효하지 않습니다. 주요 발생 환경은 다음과 같습니다: AWS S3 presigned URL 사용 시 JWT(JSON Web Token) 인증 처리 시 시간 제한이 있는 API 인증 토큰 사용 시 OAuth 인증 프로세스 중 오류의 주요 원인 이 오류가 발생하는 주된 원인은 다음과 같습니다: 서버와 클라이언트 간 시간 불일치 : 시스템 시간이 정확하지 않을 때 발생합니다. 만료된 토큰 사용 : 실제로 토큰이 만료된 후 사용을 시도할 때 발생합니다. 잘못된 만료 시간 설정 : 토큰 생성 시 만료 시간을 너무 짧게 설정한 경우입니다. 타임존 문제 : 서로 다른 시간대 설정으로 인한 시간 불일치가 원인일 수 있습니다. 해결 방법: 서명 만료 오류 해결하기 1. 시스템 시간 동기화 # 리눅스/맥 환경에서 시간 동기화 # 터미널에서 실행 # sudo ntpdate pool.ntp.org # 파이썬에서 시간 확인 import datetime print ( datetime . datetime . now ()) 시스템 시간이 정확한지 확인하고, NTP 서버와 동기화하는 것이 중요합니다. 2. JWT 토큰 만료 시간 연장 import jwt impo...