공고 알림봇 만들기 (6편) — 한 공고가 일곱 번 올 뻔했습니다

5편에서 "제목+주소"를 열쇠로 삼아 중복을 막았다고 했죠. 잘 되는 줄 알았어요. 그런데 공고 하나가 알림 일곱 개로 쪼개질 뻔했습니다.

지난 편 → 5편 — 같은 공고가 계속 왔습니다

공고 하나가 여러 줄로 쪼개져 있었어요

원인은 응답을 열어보고 알았습니다. 마이홈 API는 공고 한 건을 여러 줄로 나눠서 줍니다.

한 공고 안에 아파트가 여러 단지 들어 있으면, 단지마다 한 줄씩 만들어지는 식이에요. 사람이 보기엔 공고 하나인데 데이터로는 일곱 줄인 거죠.

실제로 지금 받아보면 이렇습니다.

구분받은 줄 수실제 공고 수
임대100줄34건
분양64줄32건

줄 수와 공고 수가 두 배 가까이 차이 납니다.

주소에 단지 번호가 붙어 있었어요

그래도 제목이 같으니 제 열쇠에 걸렸어야 하는 것 아닌가 싶었어요. 문제는 주소였습니다.

...ttotHouseDetailView.do?pblancId=1340&houseSn=3
...ttotHouseDetailView.do?pblancId=1340&houseSn=8
...ttotHouseDetailView.do?pblancId=1340&houseSn=9

앞부분(공고 번호)은 같은데 뒤에 단지 번호가 붙어서 주소가 전부 달라집니다. 제목은 같아도 주소가 다르니 제 열쇠는 다른 공고라고 판단해버린 거예요.

숫자로 보면 이렇습니다.

구분공고 수만들어진 열쇠 수
임대34건59개
분양32건64개

분양은 사실상 줄 수만큼 알림이 갈 뻔했어요.

공고 번호로 대표 한 줄만 뽑았어요

해결은 단순했습니다. 데이터에 공고 번호가 따로 들어 있었거든요. 같은 번호가 이미 나왔으면 건너뛰고, 공고당 첫 줄만 남겼습니다.

알림 대상을 고를 때 이미 본 공고 번호를 기억해두고 거르는 식이에요. 열 줄이 와도 한 줄만 통과합니다.

여기서 짚어둘 게 있어요. 이건 5편의 중복 제거와 다른 층위입니다.

  • 5편은 "어제 본 것을 오늘 또 보내지 않기" — 시간에 걸친 중복
  • 이번은 "한 번에 온 열 줄을 한 건으로 묶기" — 같은 응답 안의 중복

둘 다 중복 제거라 부르지만 걸러야 할 지점이 달랐어요. 앞의 것만 만들어두고 뒤의 것을 놓쳤던 겁니다.

반대로, 조용히 사라진 것들도 있었어요

더 고약한 걸 나중에 발견했습니다. 든든전세 쪽은 정반대 문제를 안고 있었어요.

3편에서 이 API는 상세 주소를 안 준다고 했죠. 그래서 저는 조회 페이지 주소를 고정으로 붙였습니다. 그 말은 300건이 전부 같은 주소를 갖는다는 뜻이에요.

주소가 다 같으니 열쇠는 사실상 제목 하나로 결정됩니다. 그런데 든든전세 제목은 제가 지역·면적으로 조합해 만든 것이라, 다른 물건인데 제목이 똑같아지는 경우가 생겼어요.

물건 300건 → 서로 다른 열쇠는 290개
             → 10건이 알림 없이 사라짐

예를 들어 서울 강서구 든든전세 (29.99㎡)라는 제목을 가진 물건이 세 건 있습니다. 동도 다르고 보증금도 다른 별개 물건인데, 제 봇에겐 하나로 보였어요.

같은 열쇠, 정반대 고장

정리하면 이렇게 됩니다.

마이홈든든전세
주소가너무 잘게 나뉨아예 없음(고정값)
그래서한 공고가 여러 번여러 물건이 한 건으로 합쳐짐
체감시끄러움 — 바로 알아챔조용함 — 한참 몰랐음

같은 열쇠 설계가 소스에 따라 정반대로 고장 났어요. 그리고 알아채는 속도가 완전히 달랐습니다.

중복은 알림이 겹쳐 울리니 금방 눈에 띕니다. 반면 10건이 사라진 건 아무 일도 일어나지 않아서 한참 뒤에야 발견했어요.

정리 — 안 오는 건 알아채기 어렵다

이 편에서 얻은 건 기술보다 태도에 가까워요.

잘못 온 알림은 눈에 띕니다. 안 온 알림은 안 띕니다. 봇이 조용하면 "새 공고가 없나 보다" 하고 넘어가게 되죠. 그게 정상인지 고장인지 구분할 방법이 없었어요.

그래서 지금은 수집한 건수와 실제 알림 건수를 함께 기록해둡니다. 둘의 차이가 설명되지 않으면 뭔가 잘못된 겁니다. 참고로 든든전세 10건 문제는 아직 안 고쳤어요. 고칠 방법은 정리해뒀는데, 급한 것부터 하다 보니 밀려 있습니다.

다음 편

알림은 정확해졌는데 이번엔 읽기가 불편했어요. 링크를 누르기까지 손이 몇 번 가는지 세어보고 나서 손을 봤습니다. → 7편 — 텔레그램 봇 인라인 키보드로 버튼을 달았습니다


(이전 편: 5편 — 같은 공고가 계속 왔습니다)

댓글