APIView
를 활용하여 POST 요청 처리 로직을 작성했다.request.data.copy()
와 serializer
를 사용하여 클라이언트 데이터를 검증 및 저장하는 방식을 학습했다.400 Bad Request
응답을 반환하고, 적절한 에러 메시지를 포함하는 방식을 구현했다.objects.create()
를 활용하여 ChatRoom
및 ChatMessage
객체를 생성하는 과정을 연습했다.chat_id=chatroom_instance
)나 기본 키(chat_id_id=chat_id
)를 모두 사용할 수 있음을 확인했다.JSONField
에 Python 딕셔너리를 저장하여 메시지 데이터를 관리하는 방식을 구현했다.{
"message": "메시지가 성공적으로 생성되었습니다.",
"user_msg": "How's the weather today?",
"ai_response": {"content": "It's sunny and warm today."}
}
ModelSerializer
와 read_only_fields
ModelSerializer
를 사용하여 데이터 직렬화와 유효성 검증 과정을 자동화했다.read_only_fields
를 활용하여 클라이언트가 수정할 수 없는 필드(user_id
, created_at
, updated_at
)를 명시적으로 설정했다.오류 메시지: "TypeError: Object of type ChatRoom is not JSON serializable"
ChatRoom
)를 JSON 응답에 직접 포함하려 한 것이었다.ChatRoomSerializer
를 사용하여 모델 인스턴스를 JSON 형식으로 변환했다.오류 메시지: "'str' object has no attribute 'parent_run_id'"
chatbot
함수로 전달된 chat_history
데이터 형식이 예상과 달랐기 때문이었다.chat_history
를 단순한 리스트(JSON) 구조로 변경하여 문제를 해결했다.ChatRoom.DoesNotExist
)는 404 에러로, 기타 예외는 500 에러로 명확히 구분했다.serializer.is_valid()
와 serializer.save()
를 활용하여 코드를 간결하게 작성했다.HumanMessage
와 AIMessage
형태로 구성하려 했으나 호환성 문제를 발견하고, JSON 형태로 간단히 재구성하여 문제를 해결했다.serializer
와 read_only_fields
를 활용하면 데이터 검증 및 처리가 훨씬 간단해진다는 점을 배웠다.transaction.atomic
)을 통해 모델 간 데이터 일관성을 유지하고, 실패 시 롤백을 처리할 수 있는 구조를 익혔다.