믿는 코드에 발등 찍힌다.

Sam Kim·2022년 6월 8일
0

Learned a Lesson

목록 보기
1/1

Prologue

지금 정상 작동 하는 코드, 내일도 믿을 수 있을까?
아니, 절대 아니다. 조금 전까지도 정상 작동하던 코드도 지금 당장 작동하지 않을 수 있다.

차라리 에러가 나면 다행이다. 작동은 하지만 의도한 바와 다른 결과를 반환하여 혼란을 야기할 수도 있다.

특히 데이터 수집이나 전처리를 다루는 코드라면 더욱 그럴 것이다.

그래서 내린 결론부터 간단히 말하자면, 사전에 여러 예방책이나 더블체크 할 수 있는 장치를 준비해야겠다.

웹 데이터 수집과정에서 발생한 고마운 에러 덕분에 깨달은 것을 기록으로 남겨본다.

발단

웹크롤링 코드에 에러 발생

실습삼아 어느 한 사이트에서 수치 데이터를 크롤링하는 코드를 짜고 정상적으로 데이터 수집을 완료했다.

그렇게 조금전까지 분명 잘 작동하던 코드를 잠시 후 다시 실행해보니 작동을 하지 않고 에러가 났다.

에러 메시지는 충분히 원인을 알려주지 않았고, 한참 동안 코드를 하나씩 해부하다가 특정 수치가 None값으로 불러와져서 에러를 발생 시켰다는 것을 알게됐다.

그런데 왜?

사이트에서 보이는 수치가 분명히 존재하고 같은 구조의 다른 데이터는 정상적으로 불러와지는데 이것만 갑자기 None값이 나온 이유를 찾아야했다.

원인

Python 코드에서 답을 얻지 못 했으니 이번엔 HTML 을 뜯어봤고 드디어 원인을 찾았다.

해당 수치에 변화에 따라 출력 부분에 적용되는 HTML element가 함께 변한 것이 원인이었다.

특정 element안에 값을 가져오는 코드였는데 해당 수치에서 그 element 자체가 사라져 버렸으니 아무것도 가져오지 못했던 것이다.

if문을 통해 변화하는 element 에 따라 각각 대응할 수 있게 수정해서 당면한 문제는 해결했다.
이후 문득 무서운 생각이 들었다.

실무였다면?

이번 문제의 핵심 요소는 두가지로 볼 수 있다.

1. 데이터 수집 혹은 전처리 방식이 바뀌었다는 것.

단순히 타사 데이터를 가져오는 상황에 국한된 것은 아닐 것이다.

자사에서도 데이터를 발생시키고 누적시키는 방식은 얼마든지 변화가 가능하다.

이는 전 회사에서 근무하며 실제로 겪었던 부분이기도 하다.

간단한 예로, 자사 데이터팀에서 제공하던 데이터 중 늘 20번째 컬럼에 표기되던 데이터가 21번째 컬럼으로 밀려나 엑셀 수식이 완전히 꼬여버리며 리포트가 엉망이 된 적이 있었다.

2. 이러한 변화가 잘못된 정보를 가져올 수 있다는 것.

이번엔 운 좋게 에러가 나줘서 문제가 있다는 것을 알게 되었다. 하지만 언제나 운이 좋지는 않을 것이다.

None값이어도 연산에 문제가 없는 데이터였다면, 틀린 결과값을 보며 잘못된 인사이트를 도출할 수도 있었겠다는 생각이 들었다. 그리고 이를 알아차리기까지 꽤 시간이 걸렸을지도 모를 일이다.

실무에서 이런 일이 일어났다면 상황에 따라 엄청난 일이 될 수도 있다.

예방하려면?

내가 원하는 데이터가 정상적으로 수집되는 지 더블 체크를 해주는 장치가 필요할 것이다.

데이터 구조에 변화를 감지하면, 혹은 outlier가 발생하면 알려주는 시스템을 구축하여 유사시 수동으로 체크해주는 것도 방법일 것 같다.

또한, 자사 데이터라면 데이터를 발생시키는 유관부서에 관련 변화가 미치게 될 영향에 대해 설명하고 데이터 구조 등에 변화를 주는 요소를 변경하게될 경우 사전 협의를 요청하는 것도 방법일 것 같다.

데이터 실무 경험이 없는 짧은 식견으로 생각해본 방법이라 허무맹랑한 방법일 수도 있겠다.

실무에 투입되면 현실적인 방법을 고민해 보고 미리 정리해 두어야겠다.

0개의 댓글