안녕하세요 케이입니다.

텔레그램 봇을 만들면서 꽤 답답했던 문제가 하나 있었습니다.

분명 Google Apps Script에서 코드를 수정했습니다.

저장도 했습니다.

그런데 텔레그램에서 테스트해보면 예전 기능 그대로였습니다.

처음에는 제가 코드를 잘못 수정했다고 생각했습니다.

그래서 같은 부분을 몇 번이나 다시 고쳤는데 달라지는 게 없었습니다.

결국 나중에 보니 코딩 문제가 아니라 배포와 연결 문제였습니다.

저처럼 Google Apps Script를 처음 사용하는 분이라면 이 부분에서 꽤 오래 막힐 수 있을 것 같습니다.

저장만 하면 바로 적용되는 줄 알았습니다

처음에는 Google Apps Script에서 코드를 고치고 저장 버튼만 누르면 바로 새로운 코드가 적용되는 줄 알았습니다.

그런데 제가 사용하는 방식은 조금 달랐습니다.

텔레그램 봇은 Google Apps Script 코드를 직접 보는 게 아니라 웹앱으로 배포된 주소를 통해 연결되어 있었습니다.

그래서 제가 작업 화면에서 코드를 바꿨다고 해도 실제 텔레그램이 보고 있는 쪽은 예전 배포 상태일 수 있었습니다.

이 개념을 처음에는 전혀 이해하지 못했습니다.

제가 이해한 방식으로 바꾸면 이렇습니다.

Google Apps Script에 보이는 코드는 작업 중인 원본

이고

텔레그램이 실제로 접속하는 건 배포된 웹앱

이라고 생각하면 편했습니다.

가장 먼저 배포 상태를 확인했습니다

코드를 수정했는데 반영이 안 될 때는 Google Apps Script의 배포 관리부터 확인했습니다.

현재 웹앱으로 배포되어 있는 항목이 무엇인지 보고 제가 수정한 내용을 반영한 상태인지 확인했습니다.

필요하면 배포를 다시 업데이트했습니다.

처음에는 새 배포를 계속 만들었는데, 그러다 보니 웹앱 주소가 여러 개 생겨서 오히려 더 헷갈렸습니다.

그래서 지금은 기존 배포를 업데이트할 수 있는 상황이면 그쪽을 먼저 확인하는 편입니다.

웹앱 주소가 바뀌었는지도 확인했습니다

여기서 가장 중요했던 부분이 있습니다.

새로 배포하면서 웹앱 URL이 달라질 수 있었습니다.

문제는 텔레그램 Webhook이 자동으로 새 주소를 따라가는 게 아니라는 점이었습니다.

예전 Webhook이 기존 주소를 보고 있다면 텔레그램은 계속 예전 웹앱으로 메시지를 보냅니다.

그래서 새 코드가 아무리 정상이어도 제가 기대한 동작이 나오지 않을 수 있었습니다.

처음에는 이걸 모르고 코드만 계속 수정했습니다.

현재 Webhook 주소와 웹앱 주소를 비교했습니다

이 문제를 해결하면서 가장 많이 했던 게 주소 비교였습니다.

Google Apps Script에서 현재 사용하는 웹앱 주소를 확인하고

텔레그램 Webhook에 등록된 주소도 확인했습니다.

두 주소가 다르면 연결이 꼬여 있는 것입니다.

저는 예전에 Webhook 설정 과정에서 302 오류 때문에 꽤 오래 막혔던 적이 있어서 이제는 이상한 일이 생기면 Webhook 주소부터 비교하게 됐습니다.

Webhook 주소가 다르면 다시 연결했습니다

새로운 웹앱 주소를 사용하는 경우에는 텔레그램 Webhook도 다시 설정해야 했습니다.

개념만 놓고 보면 단순합니다.

텔레그램에게

“앞으로 메시지는 이 새 주소로 보내.”

라고 다시 알려주는 것입니다.

이 부분을 바꾸고 나서 텔레그램으로 다시 테스트했더니 제가 수정한 코드가 정상적으로 반영되는 경우가 있었습니다.

그때 처음으로

“코드가 잘못된 게 아니었구나.”

하고 알았습니다.

테스트용 주소와 실제 배포 주소도 헷갈렸습니다

Google Apps Script를 사용하다 보면 비슷해 보이는 주소가 여러 개 나옵니다.

저는 처음에 어떤 주소든 비슷해 보여서 아무거나 넣어도 되는 줄 알았습니다.

그런데 텔레그램 Webhook에서는 외부에서 실제로 접근할 수 있는 웹앱 주소를 사용해야 했습니다.

