- 0
- 184 단어
안녕하세요 케이입니다.
지난 글에서는 텔레그램 Webhook이 무엇인지, 뉴스 자동수집 봇에서 어떤 역할을 하는지 알아봤습니다.
이번에는 Google Apps Script와 텔레그램 Webhook을 연결할 때 만날 수 있는 302 Found 오류에 대해 정리해보겠습니다.
텔레그램 봇을 처음 만들 때는 BotFather에서 봇을 생성하고 Bot Token과 Chat ID까지 확인하면 큰 문제 없이 진행되는 경우가 많습니다.
하지만 Google Apps Script를 웹 앱으로 배포하고 Webhook을 연결하는 단계부터 조금 복잡해질 수 있습니다.
특히 Webhook 상태를 확인했을 때 다음과 같은 메시지가 나타날 수 있습니다.
Wrong response from the webhook: 302 Found
처음 보면 코드 자체가 잘못된 것인지, 텔레그램 설정이 잘못된 것인지 판단하기 어렵습니다.
하지만 302 오류의 의미와 Webhook이 작동하는 구조를 이해하면 확인해야 할 부분을 하나씩 찾을 수 있습니다.
302 Found 오류란 무엇인가
302 Found는 웹에서 사용하는 HTTP 상태 코드 중 하나입니다.
쉽게 설명하면 프로그램이 어떤 주소로 요청을 보냈는데 해당 주소에서 바로 결과를 반환하지 않고 다른 주소로 이동하도록 안내했다는 의미입니다.
이 과정을 리디렉션이라고 합니다.
일반적인 웹 브라우저에서는 리디렉션이 발생해도 사용자가 크게 신경 쓰지 않을 수 있습니다.
브라우저가 자동으로 새로운 주소로 이동하기 때문입니다.
하지만 Webhook은 조금 다릅니다.
텔레그램은 등록된 Webhook 주소에 데이터를 보내고 정상적인 응답을 기대합니다.
그런데 등록된 주소에서 다른 곳으로 이동하라는 응답이 돌아오면 Webhook이 정상적으로 처리되지 않을 수 있습니다.
이때 302 Found 관련 오류가 나타날 수 있습니다.
텔레그램 Webhook에서 302 오류가 발생하는 이유
Google Apps Script를 Webhook으로 사용할 때 302 오류가 발생하는 원인은 여러 가지가 있습니다.
대표적으로 확인할 수 있는 부분은 다음과 같습니다.
Google Apps Script 웹 앱 주소가 정확하지 않은 경우
배포 주소 대신 다른 주소를 사용한 경우
웹 앱 접근 권한이 제한된 경우
Google Apps Script가 요청을 받은 뒤 다른 페이지로 이동시키는 경우
이전 배포 주소를 계속 사용하고 있는 경우
Webhook이 등록된 주소와 현재 사용 중인 웹 앱 주소가 다른 경우
즉 302 오류가 발생했다고 해서 무조건 코드 자체가 잘못됐다고 판단할 필요는 없습니다.
먼저 주소와 배포 상태부터 확인하는 것이 좋습니다.
Google Apps Script 배포 주소를 먼저 확인한다
Webhook 오류가 발생했을 때 가장 먼저 확인할 부분은 Google Apps Script의 웹 앱 주소입니다.
Google Apps Script에서 코드를 작성했다고 바로 외부에서 접근할 수 있는 것은 아닙니다.
텔레그램이 요청을 보낼 수 있도록 웹 앱 형태로 배포해야 합니다.
배포가 완료되면 외부에서 접근할 수 있는 웹 앱 주소가 생성됩니다.
Webhook에는 이 주소를 정확하게 등록해야 합니다.
비슷하게 보이는 다른 주소를 사용하면 정상적으로 작동하지 않을 수 있습니다.
특히 코드 편집 화면 주소나 프로젝트 관리 주소를 Webhook에 등록하면 안 됩니다.
반드시 웹 앱으로 배포한 뒤 생성되는 실행용 주소를 사용해야 합니다.
웹 앱 접근 권한도 확인해야 한다
Google Apps Script를 웹 앱으로 배포할 때는 누가 해당 웹 앱에 접근할 수 있는지 설정하는 과정이 있습니다.
Webhook은 텔레그램 서버가 Google Apps Script에 요청을 보내는 구조입니다.
따라서 외부 요청을 받을 수 없는 상태라면 정상적으로 작동하지 않습니다.
본인 계정에서만 접근할 수 있도록 설정되어 있다면 텔레그램이 Webhook 데이터를 전달하지 못할 수 있습니다.
뉴스 자동수집 봇을 Webhook 방식으로 운영하려면 텔레그램에서 보내는 외부 요청을 받을 수 있도록 배포 설정을 확인해야 합니다.
다만 외부 접근을 허용할 때는 Webhook에서 처리하는 데이터와 인증정보 관리에도 주의하는 것이 좋습니다.
코드를 수정했다면 다시 배포 상태를 확인한다
Google Apps Script에서 처음 배포한 뒤 코드를 수정하는 경우도 많습니다.
예를 들어 Webhook 요청을 처리하는 코드를 추가하거나 오류를 수정할 수 있습니다.
이때 코드 편집 화면에서 내용을 변경했다고 해서 기존에 배포된 웹 앱에 항상 원하는 방식으로 즉시 적용되었다고 생각하면 안 됩니다.
배포 상태를 확인하고 현재 사용 중인 버전이 변경된 코드를 반영하고 있는지 확인하는 것이 좋습니다.
특히 새 배포를 생성한 경우에는 웹 앱 주소도 다시 확인해야 합니다.
기존 Webhook에 예전 주소가 등록되어 있다면 새 코드가 정상적으로 작성되어 있어도 Webhook은 계속 이전 주소로 요청을 보낼 수 있습니다.
Webhook 주소가 현재 주소와 같은지 확인한다
Google Apps Script를 다시 배포했다면 텔레그램에 등록된 Webhook 주소와 현재 웹 앱 주소를 비교하는 것이 좋습니다.
둘이 다르다면 Webhook을 새 주소로 다시 설정해야 할 수 있습니다.
이 부분은 처음 자동화를 만들 때 자주 놓치기 쉽습니다.
코드는 새로 수정했는데 텔레그램은 이전 배포 주소를 계속 사용하고 있다면 사용자는 최신 코드가 왜 작동하지 않는지 이해하기 어렵습니다.
그래서 Webhook 오류를 해결할 때는 다음 세 가지를 함께 확인하는 것이 좋습니다.
현재 Google Apps Script 웹 앱 주소
텔레그램에 등록된 Webhook 주소
현재 배포된 코드 버전
이 세 가지가 서로 맞아야 합니다.
Webhook 상태를 확인하면 원인을 찾기 쉽다
텔레그램에서는 현재 Webhook이 어떤 상태인지 확인할 수 있습니다.
Webhook 상태 정보를 확인하면 현재 등록된 주소와 마지막 오류 내용을 확인할 수 있습니다.
정상적인 경우에는 오류 메시지가 없거나 새로운 업데이트가 정상적으로 처리됩니다.
문제가 있는 경우에는 마지막 오류 메시지에 302 Found와 같은 내용이 표시될 수 있습니다.
이 정보는 Webhook 문제를 해결할 때 매우 유용합니다.
단순히 “봇이 답하지 않는다”는 결과만 보는 것보다 텔레그램이 어떤 오류를 기록하고 있는지 확인하면 문제 범위를 줄일 수 있습니다.
기존 Webhook을 삭제하고 다시 설정하는 방법도 있다
Webhook 설정을 여러 번 변경하다 보면 이전 설정이 남아 있는지 혼란스러울 수 있습니다.
이 경우 기존 Webhook을 삭제한 뒤 다시 설정하는 것도 하나의 방법입니다.
먼저 등록되어 있는 Webhook을 제거합니다.
그다음 현재 사용 중인 Google Apps Script 웹 앱 주소를 다시 확인합니다.
마지막으로 정확한 주소를 이용해서 Webhook을 다시 등록합니다.
이렇게 하면 이전 주소나 잘못된 설정 때문에 발생하는 문제를 줄일 수 있습니다.
다만 Webhook을 삭제하면 그동안 Webhook 방식으로 들어오던 메시지는 처리되지 않기 때문에 다시 등록한 뒤 정상 작동 여부를 확인해야 합니다.
doPost 함수가 필요한 이유
텔레그램은 사용자가 봇에게 메시지를 보내면 Webhook 주소로 데이터를 전달합니다.
Google Apps Script에서는 이 요청을 받아서 처리할 함수가 필요합니다.
Webhook에서는 일반적으로 POST 방식의 요청이 들어오기 때문에 Google Apps Script에서 doPost 함수를 사용하게 됩니다.
쉽게 설명하면 doPost는 텔레그램에서 전달된 메시지를 받는 입구와 같은 역할을 합니다.
사용자가 텔레그램에서 /start 또는 다른 메시지를 보내면 Webhook을 통해 데이터가 들어옵니다.
Google Apps Script의 doPost 함수가 해당 데이터를 받고 필요한 작업을 실행합니다.
따라서 Webhook 주소가 정상적으로 등록되어 있어도 요청을 처리할 코드가 제대로 구성되어 있지 않으면 봇이 기대한 방식으로 작동하지 않을 수 있습니다.
302 오류와 코드 오류를 구분해야 한다
Webhook이 작동하지 않는다고 해서 모든 문제가 같은 원인인 것은 아닙니다.
302 Found는 주로 주소 이동이나 배포 경로와 관련된 문제를 확인해야 합니다.
반면 Google Apps Script 코드 자체에 오류가 있다면 다른 형태의 실행 오류가 발생할 수 있습니다.
따라서 다음처럼 구분해서 생각하는 것이 좋습니다.
302 Found가 표시된다면 주소와 배포 설정을 먼저 확인합니다.
웹 앱에 접근할 수 없다면 접근 권한을 확인합니다.
Webhook은 정상인데 봇이 응답하지 않는다면 doPost와 메시지 처리 코드를 확인합니다.
뉴스 검색이 작동하지 않는다면 네이버 API 관련 부분을 확인합니다.
이렇게 기능별로 문제를 나누면 전체 코드를 반복해서 수정하는 일을 줄일 수 있습니다.
Webhook 오류를 해결할 때 확인하는 순서
처음부터 여러 설정을 동시에 변경하면 어떤 수정이 문제를 해결했는지 알기 어렵습니다.
그래서 순서를 정해서 확인하는 것이 좋습니다.
첫 번째로 Google Apps Script가 웹 앱으로 정상적으로 배포되어 있는지 확인합니다.
두 번째로 현재 웹 앱 주소가 무엇인지 확인합니다.
세 번째로 웹 앱의 접근 권한을 확인합니다.
네 번째로 텔레그램에 등록된 Webhook 주소와 비교합니다.
다섯 번째로 Webhook 상태에서 마지막 오류 메시지를 확인합니다.
여섯 번째로 필요하다면 기존 Webhook을 삭제하고 현재 주소로 다시 등록합니다.
마지막으로 텔레그램 봇에게 테스트 메시지를 보내고 정상적으로 처리되는지 확인합니다.
이 순서로 진행하면 문제 범위를 좁혀가면서 확인할 수 있습니다.
오류가 해결되었는지 확인하는 방법
Webhook을 다시 설정한 다음에는 실제로 텔레그램에서 테스트하는 것이 가장 확실합니다.
먼저 자신이 만든 봇의 채팅방으로 이동합니다.
그리고 간단한 메시지를 하나 보냅니다.
예를 들어 다음처럼 입력할 수 있습니다.
/start
또는
test
Google Apps Script가 정상적으로 요청을 받으면 Webhook을 통해 해당 데이터가 전달됩니다.
봇에 응답 기능을 만들어두었다면 설정한 메시지가 다시 텔레그램으로 돌아와야 합니다.
Webhook 상태에서도 새로운 오류가 발생하지 않는지 함께 확인하면 좋습니다.
Webhook이 꼭 필요한지도 다시 생각해볼 수 있다
뉴스 자동수집 시스템에서 Webhook 오류 때문에 많은 시간을 사용하고 있다면 현재 만들려는 기능에 Webhook이 반드시 필요한지도 다시 확인해볼 필요가 있습니다.
매일 정해진 시간에 뉴스를 자동으로 받아보는 것이 목적이라면 Webhook 없이도 구현할 수 있습니다.
Google Apps Script의 시간 기반 트리거를 이용해 정해진 시간에 네이버 뉴스 검색 API를 호출하고 결과를 텔레그램으로 보내면 됩니다.
Webhook은 사용자가 텔레그램에서 명령어를 보내고 프로그램이 즉시 반응해야 할 때 필요합니다.
예를 들어 /news AI와 같은 명령을 입력해서 즉시 AI 뉴스를 검색하는 기능을 만들고 싶다면 Webhook을 사용하는 것이 좋습니다.
단순 자동 뉴스 알림이 목적이라면 구조를 더 간단하게 만들 수도 있습니다.
302 오류 해결 후 할 수 있는 기능
Webhook이 정상적으로 작동하면 텔레그램 봇을 단순한 뉴스 알림 도구에서 더 다양한 기능을 가진 봇으로 확장할 수 있습니다.
예를 들어 사용자가 다음과 같은 명령을 입력하도록 만들 수 있습니다.
/news
현재 등록된 키워드의 뉴스를 바로 검색합니다.
/list
현재 등록된 뉴스 키워드를 보여줍니다.
/add
새로운 뉴스 검색 키워드를 추가합니다.
/delete
필요하지 않은 키워드를 삭제합니다.
이런 기능을 구현하면 Google Apps Script 코드를 직접 수정하지 않고 텔레그램 안에서 뉴스 수집 설정을 관리할 수 있습니다.
Webhook은 이런 양방향 기능을 만들기 위한 중요한 연결 방식입니다.
Webhook 302 Found 오류를 어렵게 생각하지 않아도 된다
처음 302 Found라는 메시지를 보면 프로그램이 완전히 잘못된 것처럼 느껴질 수 있습니다.
하지만 실제로는 주소나 배포 설정을 확인하면서 해결할 수 있는 경우가 있습니다.
가장 중요한 것은 한 번에 모든 코드를 변경하지 않는 것입니다.
현재 Webhook 주소가 무엇인지 확인하고, Google Apps Script의 배포 주소와 비교하고, 접근 권한을 확인하는 순서로 진행하는 것이 좋습니다.
자동화 시스템을 만들면서 오류가 발생하는 것은 자연스러운 과정입니다.
오류 메시지를 기준으로 어느 구간에서 문제가 발생했는지 하나씩 확인하는 것이 중요합니다.
정리
텔레그램 Webhook에서 302 Found 오류가 발생한다면 가장 먼저 Google Apps Script 웹 앱 주소와 배포 설정을 확인하는 것이 좋습니다.
302 상태는 요청한 주소에서 바로 정상 결과를 반환하는 대신 다른 위치로 이동하도록 응답했다는 의미입니다.
Webhook에서는 이런 응답 때문에 정상적으로 데이터를 전달하지 못할 수 있습니다.
해결 과정에서는 현재 웹 앱 주소, 외부 접근 권한, 텔레그램에 등록된 Webhook 주소, 현재 배포된 코드가 서로 일치하는지 확인하는 것이 중요합니다.
필요하다면 기존 Webhook을 삭제한 뒤 현재 Google Apps Script 웹 앱 주소로 다시 등록할 수 있습니다.
이후 텔레그램에서 /start나 테스트 메시지를 보내고 Webhook 상태를 다시 확인하면 정상적으로 연결되었는지 판단할 수 있습니다.
그리고 단순히 정해진 시간마다 뉴스를 받아보는 시스템이라면 Webhook이 반드시 필요한 것은 아니라는 점도 기억하면 좋습니다.
사용자의 명령에 실시간으로 반응하는 봇이 필요한 경우에 Webhook을 추가하면 됩니다.
다음 글에서는 Webhook 설정에서 한 단계 벗어나 실제 뉴스 자동수집 기능으로 돌아가서, 내가 관심 있는 키워드의 뉴스만 골라 텔레그램으로 받아보는 방법을 정리해보겠습니다.