두 달 전 기사가 오늘 뉴스인 척 떠 있었다
업종마다 최신 헤드라인을 하나씩 붙였는데, 석 달 지난 기사가 오늘 뉴스인 척 떠 있었다. "목록의 첫 번째가 가장 최신일 것"이라는 착각에서 시작된 문제.
주도 업종 화면에 업종별 뉴스 헤드라인을 한 줄씩 붙였다. “반도체” 옆에 반도체 관련 기사 제목이 뜨는 식이다. 오늘 왜 이 업종이 강한지 짐작하는 데 도움이 될 것 같았다.
구글 뉴스가 제공하는 공개 목록을 썼다. 검색어를 넣으면 기사 목록을 받아올 수 있다.
며칠 쓰다 보니 이상했다. 운송장비 업종에 엔비디아 관련 기사가 붙어 있었다. 클릭해 보니 46일 전 기사였다.
첫 번째가 최신이 아니었다
내 프로그램은 받아온 목록에서 맨 위 기사 하나를 가져다 썼다. 목록이 당연히 최신순일 거라고 생각했기 때문이다. 블로그 구독 목록은 다 그러니까.
구글 뉴스는 아니었다. 관련도순이었다.
생각해 보면 당연하다. 구글에서 뭔가를 검색하면 결과가 시간순으로 나오지 않는다. 큰 언론사의 많이 읽힌 기사가 위로 올라온다. 그 기사가 두 달 전 것이어도.
확인해 보니 이랬다.
| 업종 | 붙어 있던 기사 나이 |
|---|---|
| 운송장비 | 46일 전 |
| 유통 | 97일 전 |
| 건설 | 85일 전 |
석 달 전 기사를 오늘의 업종 동향인 것처럼 보여주고 있었다. 이건 화면이 깨진 것보다 나쁘다. 틀린 정보를 사실인 것처럼 띄운 것이기 때문이다.
날짜를 직접 봤다
목록에는 기사마다 발행 날짜가 같이 들어 있다. 그걸 안 보고 순서만 믿은 게 잘못이었다. 방식을 바꿨다.
- 맨 위 하나만 받지 않고 여러 건을 받는다 스물다섯 건까지 후보로 가져온다
- 기사마다 발행 날짜를 확인한다 날짜를 읽을 수 없는 기사는 아예 후보에서 뺀다
- 사흘보다 오래된 기사는 버린다 업종 동향을 짐작하는 용도라 그보다 오래되면 의미가 없다
- 남은 것 중 가장 새 것 하나를 고른다 하나도 안 남으면 아무것도 표시하지 않는다
2단계의 “날짜를 읽을 수 없으면 버린다” 가 생각보다 중요했다. 처음엔 “날짜를 모르면 일단 후보에 넣어두자”고 짰다. 그런데 날짜 형식이 특이한 기사가 하필 오래된 기사일 수도 있다. 신선한지 확인할 수 없는 것은 후보에서 빼는 게 맞다.
검색어를 두 개 시도하는 것도 이때 넣었다. “○○ 관련주”로만 찾으면 최근 사흘 안에 결과가 하나도 없는 업종이 생긴다. “○○ 주가”로 한 번 더 찾아본다.
그래도 없으면 뉴스를 아예 표시하지 않는다. 억지로 오래된 기사를 채우는 것보다 빈칸이 낫다.
화면에 나이를 적었다
고치고 나서 하나를 더 넣었다. 기사 제목 옆에 “· 3시간 전”을 표시했다.
이건 기능이라기보다 내가 다시 속지 않기 위한 장치였다. 나이가 화면에 찍혀 있으면 다음에 또 걸러내기가 새면 눈에 바로 띈다. 실제로 이 표시를 넣고 며칠 뒤 한 업종에 “· 60시간 전”이 뜬 걸 보고 검색어를 조정할 수 있었다.
걸러내는 장치를 만들었으면, 그 장치가 통과시킨 값도 화면에 보여주는 게 좋다. 안 보이면 언제 망가졌는지 알 수 없다.
덤 — 고쳤는데 화면이 안 바뀌었다
이걸 다 고치고 새로고침했는데 여전히 옛날 기사가 떠 있었다. 5분쯤 또 헤맸다.
브라우저가 예전 화면 파일을 붙잡고 있었다. 특히 아이폰에서 심했다. 홈 화면에 추가해서 앱처럼 쓰는 방식은 파일을 더 오래 들고 있는다.
그래서 화면 파일만큼은 매번 새로 받아오도록 설정을 바꿨다. 나 혼자 쓰는 대시보드라 그래도 부담이 없다. 방문자가 많은 사이트라면 이렇게 하면 안 되고 다른 방법을 써야 한다.
남은 교훈
- 목록의 순서를 믿지 마라. 어떤 순서로 줄지는 주는 쪽 마음이다. 순서를 가정하지 말고 값을 직접 보고 골라라.
- 신선한지 확인할 수 없는 데이터는 버려라. 날짜를 모르는 기사를 후보에 남겨두는 것은 위험을 남겨두는 것이다.
- 빈칸이 틀린 정보보다 낫다. 화면의 칸을 채우려고 낡은 데이터를 밀어 넣으면, 그건 버그가 아니라 거짓말이 된다.
- 걸러낸 결과를 화면에 드러내라. “3시간 전”이라는 다섯 글자가 나중에 여러 번 도움이 됐다.
- 고쳤는데 안 바뀌면 캐시부터 의심해라. 특히 모바일에서.
이 글은 개인 프로젝트의 개발 기록입니다. 투자 자문이나 종목 추천이 아니며, 글에 등장하는 종목명은 프로그램의 동작을 설명하기 위한 예시입니다. 투자 판단과 그 결과에 대한 책임은 투자자 본인에게 있습니다.