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_fieldsModelSerializer를 사용하여 데이터 직렬화와 유효성 검증 과정을 자동화했다.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)을 통해 모델 간 데이터 일관성을 유지하고, 실패 시 롤백을 처리할 수 있는 구조를 익혔다.