본문 바로가기
코딩취미/node js

BadRequestError: 400 Missing required parameter: 'messages' 오류 해결 가이드

by 브링블링 2025. 6. 27.
반응형

❗BadRequestError: 400 Missing required parameter: 'messages' 오류 해결 가이드

OpenAI의 Chat API나 다양한 외부 API를 사용할 때  종종 접할 수 있는 에러 중 하나가 바로

 

BadRequestError: 400 Missing required parameter: 'messages'입니다.

 

처음 접하면 당황스러울 수 있지만, 이 오류는 매우 기본적이고 단순한 실수로 인해 발생하는 경우가 많아요.

 

이번 글에서는 이 에러가 발생하는 이유와 이를 해결하기 위한 방법을 정리했습니다.


💥 에러 메시지 해석

BadRequestError: 400 Missing required parameter: 'messages'

 

이 에러 메시지는 크게 두 부분으로 구성되어 있어요:

항목 의미
400 **Bad Request (잘못된 요청)**을 뜻하는 HTTP 상태 코드입니다.
Missing required parameter: 'messages' 필수 매개변수인 messages가 누락되었다는 뜻입니다.
 

즉, 서버 입장에서 보면 "당신이 보낸 요청에는 'messages'라는 중요한 정보가 빠져 있어요. 이걸 포함해서 다시 보내주세요!"라는 말입니다.


🤖 기본 개념 먼저 이해해볼까요?

📌 HTTP 상태 코드 400 (Bad Request)란?

클라이언트가 서버로 형식이 잘못된 요청을 보냈을 때 발생하는 오류입니다. 서버 입장에서는 요청의 문법이 잘못되어 처리할 수 없다는 뜻이에요.

📌 messages란?

OpenAI의 ChatCompletion API에서 사용되는 핵심 파라미터로, 대화의 맥락을 담고 있는 배열(Array) 형태의 데이터입니다.

 

예시:

"messages": [
  { "role": "user", "content": "안녕 GPT!" }
]

 

이 구조가 빠지면 서버는 어떤 대화를 진행해야 하는지 알 수 없어 요청을 거부합니다.


🔍 주로 발생하는 원인

원인 설명 해결 방법
❌ messages 키 자체 누락 JSON에 messages 항목이 없음 messages 파라미터를 추가하고 올바르게 구조화하세요
🔄 잘못된 데이터 타입 문자열, 숫자 등으로 잘못 전달됨 messages는 반드시 배열(array) 형태여야 합니다
🧱 배열 안 객체 누락 배열은 있지만 내부에 { role, content } 구조가 없음 내부 객체 형식을 맞춰주세요
⚠️ 오타 또는 대소문자 오류 Messages, message 등 오타 messages로 정확히 입력해야 합니다 (소문자 필수)
🧪 테스트 중 누락 테스트 코드에서 파라미터 제거 후 미복구 로직 중 누락된 파라미터 복구 확인 필요
 

💡 예제 코드 (Node.js 기준)

const { Configuration, OpenAIApi } = require('openai');
require('dotenv').config();

const openai = new OpenAIApi(new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
}));

async function run() {
  try {
    const response = await openai.createChatCompletion({
      model: "gpt-4",
      messages: [  // ✅ 필수 파라미터
        { role: "user", content: "안녕 GPT! 오늘 날씨 어때?" }
      ]
    });
    console.log(response.data.choices[0].message.content);
  } catch (error) {
    if (error.response) {
      console.error("❗ 오류 코드:", error.response.status);
      console.error("❗ 메시지:", error.response.data);
    } else {
      console.error("❗ 네트워크 오류 또는 기타:", error.message);
    }
  }
}

run();

🧪 체크리스트: 에러 방지를 위한 확인 포인트

  • messages라는 키를 정확히 입력했나요?
  • messages는 배열 형태인가요?
  • 배열 안에는 role과 content를 가진 객체들이 있나요?
  • role은 "user" 또는 "system", "assistant" 중 하나인가요?
  • content는 빈 문자열이 아닌가요?

🧘 마무리하며

이 에러는 대부분 실수로 인해 발생합니다.

하지만 서버는 정확한 형식을 요구하기 때문에, 사소한 누락도 오류로 이어질 수 있어요.

그러니 항상 요청 형식을 API 문서와 대조하면서 꼼꼼하게 확인해보는 습관을 들이는 것이 좋습니다.

누구나 한 번쯤 겪을 수 있는 실수지만, 오늘 글을 통해 여러분은 더 빠르게 문제를 파악하고 해결할 수 있을 거예요! 🙌

반응형