작업 화면에서 사용하는 테스트용 주소와 실제 배포된 웹앱 주소를 혼동하면 정상적으로 연결되지 않을 수 있었습니다.

이 부분은 이름만 봐서는 초보자가 쉽게 구분하기 어려웠습니다.

코드를 넣은 위치가 잘못된 경우도 있었습니다

배포와 Webhook이 모두 정상인데도 새 기능이 작동하지 않는 경우가 있었습니다.

이때는 제가 코드를 넣은 위치를 확인했습니다.

예를 들어 새로운 기능을 함수 하나로 만들어놨다고 해도 실제 doPost() 흐름에서 그 함수를 호출하지 않으면 아무 일도 일어나지 않습니다.

저는 처음에

“함수를 만들었으니까 당연히 알아서 실행되겠지.”

라고 생각한 적도 있었습니다.

하지만 실제로는 그 함수를 어디에서 실행할지 연결해줘야 했습니다.

예를 들어

if (text == "/news") {
  searchNews();
  return;
}

처럼 특정 명령어와 기능을 연결해줘야 했습니다.

함수 이름을 바꾸고 연결 부분을 안 바꾼 적도 있었습니다

이것도 한번 실수했습니다.

예를 들어 원래 함수 이름이

searchNews()

였는데 수정하면서

searchMyNews()

로 바꿨다고 해보겠습니다.

그런데 아래쪽에서는 여전히

searchNews();

를 실행하고 있으면 새로 만든 함수가 사용되지 않습니다.

또는 기존 함수가 없어졌다면 오류가 날 수도 있습니다.

코드가 길어지다 보니까 이런 작은 연결 오류가 생각보다 자주 생겼습니다.

변수 이름도 다시 확인했습니다

코드를 수정하면서 변수 이름을 바꿨는데 다른 부분에서는 예전 이름을 그대로 사용하는 경우도 있었습니다.

예를 들어

var keyword = text;

라고 만들어놓고 나중에는

searchNews(searchWord);

처럼 다른 이름을 사용하면 문제가 생길 수 있습니다.

저처럼 코드를 직접 처음부터 작성하지 않고 하나씩 수정해가는 방식에서는 이런 실수가 특히 생기기 쉬웠습니다.

그래서 새 코드를 넣을 때는

함수 이름

변수 이름

호출하는 부분

이 세 가지가 맞는지 같이 확인했습니다.

저장하지 않고 테스트한 적도 있었습니다

너무 기본적인 실수인데 실제로 했습니다.

코드를 수정하고 바로 텔레그램으로 넘어가서 테스트했는데 당연히 바뀌지 않았습니다.

다시 Apps Script 화면으로 돌아와보니 수정한 내용을 저장하지 않은 상태였습니다.

코드를 몇 번 수정하다 보면 생각보다 이런 일이 생겼습니다.

그래서 지금은

코드 수정

→ 저장

→ 배포 상태 확인

→ 텔레그램 테스트

순서로 습관을 들였습니다.

실행 기록을 같이 보면 훨씬 빨랐습니다

앞 글에서 다뤘던 실행 기록도 여기서 많이 도움이 됐습니다.

예를 들어 텔레그램에서 새 명령어를 보냈는데 실행 기록에 아무것도 없다면 연결 문제를 먼저 의심할 수 있습니다.

반대로 실행 기록에는 정상적으로 들어왔는데 제가 기대한 함수가 실행되지 않았다면 조건문이나 함수 연결을 확인할 수 있었습니다.

이렇게 확인하면

배포 문제인지

Webhook 문제인지

코드 문제인지

조금씩 범위를 줄일 수 있었습니다.

예전 코드를 보고 있는 경우도 있었습니다

코드를 여러 번 수정하다 보니까 비슷한 함수가 두 개 남아 있는 경우도 있었습니다.

예를 들어 예전 searchNews() 함수와 새로 수정한 searchNews2()가 같이 남아 있는데 실제 명령어에서는 예전 함수를 호출하고 있을 수 있었습니다.

저는 새 코드를 제대로 넣었다고 생각했지만 텔레그램은 계속 예전 함수만 실행하고 있던 셈입니다.

이걸 찾고 나서부터는 테스트가 끝난 오래된 함수는 주석을 달거나 정리하는 편이 낫겠다고 느꼈습니다.

지금은 수정 후 확인 순서를 정해놨습니다

현재는 코드를 고친 뒤 대략 이런 순서로 확인합니다.

먼저 코드를 저장합니다.

그다음 현재 배포 상태를 확인합니다.

웹앱 주소가 바뀌었는지 봅니다.

Webhook 주소와 같은지 확인합니다.

