Files
Hyungi Ahn c986ed401e feat: error-storage 저장소 초기 설정 및 get_materials API 수정사항 추가
🎯 저장소 목적:

개발 중 발생한 오류와 해결방법 기록
동일 오류 재발 방지 및 학습 자료

📁 첫 번째 사례:

get_materials API JSON 직렬화 오류 해결
PostgreSQL Row 객체 → 딕셔너리 변환 방법
상세한 문제 분석 및 해결 과정 문서화

 완료: TK-MP-Project 백엔드 API 수정 성공
2025-07-15 14:25:32 +09:00
..

get_materials API 응답 오류 수정

🚨 문제 상황

  • 오류: TypeError - Object of type 'RealDictRow' is not JSON serializable
  • 원인: PostgreSQL Row 객체를 바로 JSON으로 변환 시도
  • 위치: /api/materials 엔드포인트

🔍 문제 원인 분석

Before (오류 발생)

materials = []
for row in cur.fetchall():
    materials.append(row)  # ← psycopg2.extras.RealDictRow 객체

return jsonify({
    'data': materials  # ← JSON 직렬화 불가능!
})
 오류가 발생했나?

psycopg2.cursor.fetchall()  RealDictRow 객체 반환
Flask.jsonify()  Python dict만 JSON 변환 가능
RealDictRow  dict  TypeError 발생

 해결 방법
After (정상 작동)
pythonmaterials = []
for row in cur.fetchall():
    # 명시적으로 딕셔너리 변환
    material = {
        'id': row[0],
        'job_number': row[1],
        'item_number': row[2],
        'description': row[3],
        'category': row[4],
        'quantity': row[5],
        'unit': row[6],
        'created_at': row[7].isoformat() if row[7] else None
    }
    materials.append(material)

return jsonify({'data': materials})
🔧 핵심 수정사항

인덱스 접근: row[0], row[1], ... 방식으로  추출
명시적 변환:  필드를 수동으로 딕셔너리에 매핑
날짜 처리: datetime  isoformat() 변환 추가

📅 수정 정보

날짜: 2024-07-15
프로젝트: TK-MP-Project
파일: backend/app.py
함수: get_materials()
결과: API 응답 정상화 완료