트러블슈팅 및 FAQ
흔히 발생하는 터미널 경고 및 대처
봇 실행 중 콘솔에 표시되는 비동기 예외, 이벤트 루프 경고, 디프리케이션 경고의 원인과 해결법을 안내합니다.
봇이 완전히 종료되지는 않더라도 콘솔에 반복적인 경고(Warning) 메시지가 출력된다면 잠재적인 에러의 원인이 될 수 있으므로 확인해 주는 것이 좋습니다.
1. Node.js UnhandledPromiseRejection
비동기 함수(async/await 또는 .then())를 호출하는 과정에서 에러 핸들링을 누락했을 때 발생하는 대표적인 경고입니다.
- 증상:
UnhandledPromiseRejectionWarning: Unhandled promise rejection...또는DeprecationWarning: Unhandled promise rejections are deprecated.출력 - 해결 방법: 비동기 호출 부를
try-catch블록으로 감싸거나.catch()콜백을 추가해 예외를 처리합니다.
// 올바른 비동기 예외 처리 예시
try {
await message.reply('명령 처리 중...');
} catch (error) {
console.error('Log: 메시지 발송 실패:', error.message);
}2. Python Event Loop is Closed 경고
discord.py 기반 봇을 종료하는 과정에서 비동기 소켓 세션이 닫히기 전에 이벤트 루프가 먼저 종료될 때 나타납니다.
- 증상:
RuntimeError: Event loop is closed출력 - 원인 및 대처: 봇이 종료되는 시점에 리소스를 정리하면서 발생하는 경고로, 정상 구동 중에는 서비스 성능에 영향을 주지 않으므로 무시하셔도 무방합니다.
3. 라이브러리 지원 중단 경고 (DeprecationWarning)
라이브러리가 버전업되면서 더 이상 사용되지 않는 이전 메서드를 호출하고 있을 때 발생합니다.
- Node.js: discord.js v14부터
new MessageEmbed()가 완전히 제거되었으므로 최신 규격인new EmbedBuilder()를 사용해야 합니다. - Python: 이전의
bot.logout()대신await bot.close()를 사용하여 정상적으로 봇 리소스를 해제하도록 구현합니다.