텔레그램에서 가장 단순한 명령어를 하나 보내봅니다.

그리고 Google Apps Script 실행 기록을 확인합니다.

여기까지 정상이라면 그다음 새로운 기능을 테스트합니다.

예전에는 새 기능이 안 되면 바로 코드부터 고쳤는데 지금은 연결 상태부터 확인하는 경우가 많아졌습니다.

직접 해보니 코드보다 연결 때문에 막히는 경우도 많았습니다

처음에는 오류가 나면 무조건

“내가 코드를 잘못 썼다.”

라고 생각했습니다.

그런데 지금까지 만들어보니 그렇지 않은 경우도 꽤 많았습니다.

배포가 예전 상태거나

Webhook 주소가 다르거나

웹앱 주소가 바뀌었거나

함수 연결이 안 되어 있는 경우도 있었습니다.

초보자인 제 입장에서는 오히려 이런 부분이 코드를 고치는 것보다 더 어려웠습니다.

코드는 오류 메시지라도 나오는데 연결 문제는 겉으로 보면 그냥 아무 반응이 없는 경우가 많았기 때문입니다.

그래도 이제는 무작정 다시 만들지는 않게 됐습니다

처음 텔레그램 봇을 만들 때는 조금만 이상해도 처음부터 다시 만드는 게 빠를 것 같았습니다.

지금은 그렇게 하지 않습니다.

어디까지 정상인지 먼저 확인합니다.

텔레그램 메시지는 들어오는지

Apps Script는 실행되는지

현재 배포 주소는 맞는지

Webhook은 제대로 연결되어 있는지

새 함수가 실제로 호출되는지

이렇게 하나씩 확인합니다.

코딩 실력이 크게 늘었다기보다는 문제를 보는 순서가 조금 생긴 것 같습니다.

다음에는 지금까지 사용했던 네이버 뉴스 API와는 조금 다른 방식으로 뉴스를 가져와보려고 합니다.

이번에는 RSS라는 방법을 이용해서 특정 사이트의 새 글을 텔레그램으로 받아보는 과정을 직접 해보겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

글쓴이

bluekei9@keinote.com

관련 게시물

코딩 하나도 모르던 제가 결국 개인 뉴스 자동화 시스템을 만든 전체 과정

안녕하세요 케이입니다. 처음 이걸 시작할 때만 해도 텔레그램 봇이 정확히 어떻게 움직이는지 잘 몰랐습니다. API라는 말은 많이 들어봤지만 정확히 어떤 역할을 하는지도...

모두 읽어보기

텔레그램 뉴스봇이 갑자기 멈췄을 때 초보자인 제가 확인한 순서

안녕하세요 케이입니다. 앞에서는 Google Apps Script의 트리거를 이용해서 정해진 시간에 뉴스가 자동으로 오도록 만들어봤습니다. 자동으로 뉴스가 도착하니까 상당히 편했습니다. 그런데 며칠 사용하다...

모두 읽어보기

매번 검색하기 귀찮아서 자주 보는 뉴스 키워드를 저장해봤습니다

안녕하세요 케이입니다. 앞에서는 텔레그램으로 오는 뉴스 메시지를 조금 더 보기 좋게 꾸며봤습니다. 제목은 굵게 만들고, 설명은 짧게 붙이고, 긴 링크도 기사 보기처럼...

모두 읽어보기

텔레그램 뉴스 메시지가 너무 지저분해서 보기 좋게 꾸며봤습니다

안녕하세요 케이입니다. 앞에서는 텔레그램 뉴스봇에 뉴스 제목뿐만 아니라 간단한 설명까지 같이 표시해봤습니다. 기능 자체는 만족스러웠습니다. 제목만 볼 때보다 내용을 훨씬 빨리 파악할...

모두 읽어보기

뉴스 제목만 오던 텔레그램 봇에 간단한 내용까지 표시해봤습니다

안녕하세요 케이입니다. 앞에서는 텔레그램 뉴스봇에서 관심 없는 단어가 들어간 뉴스는 자동으로 제외하도록 만들어봤습니다. 뉴스 개수도 줄이고, 같은 기사도 어느 정도 걸러내고, 원하는...

모두 읽어보기

관심 없는 단어가 들어간 뉴스는 자동으로 빼도록 만들어봤습니다

안녕하세요 케이입니다. 앞에서는 텔레그램 뉴스봇에서 제가 원하는 언론사만 골라서 받아보는 기능을 만들어봤습니다. 그렇게 출처까지 어느 정도 정리하고 나니까 확실히 뉴스가 깔끔해졌습니다. 그런데...

모두 읽어보기